KeyRange::KeyRange(FB::variant left, FB::variant right, int flags) : flags(flags), left(left), right(right) { if(left.get_type() != right.get_type() && !left.empty() && !right.empty()) throw new DatabaseException("NOT_ALLOWED_ERR", DatabaseException::NOT_ALLOWED_ERR); initializeMethods(); }
void NpapiBrowserHost::getNPVariant(NPVariant *dst, const FB::variant &var) { assertMainThread(); const NPVariantBuilderMap& builderMap = getNPVariantBuilderMap(); const std::type_info& type = var.get_type(); NPVariantBuilderMap::const_iterator it = builderMap.find(&type); if (it == builderMap.end()) { // unhandled type :( return; } *dst = (it->second)(FB::ptr_cast<NpapiBrowserHost>(shared_from_this()), var); }
void ActiveXBrowserHost::getComVariant(VARIANT *dest, const FB::variant &var) { CComVariant outVar; ::VariantInit(dest); const ComVariantBuilderMap& builderMap = getComVariantBuilderMap(); const std::type_info& type = var.get_type(); ComVariantBuilderMap::const_iterator it = builderMap.find(&type); if (it == builderMap.end()) { // unhandled type :( return; } outVar = (it->second)(FB::ptr_cast<ActiveXBrowserHost>(shared_ptr()), var); outVar.Detach(dest); }
void NpapiBrowserHost::getNPVariant(NPVariant *dst, const FB::variant &var) { if (var.get_type() == typeid(FB::Npapi::NpapiNull)) { dst->type = NPVariantType_Null; } else if (var.get_type() == typeid(int) || var.get_type() == typeid(long) || var.get_type() == typeid(short) || var.get_type() == typeid(char) || var.get_type() == typeid(unsigned int) || var.get_type() == typeid(unsigned short) || var.get_type() == typeid(unsigned char)) { // Integer type dst->type = NPVariantType_Int32; dst->value.intValue = var.convert_cast<long>(); } else if (var.get_type() == typeid(double) || var.get_type() == typeid(float)) { dst->type = NPVariantType_Double; dst->value.doubleValue = var.convert_cast<double>(); } else if (var.get_type() == typeid(bool)) { dst->type = NPVariantType_Bool; dst->value.boolValue = var.convert_cast<bool>(); } else if (var.get_type() == typeid(std::string)) { std::string str = var.convert_cast<std::string>(); char *outStr = (char*)this->MemAlloc(str.size() + 1); memcpy(outStr, str.c_str(), str.size() + 1); dst->type = NPVariantType_String; dst->value.stringValue.UTF8Characters = outStr; dst->value.stringValue.UTF8Length = str.size(); } else if (var.get_type() == typeid(FB::VariantList)) { JSAPI_DOMNode outArr = this->getDOMWindow().createArray(); FB::VariantList inArr = var.cast<FB::VariantList>(); for (FB::VariantList::iterator it = inArr.begin(); it != inArr.end(); it++) { outArr.callMethod<void>("push", variant_list_of(*it)); } FB::AutoPtr<NPObjectAPI> api = dynamic_cast<NPObjectAPI*>(outArr.getJSObject().ptr()); if (api.ptr() != NULL) { dst->type = NPVariantType_Object; dst->value.objectValue = api->getNPObject(); this->RetainObject(dst->value.objectValue); } } else if (var.get_type() == typeid(FB::VariantMap)) { JSAPI_DOMNode out = this->getDOMWindow().createMap(); FB::VariantMap inMap = var.cast<FB::VariantMap>(); for (FB::VariantMap::iterator it = inMap.begin(); it != inMap.end(); it++) { out.setProperty(it->first, it->second); } FB::AutoPtr<NPObjectAPI> api = dynamic_cast<NPObjectAPI*>(out.getJSObject().ptr()); if (api.ptr() != NULL) { dst->type = NPVariantType_Object; dst->value.objectValue = api->getNPObject(); this->RetainObject(dst->value.objectValue); } } else if (var.get_type() == typeid(FB::JSOutObject)) { NPObject *outObj = NULL; FB::JSOutObject obj = var.cast<FB::JSOutObject>(); NPObjectAPI *tmpObj = dynamic_cast<NPObjectAPI *>(obj.ptr()); if (tmpObj == NULL) { outObj = NPJavascriptObject::NewObject(this, obj); } else { outObj = tmpObj->getNPObject(); this->RetainObject(outObj); } dst->type = NPVariantType_Object; dst->value.objectValue = outObj; } else if (var.get_type() == typeid(FB::JSObject)) { NPObject *outObj = NULL; FB::JSObject obj = var.cast<JSObject>(); NPObjectAPI *tmpObj = dynamic_cast<NPObjectAPI *>(obj.ptr()); if (tmpObj == NULL) { outObj = NPJavascriptObject::NewObject(this, obj); } else { outObj = tmpObj->getNPObject(); this->RetainObject(outObj); } dst->type = NPVariantType_Object; dst->value.objectValue = outObj; } // TODO: implement object types }