// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef DOMArrayBufferBase_h
#define DOMArrayBufferBase_h

#include "bindings/core/v8/ScriptWrappable.h"
#include "core/CoreExport.h"
#include "wtf/ArrayBuffer.h"
#include "wtf/RefCounted.h"

namespace blink {

class CORE_EXPORT DOMArrayBufferBase : public RefCounted<DOMArrayBufferBase>, public ScriptWrappable {
public:
    virtual ~DOMArrayBufferBase() { }

    const WTF::ArrayBuffer* buffer() const { return m_buffer.get(); }
    WTF::ArrayBuffer* buffer() { return m_buffer.get(); }

    const void* data() const { return buffer()->data(); }
    void* data() { return buffer()->data(); }
    unsigned byteLength() const { return buffer()->byteLength(); }
    bool transfer(WTF::ArrayBufferContents& result) { return buffer()->transfer(result); }
    bool shareContentsWith(WTF::ArrayBufferContents& result) { return buffer()->shareContentsWith(result); }
    bool isNeutered() const { return buffer()->isNeutered(); }
    bool isShared() const { return buffer()->isShared(); }

    v8::Local<v8::Object> wrap(v8::Isolate*, v8::Local<v8::Object> creationContext) override
    {
        ASSERT_NOT_REACHED();
        return v8::Local<v8::Object>();
    }

protected:
    explicit DOMArrayBufferBase(PassRefPtr<WTF::ArrayBuffer> buffer)
        : m_buffer(buffer)
    {
        ASSERT(m_buffer);
    }

    RefPtr<WTF::ArrayBuffer> m_buffer;
};

} // namespace blink

#endif // DOMArrayBuffer_h
