Nan::NAN_METHOD_RETURN_TYPE TxnWrap::getCommon(Nan::NAN_METHOD_ARGS_TYPE info, Handle<Value> (*successFunc)(MDB_val&)) { Nan::HandleScope scope; TxnWrap *tw = Nan::ObjectWrap::Unwrap<TxnWrap>(info.This()); DbiWrap *dw = Nan::ObjectWrap::Unwrap<DbiWrap>(info[0]->ToObject()); if (!tw->txn) { return Nan::ThrowError("The transaction is already closed."); } MDB_val key, data; void (*freeKey)(MDB_val&) = argToKey(info[1], key, dw->keyIsUint32); if (!freeKey) { return; } int rc = mdb_get(tw->txn, dw->dbi, &key, &data); freeKey(key); if (rc == MDB_NOTFOUND) { return info.GetReturnValue().Set(Nan::Null()); } else if (rc != 0) { return Nan::ThrowError(mdb_strerror(rc)); } else { return info.GetReturnValue().Set(successFunc(data)); } }
Nan::NAN_METHOD_RETURN_TYPE Token::OpenSession(Nan::NAN_METHOD_ARGS_TYPE info) { Token* obj = ObjectWrap::Unwrap<Token>(info.This()); std::shared_ptr<IKeyVEILSession> sessionPtr = obj->handle()->openSession(); v8::Local<v8::Function> cons = Nan::New(Session::constructor()); v8::Local<v8::Object> sessObj = Nan::NewInstance(cons).ToLocalChecked(); Session* sess = ObjectWrap::Unwrap<Session>(sessObj); sess->handle(sessionPtr); info.GetReturnValue().Set(sessObj); }
v8::Local<v8::Value> Geometry::_toJSONSync(Nan::NAN_METHOD_ARGS_TYPE info) { Nan::EscapableHandleScope scope; Geometry* g = Nan::ObjectWrap::Unwrap<Geometry>(info.Holder()); std::string json; if (info.Length() < 1) { if (!mapnik::util::to_geojson(json,g->feat_->get_geometry())) { // Fairly certain this situation can never be reached but // leaving it none the less /* LCOV_EXCL_START */ Nan::ThrowError("Failed to generate GeoJSON"); return scope.Escape(Nan::Undefined()); /* LCOV_EXCL_STOP */ } } else { if (!info[0]->IsObject()) { Nan::ThrowTypeError("optional first arg must be an options object"); return scope.Escape(Nan::Undefined()); } v8::Local<v8::Object> options = info[0]->ToObject(); if (options->Has(Nan::New("transform").ToLocalChecked())) { v8::Local<v8::Value> bound_opt = options->Get(Nan::New("transform").ToLocalChecked()); if (!bound_opt->IsObject()) { Nan::ThrowTypeError("'transform' must be an object"); return scope.Escape(Nan::Undefined()); } v8::Local<v8::Object> obj = bound_opt->ToObject(); if (obj->IsNull() || obj->IsUndefined() || !Nan::New(ProjTransform::constructor)->HasInstance(obj)) { Nan::ThrowTypeError("mapnik.ProjTransform expected as first arg"); return scope.Escape(Nan::Undefined()); } ProjTransform* tr = Nan::ObjectWrap::Unwrap<ProjTransform>(obj); mapnik::proj_transform const& prj_trans = *tr->get(); mapnik::geometry::geometry<double> const& geom = g->feat_->get_geometry(); if (!to_geojson_projected(json,geom,prj_trans)) { // Fairly certain this situation can never be reached but // leaving it none the less /* LCOV_EXCL_START */ Nan::ThrowError("Failed to generate GeoJSON"); return scope.Escape(Nan::Undefined()); /* LCOV_EXCL_STOP */ } } } return scope.Escape(Nan::New<v8::String>(json).ToLocalChecked()); }
v8::Local<v8::Value> Grid::_clearSync(Nan::NAN_METHOD_ARGS_TYPE info) { Nan::EscapableHandleScope scope; Grid* g = Nan::ObjectWrap::Unwrap<Grid>(info.Holder()); g->get()->clear(); return scope.Escape(Nan::Undefined()); }
Nan::NAN_METHOD_RETURN_TYPE TxnWrap::putCommon(Nan::NAN_METHOD_ARGS_TYPE info, void (*fillFunc)(Nan::NAN_METHOD_ARGS_TYPE info, MDB_val&), void (*freeData)(MDB_val&)) { Nan::HandleScope scope; TxnWrap *tw = Nan::ObjectWrap::Unwrap<TxnWrap>(info.This()); DbiWrap *dw = Nan::ObjectWrap::Unwrap<DbiWrap>(info[0]->ToObject()); if (!tw->txn) { return Nan::ThrowError("The transaction is already closed."); } int flags = 0; MDB_val key, data; void (*freeKey)(MDB_val&) = argToKey(info[1], key, dw->keyIsUint32); if (!freeKey) { return; } fillFunc(info, data); int rc = mdb_put(tw->txn, dw->dbi, &key, &data, flags); freeKey(key); freeData(data); if (rc != 0) { return Nan::ThrowError(mdb_strerror(rc)); } return; }
/* Get single integer or byte from shared or data memory * Takes integer index argument, returns Number at that index * Careful: index for int and byte will differ! index for int == index for byte / 4 (simplified) * Legacy considerations: execute() above takes the PRU num as the first argument, but since * previously getDataRAMInt defaulted to PRU num 1 we don't want to break programs. Therefore, * the PRU num stays optional and defaults to 0. */ Local<Value> getOrSetXFromOrToY(char mode, char what, char where, Nan::NAN_METHOD_ARGS_TYPE args) { //array Nan::HandleScope scope; int pruNum = 0; unsigned int val = 0; const char maxArgs = (mode == M_GET)? 2 : 3; //Check we have at least one argument if (args.Length() < 1 || args.Length() > maxArgs) { Nan::ThrowTypeError("Wrong number of arguments"); return Nan::Null(); } //Check if arguments are numbers if (!args[0]->IsNumber() || (args.Length() > 1 && !args[1]->IsNumber()) || (args.Length() > 2 && !args[2]->IsNumber())) { Nan::ThrowTypeError("Argument must be Integer"); return Nan::Null(); } if (mode == M_SET) { if (what == X_INT) { val = (where == Y_DATAMEM && args.Length() > 2)? (unsigned int)Array::Cast(*args[2])->NumberValue() : (unsigned int)Array::Cast(*args[1])->NumberValue(); } else { val = (where == Y_DATAMEM && args.Length() > 2)? (unsigned char)Array::Cast(*args[2])->NumberValue() : (unsigned char)Array::Cast(*args[1])->NumberValue(); } } //Get index value unsigned short index; if (where == Y_DATAMEM && args.Length() > 1) { index = (unsigned short)Array::Cast(*args[1])->NumberValue(); pruNum = args[0]->Int32Value(); } else { index = (unsigned short)Array::Cast(*args[0])->NumberValue(); } unsigned int* addr; if (where == Y_DATAMEM) { if (pruNum == 0) { addr = dataMem_pru0_int; } else { addr = dataMem_pru1_int; } } else { addr = sharedMem_int + offset_sharedRam; } if (what == X_INT) { if (mode == M_SET) { addr[index] = val; } return Nan::New<v8::Number>(addr[index]); } else { if (mode == M_SET) { ((unsigned char*) addr)[index] = val; } return Nan::New<v8::Number>(((unsigned char*) addr)[index]); } };