Home | History | Annotate | Download | only in src
      1 // Copyright 2014 the V8 project 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.
      4 
      5 #ifndef V8_ZONE_CONTAINERS_H_
      6 #define V8_ZONE_CONTAINERS_H_
      7 
      8 #include <deque>
      9 #include <queue>
     10 #include <vector>
     11 
     12 #include "src/zone-allocator.h"
     13 
     14 namespace v8 {
     15 namespace internal {
     16 
     17 // A wrapper subclass for std::vector to make it easy to construct one
     18 // that uses a zone allocator.
     19 template <typename T>
     20 class ZoneVector : public std::vector<T, zone_allocator<T> > {
     21  public:
     22   // Constructs an empty vector.
     23   explicit ZoneVector(Zone* zone)
     24       : std::vector<T, zone_allocator<T> >(zone_allocator<T>(zone)) {}
     25 
     26   // Constructs a new vector and fills it with {size} elements, each
     27   // having the value {def}.
     28   ZoneVector(int size, T def, Zone* zone)
     29       : std::vector<T, zone_allocator<T> >(size, def, zone_allocator<T>(zone)) {
     30   }
     31 };
     32 
     33 // A wrapper subclass std::deque to make it easy to construct one
     34 // that uses a zone allocator.
     35 template <typename T>
     36 class ZoneDeque : public std::deque<T, zone_allocator<T> > {
     37  public:
     38   explicit ZoneDeque(Zone* zone)
     39       : std::deque<T, zone_allocator<T> >(zone_allocator<T>(zone)) {}
     40 };
     41 
     42 // A wrapper subclass for std::queue to make it easy to construct one
     43 // that uses a zone allocator.
     44 template <typename T>
     45 class ZoneQueue : public std::queue<T, std::deque<T, zone_allocator<T> > > {
     46  public:
     47   // Constructs an empty queue.
     48   explicit ZoneQueue(Zone* zone)
     49       : std::queue<T, std::deque<T, zone_allocator<T> > >(
     50             std::deque<T, zone_allocator<T> >(zone_allocator<T>(zone))) {}
     51 };
     52 
     53 // Typedefs to shorten commonly used vectors.
     54 typedef ZoneVector<bool> BoolVector;
     55 typedef ZoneVector<int> IntVector;
     56 } }  // namespace v8::internal
     57 
     58 #endif  // V8_ZONE_CONTAINERS_H_
     59