2 * Copyright (c) 2000 - 2014 Samsung Electronics Co., Ltd All Rights Reserved
4 * Contact: Bumjin Im <bj.im@samsung.com>
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License
19 * @file message-buffer.cpp
20 * @author Bartlomiej Grzelewski (b.grzelewski@samsung.com)
21 * @author Zofia Abramowska (z.abramowska@samsung.com)
23 * @brief Implementation of MessageBuffer.
26 #include <message-buffer.h>
28 #include <dpl/log/log.h>
32 void MessageBuffer::Push(const RawBuffer &data)
34 m_buffer.AppendCopy(&data[0], data.size());
37 RawBuffer MessageBuffer::Pop()
39 size_t size = m_buffer.Size();
41 buffer.resize(size + sizeof(size_t));
42 memcpy(&buffer[0], &size, sizeof(size_t));
43 m_buffer.FlattenConsume(&buffer[sizeof(size_t)], size);
47 bool MessageBuffer::Ready()
54 if (m_bytesLeft > m_buffer.Size())
60 void MessageBuffer::Read(size_t num, void *bytes)
64 if (num > m_bytesLeft) {
65 LogDebug("Protocol broken. OutOfData. Asked for: " << num << " Ready: " <<
66 m_bytesLeft << " Buffer.size(): " << m_buffer.Size());
67 Throw(Exception::OutOfData);
70 m_buffer.FlattenConsume(bytes, num);
74 void MessageBuffer::Write(size_t num, const void *bytes)
76 m_buffer.AppendCopy(bytes, num);