| Index: third_party/re2/util/arena.h
|
| diff --git a/third_party/re2/util/arena.h b/third_party/re2/util/arena.h
|
| deleted file mode 100644
|
| index 7eb385b00e328ce0c706fac4c901b4ebc5815ef7..0000000000000000000000000000000000000000
|
| --- a/third_party/re2/util/arena.h
|
| +++ /dev/null
|
| @@ -1,103 +0,0 @@
|
| -// Copyright 2000 The RE2 Authors. All Rights Reserved.
|
| -// Use of this source code is governed by a BSD-style
|
| -// license that can be found in the LICENSE file.
|
| -
|
| -// Sometimes it is necessary to allocate a large number of small
|
| -// objects. Doing this the usual way (malloc, new) is slow,
|
| -// especially for multithreaded programs. An UnsafeArena provides a
|
| -// mark/release method of memory management: it asks for a large chunk
|
| -// from the operating system and doles it out bit by bit as required.
|
| -// Then you free all the memory at once by calling UnsafeArena::Reset().
|
| -// The "Unsafe" refers to the fact that UnsafeArena is not safe to
|
| -// call from multiple threads.
|
| -//
|
| -// The global operator new that can be used as follows:
|
| -//
|
| -// #include "lib/arena-inl.h"
|
| -//
|
| -// UnsafeArena arena(1000);
|
| -// Foo* foo = new (AllocateInArena, &arena) Foo;
|
| -//
|
| -
|
| -#ifndef RE2_UTIL_ARENA_H_
|
| -#define RE2_UTIL_ARENA_H_
|
| -
|
| -namespace re2 {
|
| -
|
| -// This class is thread-compatible.
|
| -class UnsafeArena {
|
| - public:
|
| - UnsafeArena(const size_t block_size);
|
| - virtual ~UnsafeArena();
|
| -
|
| - void Reset();
|
| -
|
| - // This should be the worst-case alignment for any type. This is
|
| - // good for IA-32, SPARC version 7 (the last one I know), and
|
| - // supposedly Alpha. i386 would be more time-efficient with a
|
| - // default alignment of 8, but ::operator new() uses alignment of 4,
|
| - // and an assertion will fail below after the call to MakeNewBlock()
|
| - // if you try to use a larger alignment.
|
| -#ifdef __i386__
|
| - static const int kDefaultAlignment = 4;
|
| -#else
|
| - static const int kDefaultAlignment = 8;
|
| -#endif
|
| -
|
| - private:
|
| - void* GetMemoryFallback(const size_t size, const int align);
|
| -
|
| - public:
|
| - void* GetMemory(const size_t size, const int align) {
|
| - if ( size > 0 && size < remaining_ && align == 1 ) { // common case
|
| - last_alloc_ = freestart_;
|
| - freestart_ += size;
|
| - remaining_ -= size;
|
| - return reinterpret_cast<void*>(last_alloc_);
|
| - }
|
| - return GetMemoryFallback(size, align);
|
| - }
|
| -
|
| - private:
|
| - struct AllocatedBlock {
|
| - char *mem;
|
| - size_t size;
|
| - };
|
| -
|
| - // The returned AllocatedBlock* is valid until the next call to AllocNewBlock
|
| - // or Reset (i.e. anything that might affect overflow_blocks_).
|
| - AllocatedBlock *AllocNewBlock(const size_t block_size);
|
| -
|
| - const AllocatedBlock *IndexToBlock(int index) const;
|
| -
|
| - const size_t block_size_;
|
| - char* freestart_; // beginning of the free space in most recent block
|
| - char* freestart_when_empty_; // beginning of the free space when we're empty
|
| - char* last_alloc_; // used to make sure ReturnBytes() is safe
|
| - size_t remaining_;
|
| - // STL vector isn't as efficient as it could be, so we use an array at first
|
| - int blocks_alloced_; // how many of the first_blocks_ have been alloced
|
| - AllocatedBlock first_blocks_[16]; // the length of this array is arbitrary
|
| - // if the first_blocks_ aren't enough, expand into overflow_blocks_.
|
| - vector<AllocatedBlock>* overflow_blocks_;
|
| -
|
| - void FreeBlocks(); // Frees all except first block
|
| -
|
| - DISALLOW_EVIL_CONSTRUCTORS(UnsafeArena);
|
| -};
|
| -
|
| -// Operators for allocation on the arena
|
| -// Syntax: new (AllocateInArena, arena) MyClass;
|
| -// STL containers, etc.
|
| -enum AllocateInArenaType { AllocateInArena };
|
| -
|
| -} // namespace re2
|
| -
|
| -inline void* operator new(size_t size,
|
| - re2::AllocateInArenaType /* unused */,
|
| - re2::UnsafeArena *arena) {
|
| - return reinterpret_cast<char*>(arena->GetMemory(size, 1));
|
| -}
|
| -
|
| -#endif // RE2_UTIL_ARENA_H_
|
| -
|
|
|