Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include <opc/ua/protocol/input_from_buffer.h>
00021
00022 #include <stdexcept>
00023 #include <cstring>
00024 #include <algorithm>
00025
00026 namespace OpcUa
00027 {
00028
00029 InputFromBuffer::InputFromBuffer(const char* buf, std::size_t bufSize)
00030 : Buffer(buf)
00031 , Size(bufSize)
00032 {
00033 if (!Buffer) throw std::invalid_argument("InputFromBuffer: Input buffer cannot be empty.");
00034 if (!bufSize) throw std::invalid_argument("InputFromBuffer: Invalid size of buffer");
00035 }
00036
00037 std::size_t InputFromBuffer::Receive(char* data, std::size_t size)
00038 {
00039 if (Size == 0)
00040 {
00041 return 0;
00042 }
00043
00044 const std::size_t sizeToRead = std::min(Size, size);
00045 memcpy(data, Buffer, sizeToRead);
00046 Size -= sizeToRead;
00047 Buffer += sizeToRead;
00048 return sizeToRead;
00049 }
00050
00051 size_t InputFromBuffer::GetRemainSize() const
00052 {
00053 return Size;
00054 }
00055
00056 }