#include "V8Storage.h" namespace Arabica { namespace DOM { v8::Persistent V8Storage::Tmpl; v8::Handle V8Storage::lengthAttrGetter(v8::Local property, const v8::AccessorInfo& info) { v8::Local self = info.Holder(); struct V8StoragePrivate* privData = V8DOM::toClassPtr(self->GetInternalField(0)); return v8::Integer::New(privData->nativeObj->getLength()); } v8::Handle V8Storage::keyCallback(const v8::Arguments& args) { v8::Local self = args.Holder(); struct V8StoragePrivate* privData = V8DOM::toClassPtr(self->GetInternalField(0)); if (false) { } else if (args.Length() == 1 && args[0]->IsUint32()) { unsigned long localIndex = args[0]->ToNumber()->Uint32Value(); std::string retVal = privData->nativeObj->key(localIndex); return v8::String::New(retVal.c_str()); } throw V8Exception("Parameter mismatch while calling key"); return v8::Undefined(); } v8::Handle V8Storage::getItemCallback(const v8::Arguments& args) { v8::Local self = args.Holder(); struct V8StoragePrivate* privData = V8DOM::toClassPtr(self->GetInternalField(0)); if (false) { } else if (args.Length() == 1 && args[0]->IsString()) { v8::String::AsciiValue localKey(args[0]); std::string retVal = privData->nativeObj->getItem(*localKey); return v8::String::New(retVal.c_str()); } throw V8Exception("Parameter mismatch while calling getItem"); return v8::Undefined(); } v8::Handle V8Storage::setItemCallback(const v8::Arguments& args) { v8::Local self = args.Holder(); struct V8StoragePrivate* privData = V8DOM::toClassPtr(self->GetInternalField(0)); if (false) { } else if (args.Length() == 2 && args[0]->IsString() && args[1]->IsString()) { v8::String::AsciiValue localKey(args[0]); v8::String::AsciiValue localValue(args[1]); privData->nativeObj->setItem(*localKey, *localValue); return v8::Undefined(); } throw V8Exception("Parameter mismatch while calling setItem"); return v8::Undefined(); } v8::Handle V8Storage::removeItemCallback(const v8::Arguments& args) { v8::Local self = args.Holder(); struct V8StoragePrivate* privData = V8DOM::toClassPtr(self->GetInternalField(0)); if (false) { } else if (args.Length() == 1 && args[0]->IsString()) { v8::String::AsciiValue localKey(args[0]); privData->nativeObj->removeItem(*localKey); return v8::Undefined(); } throw V8Exception("Parameter mismatch while calling removeItem"); return v8::Undefined(); } v8::Handle V8Storage::clearCallback(const v8::Arguments& args) { v8::Local self = args.Holder(); struct V8StoragePrivate* privData = V8DOM::toClassPtr(self->GetInternalField(0)); if (false) { } else if (args.Length() == 0) { privData->nativeObj->clear(); return v8::Undefined(); } throw V8Exception("Parameter mismatch while calling clear"); return v8::Undefined(); } bool V8Storage::hasInstance(v8::Handle value) { return getTmpl()->HasInstance(value); } } }