/* Copyright (C) 2016 -2017 Jerry Jin */ #include #include #include "alphaform.hpp" #include #include #include #include #include #include #include #include #include "../loop.hpp" void AlphaFormInverseLinearWorker::Execute(){ try{ // convert input datatypes to QuantLib datatypes // Construct the Value Object boost::shared_ptr valueObject( new QuantLibAddin::ValueObjects::qlAlphaFormInverseLinear( mObjectID, mRateTimes, mAlpha, false )); // Construct the Object boost::shared_ptr object( new QuantLibAddin::AlphaFormInverseLinear( valueObject, mRateTimes, mAlpha, false )); // Store the Object in the Repository mReturnValue = ObjectHandler::Repository::instance().storeObject(mObjectID, object, false, valueObject); }catch(const std::exception &e){ mError = e.what(); }catch (...){ mError = "unkown error"; } } void AlphaFormInverseLinearWorker::HandleOKCallback(){ Nan::HandleScope scope; Local argv[2] = { Nan::New(mError).ToLocalChecked(), Nan::New(mReturnValue).ToLocalChecked() }; callback->Call(2, argv); } NAN_METHOD(QuantLibNode::AlphaFormInverseLinear) { // validate js arguments if (info.Length() == 0 || !info[0]->IsString()) { return Nan::ThrowError("ObjectID is required."); } if (info.Length() == 1 || !info[1]->IsArray()) { return Nan::ThrowError("RateTimes is required."); } if (info.Length() == 2 || !info[2]->IsNumber()) { return Nan::ThrowError("Alpha is required."); } // convert js argument to c++ type String::Utf8Value strObjectID(info[0]->ToString()); string ObjectIDCpp(strdup(*strObjectID)); // convert js argument to c++ type std::vectorRateTimesCpp; Local RateTimesArray = info[1].As(); for (unsigned int i = 0; i < RateTimesArray->Length(); i++){ RateTimesCpp.push_back(Nan::To(Nan::Get(RateTimesArray, i).ToLocalChecked()).FromJust()); } // convert js argument to c++ type double AlphaCpp = Nan::To(info[2]).FromJust(); // declare callback Nan::Callback *callback = new Nan::Callback(info[3].As()); // launch Async worker Nan::AsyncQueueWorker(new AlphaFormInverseLinearWorker( callback ,ObjectIDCpp ,RateTimesCpp ,AlphaCpp )); } //AlphaFormInverseLinearWorker::~AlphaFormInverseLinearWorker(){ // //} //void AlphaFormInverseLinearWorker::Destroy(){ // //} void AlphaFormLinearHyperbolicWorker::Execute(){ try{ // convert input datatypes to QuantLib datatypes // Construct the Value Object boost::shared_ptr valueObject( new QuantLibAddin::ValueObjects::qlAlphaFormLinearHyperbolic( mObjectID, mRateTimes, mAlpha, false )); // Construct the Object boost::shared_ptr object( new QuantLibAddin::AlphaFormLinearHyperbolic( valueObject, mRateTimes, mAlpha, false )); // Store the Object in the Repository mReturnValue = ObjectHandler::Repository::instance().storeObject(mObjectID, object, false, valueObject); }catch(const std::exception &e){ mError = e.what(); }catch (...){ mError = "unkown error"; } } void AlphaFormLinearHyperbolicWorker::HandleOKCallback(){ Nan::HandleScope scope; Local argv[2] = { Nan::New(mError).ToLocalChecked(), Nan::New(mReturnValue).ToLocalChecked() }; callback->Call(2, argv); } NAN_METHOD(QuantLibNode::AlphaFormLinearHyperbolic) { // validate js arguments if (info.Length() == 0 || !info[0]->IsString()) { return Nan::ThrowError("ObjectID is required."); } if (info.Length() == 1 || !info[1]->IsArray()) { return Nan::ThrowError("RateTimes is required."); } if (info.Length() == 2 || !info[2]->IsNumber()) { return Nan::ThrowError("Alpha is required."); } // convert js argument to c++ type String::Utf8Value strObjectID(info[0]->ToString()); string ObjectIDCpp(strdup(*strObjectID)); // convert js argument to c++ type std::vectorRateTimesCpp; Local RateTimesArray = info[1].As(); for (unsigned int i = 0; i < RateTimesArray->Length(); i++){ RateTimesCpp.push_back(Nan::To(Nan::Get(RateTimesArray, i).ToLocalChecked()).FromJust()); } // convert js argument to c++ type double AlphaCpp = Nan::To(info[2]).FromJust(); // declare callback Nan::Callback *callback = new Nan::Callback(info[3].As()); // launch Async worker Nan::AsyncQueueWorker(new AlphaFormLinearHyperbolicWorker( callback ,ObjectIDCpp ,RateTimesCpp ,AlphaCpp )); } //AlphaFormLinearHyperbolicWorker::~AlphaFormLinearHyperbolicWorker(){ // //} //void AlphaFormLinearHyperbolicWorker::Destroy(){ // //} void AlphaFormOperatorWorker::Execute(){ try{ // convert object IDs into library objects OH_GET_REFERENCE(ObjectIDLibObjPtr, mObjectID, QuantLibAddin::AlphaForm, QuantLib::AlphaForm) // convert input datatypes to QuantLib datatypes QuantLib::Size TimeLib; QuantLibAddin::cppToLibrary(mTime, TimeLib); // invoke the member function QuantLib::Real returnValue = ObjectIDLibObjPtr->operator()( TimeLib ); mReturnValue = returnValue; }catch(const std::exception &e){ mError = e.what(); }catch (...){ mError = "unkown error"; } } void AlphaFormOperatorWorker::HandleOKCallback(){ Nan::HandleScope scope; Local argv[2] = { Nan::New(mError).ToLocalChecked(), Nan::New(mReturnValue) }; callback->Call(2, argv); } NAN_METHOD(QuantLibNode::AlphaFormOperator) { // validate js arguments if (info.Length() == 0 || !info[0]->IsString()) { return Nan::ThrowError("ObjectID is required."); } if (info.Length() == 1 || !info[1]->IsNumber()) { return Nan::ThrowError("Time is required."); } // convert js argument to c++ type String::Utf8Value strObjectID(info[0]->ToString()); string ObjectIDCpp(strdup(*strObjectID)); // convert js argument to c++ type long TimeCpp = Nan::To(info[1]).FromJust(); // declare callback Nan::Callback *callback = new Nan::Callback(info[2].As()); // launch Async worker Nan::AsyncQueueWorker(new AlphaFormOperatorWorker( callback ,ObjectIDCpp ,TimeCpp )); } //AlphaFormOperatorWorker::~AlphaFormOperatorWorker(){ // //} //void AlphaFormOperatorWorker::Destroy(){ // //} void AlphaFormSetAlphaWorker::Execute(){ try{ // convert object IDs into library objects OH_GET_REFERENCE(ObjectIDLibObjPtr, mObjectID, QuantLibAddin::AlphaForm, QuantLib::AlphaForm) // convert input datatypes to QuantLib datatypes // invoke the member function ObjectIDLibObjPtr->setAlpha( mAlpha ); }catch(const std::exception &e){ mError = e.what(); }catch (...){ mError = "unkown error"; } } void AlphaFormSetAlphaWorker::HandleOKCallback(){ Nan::HandleScope scope; Local argv[2] = { Nan::New(mError).ToLocalChecked(), Nan::Null() }; callback->Call(2, argv); } NAN_METHOD(QuantLibNode::AlphaFormSetAlpha) { // validate js arguments if (info.Length() == 0 || !info[0]->IsString()) { return Nan::ThrowError("ObjectID is required."); } if (info.Length() == 1 || !info[1]->IsNumber()) { return Nan::ThrowError("Alpha is required."); } // convert js argument to c++ type String::Utf8Value strObjectID(info[0]->ToString()); string ObjectIDCpp(strdup(*strObjectID)); // convert js argument to c++ type double AlphaCpp = Nan::To(info[1]).FromJust(); // declare callback Nan::Callback *callback = new Nan::Callback(info[2].As()); // launch Async worker Nan::AsyncQueueWorker(new AlphaFormSetAlphaWorker( callback ,ObjectIDCpp ,AlphaCpp )); } //AlphaFormSetAlphaWorker::~AlphaFormSetAlphaWorker(){ // //} //void AlphaFormSetAlphaWorker::Destroy(){ // //}