7f993f87ee
R=iposva@google.com Review URL: https://codereview.chromium.org//18259014 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@25063 260f80e4-7a28-3924-810f-c04153c831b5
67 lines
1.7 KiB
C++
67 lines
1.7 KiB
C++
// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file.
|
|
|
|
#ifndef VM_OBJECT_ID_RING_H_
|
|
#define VM_OBJECT_ID_RING_H_
|
|
|
|
namespace dart {
|
|
|
|
// Forward declarations.
|
|
class RawObject;
|
|
class Isolate;
|
|
class ObjectPointerVisitor;
|
|
|
|
// A ring buffer of object pointers that have been given an id. An object
|
|
// may be pointed to by multiple ids. Objects contained in the ring will
|
|
// be preserved across scavenges but not old space collections.
|
|
// When the ring buffer wraps around older objects will be replaced and their
|
|
// ids will be invalidated.
|
|
class ObjectIdRing {
|
|
public:
|
|
static const int32_t kMaxId = 0x3FFFFFFF;
|
|
static const int32_t kInvalidId = -1;
|
|
static const int32_t kDefaultCapacity = 1024;
|
|
|
|
static void Init(Isolate* isolate, int32_t capacity = kDefaultCapacity);
|
|
|
|
~ObjectIdRing();
|
|
|
|
int32_t GetIdForObject(RawObject* raw_obj);
|
|
RawObject* GetObjectForId(int32_t id);
|
|
|
|
void VisitPointers(ObjectPointerVisitor* visitor);
|
|
|
|
private:
|
|
friend class ObjectIdRingTestHelper;
|
|
|
|
void SetCapacityAndMaxSerial(int32_t capacity, int32_t max_serial);
|
|
|
|
ObjectIdRing(Isolate* isolate, int32_t capacity);
|
|
Isolate* isolate_;
|
|
RawObject** table_;
|
|
int32_t max_serial_;
|
|
int32_t capacity_;
|
|
int32_t serial_num_;
|
|
bool wrapped_;
|
|
|
|
RawObject** table() {
|
|
return table_;
|
|
}
|
|
int32_t table_size() {
|
|
return capacity_;
|
|
}
|
|
|
|
int32_t NextSerial();
|
|
int32_t AllocateNewId(RawObject* object);
|
|
int32_t IndexOfId(int32_t id);
|
|
bool IsValidContiguous(int32_t id);
|
|
bool IsValidId(int32_t id);
|
|
|
|
DISALLOW_COPY_AND_ASSIGN(ObjectIdRing);
|
|
};
|
|
|
|
} // namespace dart
|
|
|
|
#endif // VM_OBJECT_ID_RING_H_
|