| Index: runtime/vm/raw_object.h
|
| diff --git a/runtime/vm/raw_object.h b/runtime/vm/raw_object.h
|
| index 4bb9504e544c2f2bcfad0fd9a987cf1dffa9dc8e..93d269bd141c09710fa59f6b6966a5ece6c3bc21 100644
|
| --- a/runtime/vm/raw_object.h
|
| +++ b/runtime/vm/raw_object.h
|
| @@ -895,13 +895,25 @@ class RawFourByteString : public RawString {
|
| template<typename T>
|
| class ExternalStringData {
|
| public:
|
| - typedef void Callback(void* peer);
|
| - ExternalStringData(const T* data, void* peer, Callback* callback) :
|
| + ExternalStringData(const T* data, void* peer, Dart_PeerFinalizer callback) :
|
| data_(data), peer_(peer), callback_(callback) {
|
| }
|
| +
|
| + ~ExternalStringData() {
|
| + if (callback_ != NULL) (*callback_)(peer_);
|
| + }
|
| +
|
| + const T* data() {
|
| + return data_;
|
| + }
|
| + void* peer() {
|
| + return peer_;
|
| + }
|
| +
|
| + private:
|
| const T* data_;
|
| void* peer_;
|
| - Callback* callback_;
|
| + Dart_PeerFinalizer callback_;
|
| };
|
|
|
|
|
| @@ -983,10 +995,36 @@ class RawInternalByteArray : public RawByteArray {
|
| };
|
|
|
|
|
| +class ExternalByteArrayData {
|
| + public:
|
| + ExternalByteArrayData(uint8_t* data,
|
| + void* peer,
|
| + Dart_PeerFinalizer callback) :
|
| + data_(data), peer_(peer), callback_(callback) {
|
| + }
|
| +
|
| + ~ExternalByteArrayData() {
|
| + if (callback_ != NULL) (*callback_)(peer_);
|
| + }
|
| +
|
| + uint8_t* data() {
|
| + return data_;
|
| + }
|
| + void* peer() {
|
| + return peer_;
|
| + }
|
| +
|
| + private:
|
| + uint8_t* data_;
|
| + void* peer_;
|
| + Dart_PeerFinalizer callback_;
|
| +};
|
| +
|
| +
|
| class RawExternalByteArray : public RawByteArray {
|
| RAW_HEAP_OBJECT_IMPLEMENTATION(ExternalByteArray);
|
|
|
| - uint8_t* data_;
|
| + ExternalByteArrayData* external_data_;
|
| };
|
|
|
|
|
|
|