Moving source map to Function.

This commit is contained in:
Ben Vanik
2015-08-01 14:07:13 -07:00
parent 5aa50b3c18
commit b0425f7ee2
13 changed files with 121 additions and 114 deletions

View File

@@ -68,7 +68,7 @@ void* Arena::Alloc(size_t size) {
void Arena::Rewind(size_t size) { active_chunk_->offset -= size; }
void* Arena::CloneContents() {
size_t Arena::CalculateSize() {
size_t total_length = 0;
Chunk* chunk = head_chunk_;
while (chunk) {
@@ -78,9 +78,14 @@ void* Arena::CloneContents() {
}
chunk = chunk->next;
}
return total_length;
}
void* Arena::CloneContents() {
size_t total_length = CalculateSize();
void* result = malloc(total_length);
uint8_t* p = (uint8_t*)result;
chunk = head_chunk_;
Chunk* chunk = head_chunk_;
while (chunk) {
std::memcpy(p, chunk->buffer, chunk->offset);
p += chunk->offset;
@@ -92,6 +97,19 @@ void* Arena::CloneContents() {
return result;
}
void Arena::CloneContents(void* buffer, size_t buffer_length) {
uint8_t* p = (uint8_t*)buffer;
Chunk* chunk = head_chunk_;
while (chunk) {
std::memcpy(p, chunk->buffer, chunk->offset);
p += chunk->offset;
if (chunk == active_chunk_) {
break;
}
chunk = chunk->next;
}
}
Arena::Chunk::Chunk(size_t chunk_size)
: next(nullptr), capacity(chunk_size), buffer(0), offset(0) {
buffer = reinterpret_cast<uint8_t*>(malloc(capacity));

View File

@@ -12,6 +12,7 @@
#include <cstddef>
#include <cstdint>
#include <vector>
namespace xe {
@@ -31,6 +32,11 @@ class Arena {
void Rewind(size_t size);
void* CloneContents();
template <typename T>
void CloneContents(std::vector<T>& buffer) {
buffer.resize(CalculateSize() / sizeof(T));
CloneContents(buffer.data(), buffer.size() * sizeof(T));
}
private:
class Chunk {
@@ -45,7 +51,9 @@ class Arena {
size_t offset;
};
private:
size_t CalculateSize();
void CloneContents(void* buffer, size_t buffer_length);
size_t chunk_size_;
Chunk* head_chunk_;
Chunk* active_chunk_;