File indexing completed on 2024-04-28 15:23:06

0001 /*
0002  *  This file is part of the KDE libraries
0003  *  Copyright (C) 2013 Bernd Buschinski <b.buschinski@googlemail.com>
0004  *
0005  *  This library is free software; you can redistribute it and/or
0006  *  modify it under the terms of the GNU Lesser General Public
0007  *  License as published by the Free Software Foundation; either
0008  *  version 2 of the License, or (at your option) any later version.
0009  *
0010  *  This library is distributed in the hope that it will be useful,
0011  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
0012  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
0013  *  Lesser General Public License for more details.
0014  *
0015  *  You should have received a copy of the GNU Lesser General Public
0016  *  License along with this library; if not, write to the Free Software
0017  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
0018  */
0019 
0020 #ifndef KJS_ARRAYBUFFER_H
0021 #define KJS_ARRAYBUFFER_H
0022 
0023 #include "ecma/kjs_dom.h"
0024 
0025 #include <kjs/object.h>
0026 
0027 namespace KJS
0028 {
0029 
0030 class ArrayBufferConstructorImp : public JSObject
0031 {
0032 public:
0033     ArrayBufferConstructorImp(ExecState *exec, DOM::DocumentImpl *d);
0034     bool implementsConstruct() const override;
0035     using KJS::JSObject::construct;
0036     JSObject *construct(ExecState *exec, const List &args) override;
0037 private:
0038     SharedPtr<DOM::DocumentImpl> doc;
0039 };
0040 
0041 class ArrayBuffer : public JSObject
0042 {
0043 public:
0044     explicit ArrayBuffer(size_t size);
0045     //copy the buffer
0046     explicit ArrayBuffer(uint8_t *buffer, size_t size);
0047     virtual ~ArrayBuffer();
0048 
0049     enum {
0050         ByteLength, Splice
0051     };
0052 
0053     using KJS::JSObject::getOwnPropertySlot;
0054     bool getOwnPropertySlot(ExecState *exec, const Identifier &propertyName, PropertySlot &slot) override;
0055     JSValue *getValueProperty(ExecState *exec, int token) const;
0056 
0057     const ClassInfo *classInfo() const override
0058     {
0059         return &info;
0060     }
0061     static const ClassInfo info;
0062 
0063     size_t byteLength() const
0064     {
0065         return m_size;
0066     }
0067     uint8_t *buffer() const
0068     {
0069         return m_buffer;
0070     }
0071 
0072 private:
0073     size_t m_size;
0074     uint8_t *m_buffer;
0075 };
0076 
0077 } // namespace KJS
0078 
0079 #endif