Feathercoin  0.5.0
P2P Digital Currency
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros
arena.h
Go to the documentation of this file.
1 // Copyright (c) 2011 The LevelDB Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. See the AUTHORS file for names of contributors.
4 
5 #ifndef STORAGE_LEVELDB_UTIL_ARENA_H_
6 #define STORAGE_LEVELDB_UTIL_ARENA_H_
7 
8 #include <cstddef>
9 #include <vector>
10 #include <assert.h>
11 #include <stdint.h>
12 
13 namespace leveldb {
14 
15 class Arena {
16  public:
17  Arena();
18  ~Arena();
19 
20  // Return a pointer to a newly allocated memory block of "bytes" bytes.
21  char* Allocate(size_t bytes);
22 
23  // Allocate memory with the normal alignment guarantees provided by malloc
24  char* AllocateAligned(size_t bytes);
25 
26  // Returns an estimate of the total memory usage of data allocated
27  // by the arena (including space allocated but not yet used for user
28  // allocations).
29  size_t MemoryUsage() const {
30  return blocks_memory_ + blocks_.capacity() * sizeof(char*);
31  }
32 
33  private:
34  char* AllocateFallback(size_t bytes);
35  char* AllocateNewBlock(size_t block_bytes);
36 
37  // Allocation state
38  char* alloc_ptr_;
40 
41  // Array of new[] allocated memory blocks
42  std::vector<char*> blocks_;
43 
44  // Bytes of memory in blocks allocated so far
46 
47  // No copying allowed
48  Arena(const Arena&);
49  void operator=(const Arena&);
50 };
51 
52 inline char* Arena::Allocate(size_t bytes) {
53  // The semantics of what to return are a bit messy if we allow
54  // 0-byte allocations, so we disallow them here (we don't need
55  // them for our internal use).
56  assert(bytes > 0);
57  if (bytes <= alloc_bytes_remaining_) {
58  char* result = alloc_ptr_;
59  alloc_ptr_ += bytes;
60  alloc_bytes_remaining_ -= bytes;
61  return result;
62  }
63  return AllocateFallback(bytes);
64 }
65 
66 } // namespace leveldb
67 
68 #endif // STORAGE_LEVELDB_UTIL_ARENA_H_
size_t blocks_memory_
Definition: arena.h:45
size_t alloc_bytes_remaining_
Definition: arena.h:39
char * Allocate(size_t bytes)
Definition: arena.h:52
char * AllocateNewBlock(size_t block_bytes)
Definition: arena.cc:61
char * AllocateFallback(size_t bytes)
Definition: arena.cc:24
std::vector< char * > blocks_
Definition: arena.h:42
void operator=(const Arena &)
char * alloc_ptr_
Definition: arena.h:38
size_t MemoryUsage() const
Definition: arena.h:29
char * AllocateAligned(size_t bytes)
Definition: arena.cc:42