1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// found in the LICENSE file. 4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#ifndef GIN_ARRAY_BUFFER_H_ 6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define GIN_ARRAY_BUFFER_H_ 7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/basictypes.h" 9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/compiler_specific.h" 10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/memory/ref_counted.h" 11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "gin/converter.h" 125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "gin/gin_export.h" 13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "v8/include/v8.h" 14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace gin { 16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class ArrayBufferAllocator : public v8::ArrayBuffer::Allocator { 18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public: 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void* Allocate(size_t length) OVERRIDE; 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void* AllocateUninitialized(size_t length) OVERRIDE; 21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void Free(void* data, size_t length) OVERRIDE; 22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GIN_EXPORT static ArrayBufferAllocator* SharedInstance(); 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}; 25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class GIN_EXPORT ArrayBuffer { 27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public: 28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ArrayBuffer(); 29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ArrayBuffer(v8::Isolate* isolate, v8::Handle<v8::ArrayBuffer> buffer); 30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ~ArrayBuffer(); 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ArrayBuffer& operator=(const ArrayBuffer& other); 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void* bytes() const { return bytes_; } 34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) size_t num_bytes() const { return num_bytes_; } 35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private: 37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) class Private; 38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_refptr<Private> private_; 40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void* bytes_; 41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) size_t num_bytes_; 42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DISALLOW_COPY(ArrayBuffer); 44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}; 45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)template<> 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)struct GIN_EXPORT Converter<ArrayBuffer> { 48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) static bool FromV8(v8::Isolate* isolate, v8::Handle<v8::Value> val, 49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ArrayBuffer* out); 50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}; 51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class GIN_EXPORT ArrayBufferView { 53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public: 54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ArrayBufferView(); 55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ArrayBufferView(v8::Isolate* isolate, v8::Handle<v8::ArrayBufferView> view); 56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ~ArrayBufferView(); 57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ArrayBufferView& operator=(const ArrayBufferView& other); 58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void* bytes() const { 60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return static_cast<uint8_t*>(array_buffer_.bytes()) + offset_; 61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) size_t num_bytes() const { return num_bytes_; } 63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private: 65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ArrayBuffer array_buffer_; 66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) size_t offset_; 67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) size_t num_bytes_; 68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DISALLOW_COPY(ArrayBufferView); 70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}; 71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)template<> 735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)struct GIN_EXPORT Converter<ArrayBufferView> { 74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) static bool FromV8(v8::Isolate* isolate, v8::Handle<v8::Value> val, 75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ArrayBufferView* out); 76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}; 77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 78f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} // namespace gin 79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif // GIN_ARRAY_BUFFER_H_ 81