#ifndef GCSegmentedArray_h
#define GCSegmentedArray_h
-#include "HeapBlock.h"
+#include <wtf/DoublyLinkedList.h>
#include <wtf/Vector.h>
namespace JSC {
-class BlockAllocator;
-class DeadBlock;
-
template <typename T>
-class GCArraySegment : public HeapBlock<GCArraySegment<T>> {
+class GCArraySegment : public DoublyLinkedListNode<GCArraySegment<T>> {
+ friend class WTF::DoublyLinkedListNode<GCArraySegment<T>>;
public:
- GCArraySegment(Region* region)
- : HeapBlock<GCArraySegment>(region)
+ GCArraySegment()
+ : DoublyLinkedListNode<GCArraySegment<T>>()
#if !ASSERT_DISABLED
, m_top(0)
#endif
{
}
- static GCArraySegment* create(DeadBlock*);
+ static GCArraySegment* create();
+ static void destroy(GCArraySegment*);
T* data()
{
static const size_t blockSize = 4 * KB;
+ GCArraySegment* m_prev;
+ GCArraySegment* m_next;
#if !ASSERT_DISABLED
size_t m_top;
#endif
friend class GCSegmentedArrayIterator<T>;
friend class GCSegmentedArrayIterator<const T>;
public:
- GCSegmentedArray(BlockAllocator&);
+ GCSegmentedArray();
~GCSegmentedArray();
void append(T);
void validatePrevious();
DoublyLinkedList<GCArraySegment<T>> m_segments;
- BlockAllocator& m_blockAllocator;
JS_EXPORT_PRIVATE static const size_t s_segmentCapacity = CapacityFromSize<GCArraySegment<T>::blockSize>::value;
size_t m_top;