blob: 1510d991ef5420283348e94cbcb1d6c92b66624a [file]
// Copyright 2023 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include "mpact/sim/generic/data_buffer.h"
#include <cstdint>
#include "mpact/sim/generic/state_item_base.h"
namespace mpact {
namespace sim {
namespace generic {
DataBufferFactory::~DataBufferFactory() { Clear(); }
// Free up all allocated DataBuffers held in the db_store.
void DataBufferFactory::Clear() {
for (int i = 0; i <= kShortSize; i++) {
for (auto db : short_free_list_[i]) {
delete db;
}
short_free_list_[i].clear();
}
for (auto bucket : free_list_) {
for (auto db : bucket.second) {
delete db;
}
bucket.second.clear();
}
}
// Allocate a DataBuffer and then copy the value of the source DB into
// the newly allocated buffer.
DataBuffer *DataBufferFactory::MakeCopyOf(const DataBuffer *src_db) {
DataBuffer *db = Allocate(src_db->size<uint8_t>());
db->CopyFrom(src_db);
return db;
}
DataBuffer::DataBuffer(unsigned size) : size_(size) {
// Allocate using unsigned char to guarantee appropriate alignment according
// to C++ standard 5.3.4 (11).
raw_ptr_ = static_cast<void *>(new unsigned char[size_]);
}
DataBuffer::~DataBuffer() { delete[] static_cast<unsigned char *>(raw_ptr_); }
} // namespace generic
} // namespace sim
} // namespace mpact