#include "V8ArrayBuffer.h" #include "V8ArrayBufferView.h" #include "V8Int8Array.h" namespace Arabica { namespace DOM { v8::Persistent V8Int8Array::Tmpl; v8::Persistent V8Int8Array::Constr; v8::Handle V8Int8Array::constructor(const v8::Arguments& args) { if (!args.IsConstructCall()) return v8::ThrowException(v8::String::New("Cannot call constructor as function")); uscxml::Int8Array* localInstance = NULL; if (false) { } else if (args.Length() == 3 && args[0]->IsObject() && V8ArrayBuffer::hasInstance(args[0]) && args[1]->IsUint32() && args[2]->IsUint32()) { uscxml::ArrayBuffer* localBuffer = V8DOM::toClassPtr(args[0]->ToObject()->GetInternalField(0))->nativeObj; unsigned long localByteOffset = args[1]->ToNumber()->Uint32Value(); unsigned long localLength = args[2]->ToNumber()->Uint32Value(); localInstance = new uscxml::Int8Array(localBuffer, localByteOffset, localLength); } else if (args.Length() == 2 && args[0]->IsObject() && V8ArrayBuffer::hasInstance(args[0]) && args[1]->IsUint32()) { uscxml::ArrayBuffer* localBuffer = V8DOM::toClassPtr(args[0]->ToObject()->GetInternalField(0))->nativeObj; unsigned long localByteOffset = args[1]->ToNumber()->Uint32Value(); localInstance = new uscxml::Int8Array(localBuffer, localByteOffset); } else if (args.Length() == 1 && args[0]->IsObject() && V8Int8Array::hasInstance(args[0])) { uscxml::Int8Array* localArray = V8DOM::toClassPtr(args[0]->ToObject()->GetInternalField(0))->nativeObj; localInstance = new uscxml::Int8Array(localArray); } else if (args.Length() == 1 && args[0]->IsObject() && V8ArrayBuffer::hasInstance(args[0])) { uscxml::ArrayBuffer* localBuffer = V8DOM::toClassPtr(args[0]->ToObject()->GetInternalField(0))->nativeObj; localInstance = new uscxml::Int8Array(localBuffer); } else if (args.Length() == 1 && args[0]->IsUint32()) { unsigned long localLength = args[0]->ToNumber()->Uint32Value(); localInstance = new uscxml::Int8Array(localLength); } else if (args.Length() == 1 && args[0]->IsArray()) { std::vector localArray; v8::Handle localArrayArray(v8::Array::Cast(*args[0])); for (int i = 0; i < localArrayArray->Length(); i++) { localArray.push_back(localArrayArray->Get(i)->ToInt32()->Value()); } localInstance = new uscxml::Int8Array(localArray); } if (!localInstance) { throw V8Exception("Parameter mismatch while calling constructor for Int8Array"); return v8::Undefined(); } v8::Handle retCtor = V8Int8Array::getTmpl()->GetFunction(); v8::Persistent retObj = v8::Persistent::New(retCtor->NewInstance()); struct V8Int8Array::V8Int8ArrayPrivate* retPrivData = new V8Int8Array::V8Int8ArrayPrivate(); retPrivData->nativeObj = localInstance; retObj->SetInternalField(0, V8DOM::toExternal(retPrivData)); retObj.MakeWeak(0, V8Int8Array::jsDestructor); return retObj; } v8::Handle V8Int8Array::lengthAttrGetter(v8::Local property, const v8::AccessorInfo& info) { v8::Local self = info.Holder(); struct V8Int8ArrayPrivate* privData = V8DOM::toClassPtr(self->GetInternalField(0)); return v8::Integer::New(privData->nativeObj->getLength()); } v8::Handle V8Int8Array::getCallback(const v8::Arguments& args) { v8::Local self = args.Holder(); struct V8Int8ArrayPrivate* privData = V8DOM::toClassPtr(self->GetInternalField(0)); if (false) { } else if (args.Length() == 1 && args[0]->IsUint32()) { unsigned long localIndex = args[0]->ToNumber()->Uint32Value(); char retVal = privData->nativeObj->get(localIndex); return v8::Number::New(retVal); } throw V8Exception("Parameter mismatch while calling get"); return v8::Undefined(); } v8::Handle V8Int8Array::setCallback(const v8::Arguments& args) { v8::Local self = args.Holder(); struct V8Int8ArrayPrivate* privData = V8DOM::toClassPtr(self->GetInternalField(0)); if (false) { } else if (args.Length() == 2 && args[0]->IsObject() && V8Int8Array::hasInstance(args[0]) && args[1]->IsUint32()) { uscxml::Int8Array* localArray = V8DOM::toClassPtr(args[0]->ToObject()->GetInternalField(0))->nativeObj; unsigned long localOffset = args[1]->ToNumber()->Uint32Value(); privData->nativeObj->set(localArray, localOffset); return v8::Undefined(); } else if (args.Length() == 2 && args[0]->IsUint32() && args[1]->IsInt32()) { unsigned long localIndex = args[0]->ToNumber()->Uint32Value(); char localValue = args[1]->ToNumber()->Int32Value(); privData->nativeObj->set(localIndex, localValue); return v8::Undefined(); } else if (args.Length() == 2 && args[0]->IsArray() && args[1]->IsUint32()) { std::vector localArray; v8::Handle localArrayArray(v8::Array::Cast(*args[0])); for (int i = 0; i < localArrayArray->Length(); i++) { localArray.push_back(localArrayArray->Get(i)->ToInt32()->Value()); } unsigned long localOffset = args[1]->ToNumber()->Uint32Value(); privData->nativeObj->set(localArray, localOffset); return v8::Undefined(); } else if (args.Length() == 1 && args[0]->IsObject() && V8Int8Array::hasInstance(args[0])) { uscxml::Int8Array* localArray = V8DOM::toClassPtr(args[0]->ToObject()->GetInternalField(0))->nativeObj; privData->nativeObj->set(localArray); return v8::Undefined(); } else if (args.Length() == 1 && args[0]->IsArray()) { std::vector localArray; v8::Handle localArrayArray(v8::Array::Cast(*args[0])); for (int i = 0; i < localArrayArray->Length(); i++) { localArray.push_back(localArrayArray->Get(i)->ToInt32()->Value()); } privData->nativeObj->set(localArray); return v8::Undefined(); } throw V8Exception("Parameter mismatch while calling set"); return v8::Undefined(); } v8::Handle V8Int8Array::subarrayCallback(const v8::Arguments& args) { v8::Local self = args.Holder(); struct V8Int8ArrayPrivate* privData = V8DOM::toClassPtr(self->GetInternalField(0)); if (false) { } else if (args.Length() == 2 && args[0]->IsInt32() && args[1]->IsInt32()) { long localStart = args[0]->ToNumber()->Int32Value(); long localEnd = args[1]->ToNumber()->Int32Value(); uscxml::Int8Array* retVal = new uscxml::Int8Array(privData->nativeObj->subarray(localStart, localEnd)); v8::Handle retCtor = V8Int8Array::getTmpl()->GetFunction(); v8::Persistent retObj = v8::Persistent::New(retCtor->NewInstance()); struct V8Int8Array::V8Int8ArrayPrivate* retPrivData = new V8Int8Array::V8Int8ArrayPrivate(); retPrivData->dom = privData->dom; retPrivData->nativeObj = retVal; retObj->SetInternalField(0, V8DOM::toExternal(retPrivData)); retObj.MakeWeak(0, V8Int8Array::jsDestructor); return retObj; } throw V8Exception("Parameter mismatch while calling subarray"); return v8::Undefined(); } bool V8Int8Array::hasInstance(v8::Handle value) { return getTmpl()->HasInstance(value); } } }