Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(113)

Unified Diff: third_party/re2/util/arena.h

Issue 1516543002: Update re2 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: updated update instructions Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/re2/testinstall.cc ('k') | third_party/re2/util/arena.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_
-
« no previous file with comments | « third_party/re2/testinstall.cc ('k') | third_party/re2/util/arena.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698