/* Copyright (C) 2011 Her Majesty the Queen in Right of Canada (Communications Research Center Canada) */ /* This file is part of CRC-DADMOD. CRC-DADMOD is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. CRC-DADMOD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with CRC-DADMOD. If not, see . */ #include "Buffer.h" #include "PcDebug.h" #include #include #include #ifdef HAVE_DECL__MM_MALLOC # include #else # define memalign(a, b) malloc(b) #endif Buffer::Buffer(size_t len, const void *data) { PDEBUG("Buffer::Buffer(%zu, %p)\n", len, data); this->len = 0; this->size = 0; this->data = NULL; setData(data, len); } Buffer::~Buffer() { free(data); } Buffer &Buffer::operator=(const Buffer ©) { setData(copy.data, copy.len); return *this; } Buffer &Buffer::operator+=(const Buffer ©) { appendData(copy.data, copy.len); return *this; } void Buffer::setLength(size_t len) { if (len > size) { void *tmp = data; //data = _mm_malloc(len, 16); data = memalign(16, len); memcpy(data, tmp, this->len); free(tmp); size = len; } this->len = len; } void Buffer::setData(const void *data, size_t len) { setLength(0); appendData(data, len); } void Buffer::appendData(const void *data, size_t len) { size_t offset = this->len; setLength(this->len + len); if (data != NULL) { memcpy((char*)this->data + offset, data, len); } } size_t Buffer::getLength() { return len; } void *Buffer::getData() { return data; }