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

Unified Diff: src/zone-allocator.h

Issue 157443002: Add basic support for STL containers allocated in Zones (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Review feedback Created 6 years, 10 months 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 | « src/utils.h ('k') | src/zone-containers.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/zone-allocator.h
diff --git a/test/cctest/trace-extension.h b/src/zone-allocator.h
similarity index 55%
copy from test/cctest/trace-extension.h
copy to src/zone-allocator.h
index b80b3d45dc81579629ddccb6761cfa709b17e4e9..5245c6b1bfd45d3d23e5e5efb82a5b4fa4707fba 100644
--- a/test/cctest/trace-extension.h
+++ b/src/zone-allocator.h
@@ -25,32 +25,56 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#ifndef V8_TEST_CCTEST_TRACE_EXTENSION_H_
-#define V8_TEST_CCTEST_TRACE_EXTENSION_H_
+#ifndef V8_ZONE_ALLOCATOR_H_
+#define V8_ZONE_ALLOCATOR_H_
-#include "v8.h"
+#include "zone.h"
namespace v8 {
namespace internal {
-class TraceExtension : public v8::Extension {
+template<typename T>
+class zone_allocator {
public:
- TraceExtension() : v8::Extension("v8/trace", kSource) { }
- virtual v8::Handle<v8::FunctionTemplate> GetNativeFunctionTemplate(
- v8::Isolate* isolate,
- v8::Handle<v8::String> name);
- static void Trace(const v8::FunctionCallbackInfo<v8::Value>& args);
- static void JSTrace(const v8::FunctionCallbackInfo<v8::Value>& args);
- static void JSEntrySP(const v8::FunctionCallbackInfo<v8::Value>& args);
- static void JSEntrySPLevel2(const v8::FunctionCallbackInfo<v8::Value>& args);
- static Address GetJsEntrySp();
- static void InitTraceEnv(TickSample* sample);
- static void DoTrace(Address fp);
+ typedef T* pointer;
+ typedef const T* const_pointer;
+ typedef T& reference;
+ typedef const T& const_reference;
+ typedef T value_type;
+ typedef size_t size_type;
+ typedef ptrdiff_t difference_type;
+ template<class O> struct rebind {
+ typedef zone_allocator<O> other;
+ };
+
+ explicit zone_allocator(Zone* zone) throw() : zone_(zone) {}
+ explicit zone_allocator(const zone_allocator& other) throw()
+ : zone_(other.zone_) {}
+ template<typename U> zone_allocator(const zone_allocator<U>&) throw() {}
+
+ pointer address(reference x) const {return &x;}
+ const_pointer address(const_reference x) const {return &x;}
+
+ pointer allocate(size_type count, const void* hint = 0) {
+ size_t size = count * sizeof(value_type);
+ size = RoundUp(size, kPointerSize);
+ return static_cast<pointer>(zone_->New(size));
+ }
+ void deallocate(pointer p, size_type) { /* noop for Zones */ }
+
+ size_type max_size() const throw() {
+ size_type max = static_cast<size_type>(-1) / sizeof(T);
+ return (max > 0 ? max : 1);
+ }
+ void construct(pointer p, const T& val) {
+ new(static_cast<void*>(p)) T(val);
+ }
+ void destroy(pointer p) { (static_cast<T*>(p))->~T(); }
+
private:
- static Address GetFP(const v8::FunctionCallbackInfo<v8::Value>& args);
- static const char* kSource;
+ Zone* zone_;
};
} } // namespace v8::internal
-#endif
+#endif // V8_ZONE_ALLOCATOR_H_
« no previous file with comments | « src/utils.h ('k') | src/zone-containers.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698