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

Unified Diff: runtime/vm/object.h

Issue 9368049: Add external byte array API and finalize external strings and byte arrays. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: address review comments Created 8 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 | « runtime/vm/gc_marker.cc ('k') | runtime/vm/object.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/object.h
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 13e4c1f1d2377c943bd47240b28e3a01767e782a..266329981e19ac8e12ac613fc402b92b9d54cb4d 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -2696,8 +2696,6 @@ class Double : public Number {
// String may not be '\0' terminated.
class String : public Instance {
public:
- typedef void (*PeerFinalizer)(void *peer);
-
// We use 30 bits for the hash code so that we consistently use a
// 32bit Smi representation for the hash code on all architectures.
static const intptr_t kHashBits = 30;
@@ -2766,17 +2764,17 @@ class String : public Instance {
static RawString* NewExternal(const uint8_t* characters,
intptr_t len,
void* peer,
- PeerFinalizer callback,
+ Dart_PeerFinalizer callback,
Heap::Space = Heap::kNew);
static RawString* NewExternal(const uint16_t* characters,
intptr_t len,
void* peer,
- PeerFinalizer callback,
+ Dart_PeerFinalizer callback,
Heap::Space = Heap::kNew);
static RawString* NewExternal(const uint32_t* characters,
intptr_t len,
void* peer,
- PeerFinalizer callback,
+ Dart_PeerFinalizer callback,
Heap::Space = Heap::kNew);
static void Copy(const String& dst,
@@ -3030,7 +3028,7 @@ class ExternalOneByteString : public String {
virtual bool IsExternal() const { return true; }
virtual void* GetPeer() const {
- return raw_ptr()->external_data_->peer_;
+ return raw_ptr()->external_data_->peer();
}
static intptr_t InstanceSize() {
@@ -3040,20 +3038,22 @@ class ExternalOneByteString : public String {
static RawExternalOneByteString* New(const uint8_t* characters,
intptr_t len,
void* peer,
- PeerFinalizer callback,
+ Dart_PeerFinalizer callback,
Heap::Space space);
private:
const uint8_t* CharAddr(intptr_t index) const {
// TODO(iposva): Determine if we should throw an exception here.
ASSERT((index >= 0) && (index < Length()));
- return &(raw_ptr()->external_data_->data_[index]);
+ return &(raw_ptr()->external_data_->data()[index]);
}
void SetExternalData(ExternalStringData<uint8_t>* data) {
raw_ptr()->external_data_ = data;
}
+ static void Finalize(Dart_Handle handle, void* peer);
+
HEAP_OBJECT_IMPLEMENTATION(ExternalOneByteString, String);
friend class Class;
friend class String;
@@ -3072,7 +3072,7 @@ class ExternalTwoByteString : public String {
virtual bool IsExternal() const { return true; }
virtual void* GetPeer() const {
- return raw_ptr()->external_data_->peer_;
+ return raw_ptr()->external_data_->peer();
}
static intptr_t InstanceSize() {
@@ -3082,20 +3082,22 @@ class ExternalTwoByteString : public String {
static RawExternalTwoByteString* New(const uint16_t* characters,
intptr_t len,
void* peer,
- PeerFinalizer callback,
+ Dart_PeerFinalizer callback,
Heap::Space space = Heap::kNew);
private:
const uint16_t* CharAddr(intptr_t index) const {
// TODO(iposva): Determine if we should throw an exception here.
ASSERT((index >= 0) && (index < Length()));
- return &(raw_ptr()->external_data_->data_[index]);
+ return &(raw_ptr()->external_data_->data()[index]);
}
void SetExternalData(ExternalStringData<uint16_t>* data) {
raw_ptr()->external_data_ = data;
}
+ static void Finalize(Dart_Handle handle, void* peer);
+
HEAP_OBJECT_IMPLEMENTATION(ExternalTwoByteString, String);
friend class Class;
friend class String;
@@ -3114,7 +3116,7 @@ class ExternalFourByteString : public String {
virtual bool IsExternal() const { return true; }
virtual void* GetPeer() const {
- return raw_ptr()->external_data_->peer_;
+ return raw_ptr()->external_data_->peer();
}
static intptr_t InstanceSize() {
@@ -3124,20 +3126,22 @@ class ExternalFourByteString : public String {
static RawExternalFourByteString* New(const uint32_t* characters,
intptr_t len,
void* peer,
- PeerFinalizer callback,
+ Dart_PeerFinalizer callback,
Heap::Space space = Heap::kNew);
private:
const uint32_t* CharAddr(intptr_t index) const {
// TODO(iposva): Determine if we should throw an exception here.
ASSERT((index >= 0) && (index < Length()));
- return &(raw_ptr()->external_data_->data_[index]);
+ return &(raw_ptr()->external_data_->data()[index]);
}
void SetExternalData(ExternalStringData<uint32_t>* data) {
raw_ptr()->external_data_ = data;
}
+ static void Finalize(Dart_Handle handle, void* peer);
+
HEAP_OBJECT_IMPLEMENTATION(ExternalFourByteString, String);
friend class Class;
friend class String;
@@ -3381,6 +3385,10 @@ class ExternalByteArray : public ByteArray {
return Smi::Value(raw_ptr()->length_);
}
+ void* GetPeer() const {
+ return raw_ptr()->external_data_->peer();
+ }
+
template<typename T>
T At(intptr_t byte_offset) const {
T* addr = Addr<T>(byte_offset);
@@ -3413,6 +3421,8 @@ class ExternalByteArray : public ByteArray {
static RawExternalByteArray* New(uint8_t* data,
intptr_t len,
+ void* peer,
+ Dart_PeerFinalizer callback,
Heap::Space space = Heap::kNew);
private:
@@ -3425,7 +3435,7 @@ class ExternalByteArray : public ByteArray {
intptr_t limit = byte_offset + sizeof(T);
// TODO(iposva): Determine if we should throw an exception here.
ASSERT((byte_offset >= 0) && (limit <= Length()));
- uint8_t* addr = &raw_ptr()->data_[byte_offset];
+ uint8_t* addr = &raw_ptr()->external_data_->data()[byte_offset];
return reinterpret_cast<T*>(addr);
}
@@ -3433,10 +3443,12 @@ class ExternalByteArray : public ByteArray {
raw_ptr()->length_ = Smi::New(value);
}
- void SetData(uint8_t* data) const {
- raw_ptr()->data_ = data;
+ void SetExternalData(ExternalByteArrayData* data) {
+ raw_ptr()->external_data_ = data;
}
+ static void Finalize(Dart_Handle handle, void* peer);
+
HEAP_OBJECT_IMPLEMENTATION(ExternalByteArray, ByteArray);
friend class Class;
};
« no previous file with comments | « runtime/vm/gc_marker.cc ('k') | runtime/vm/object.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698