// This is a generated file, modify: generate/templates/class_content.cc #include #include #include "capletvolstructure.hpp" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "../loop.hpp" void RelinkableHandleOptionletVolatilityStructureWorker::Execute(){ try{ // Construct the Value Object boost::shared_ptr valueObject( new QuantLibAddin::ValueObjects::qlRelinkableHandleOptionletVolatilityStructure( mObjectID, mCurrentLink, false )); // Construct the Object boost::shared_ptr object( new QuantLibAddin::RelinkableHandleImpl( valueObject, mCurrentLink, 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 RelinkableHandleOptionletVolatilityStructureWorker::HandleOKCallback(){ Nan::HandleScope scope; Local argv[2] = { Nan::New(mError).ToLocalChecked(), Nan::New(mReturnValue).ToLocalChecked() }; callback->Call(2, argv); } NAN_METHOD(QuantLibNode::RelinkableHandleOptionletVolatilityStructure) { // validate js arguments if (info.Length() == 0 || !info[0]->IsString()) { return Nan::ThrowError("ObjectID is required."); } if (info.Length() == 1 || !info[1]->IsString()) { return Nan::ThrowError("CurrentLink is required."); } // convert js argument to c++ type String::Utf8Value strObjectID(info[0]->ToString()); string ObjectIDCpp(strdup(*strObjectID)); // convert js argument to c++ type String::Utf8Value strCurrentLink(info[1]->ToString()); string CurrentLinkCpp(strdup(*strCurrentLink)); // declare callback Nan::Callback *callback = new Nan::Callback(info[2].As()); // launch Async worker Nan::AsyncQueueWorker(new RelinkableHandleOptionletVolatilityStructureWorker( callback ,ObjectIDCpp ,CurrentLinkCpp )); } //RelinkableHandleOptionletVolatilityStructureWorker::~RelinkableHandleOptionletVolatilityStructureWorker(){ // //} //RelinkableHandleOptionletVolatilityStructureWorker::Destroy(){ // //} void ConstantOptionletVolatilityWorker::Execute(){ try{ // convert input datatypes to QuantLib datatypes QuantLib::Size NDaysLib; QuantLibAddin::cppToLibrary(mNDays, NDaysLib); // convert input datatypes to QuantLib enumerated datatypes QuantLib::Calendar CalendarEnum = ObjectHandler::Create()(mCalendar); // convert input datatypes to QuantLib enumerated datatypes QuantLib::BusinessDayConvention BusinessDayConventionEnum = ObjectHandler::Create()(mBusinessDayConvention); // convert object IDs into library objects QuantLib::Handle VolatilityLibObj = ObjectHandler::convert2< QuantLib::Handle >(mVolatility, "Volatility"); // convert input datatypes to QuantLib enumerated datatypes QuantLib::DayCounter DayCounterEnum = ObjectHandler::Create()(mDayCounter); // Construct the Value Object boost::shared_ptr valueObject( new QuantLibAddin::ValueObjects::qlConstantOptionletVolatility( mObjectID, mNDays, mCalendar, mBusinessDayConvention, mVolatility, mDayCounter, false )); // Construct the Object boost::shared_ptr object( new QuantLibAddin::ConstantOptionletVolatility( valueObject, NDaysLib, CalendarEnum, BusinessDayConventionEnum, VolatilityLibObj, DayCounterEnum, 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 ConstantOptionletVolatilityWorker::HandleOKCallback(){ Nan::HandleScope scope; Local argv[2] = { Nan::New(mError).ToLocalChecked(), Nan::New(mReturnValue).ToLocalChecked() }; callback->Call(2, argv); } NAN_METHOD(QuantLibNode::ConstantOptionletVolatility) { // 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("NDays is required."); } if (info.Length() == 2 || !info[2]->IsString()) { return Nan::ThrowError("Calendar is required."); } if (info.Length() == 3 || !info[3]->IsString()) { return Nan::ThrowError("BusinessDayConvention is required."); } if (info.Length() == 5 || !info[5]->IsString()) { return Nan::ThrowError("DayCounter 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 NDaysCpp = Nan::To(info[1]).FromJust(); // convert js argument to c++ type String::Utf8Value strCalendar(info[2]->ToString()); string CalendarCpp(strdup(*strCalendar)); // convert js argument to c++ type String::Utf8Value strBusinessDayConvention(info[3]->ToString()); string BusinessDayConventionCpp(strdup(*strBusinessDayConvention)); // convert js argument to c++ type ObjectHandler::property_t VolatilityCpp = ObjectHandler::property_t(static_cast(Nan::To(info[4]).FromJust())); // convert js argument to c++ type String::Utf8Value strDayCounter(info[5]->ToString()); string DayCounterCpp(strdup(*strDayCounter)); // declare callback Nan::Callback *callback = new Nan::Callback(info[6].As()); // launch Async worker Nan::AsyncQueueWorker(new ConstantOptionletVolatilityWorker( callback ,ObjectIDCpp ,NDaysCpp ,CalendarCpp ,BusinessDayConventionCpp ,VolatilityCpp ,DayCounterCpp )); } //ConstantOptionletVolatilityWorker::~ConstantOptionletVolatilityWorker(){ // //} //ConstantOptionletVolatilityWorker::Destroy(){ // //} void SpreadedOptionletVolatilityWorker::Execute(){ try{ // convert object IDs into library objects OH_GET_OBJECT(BaseVolStructureCoerce, mBaseVolStructure, ObjectHandler::Object) QuantLib::Handle BaseVolStructureLibObj = QuantLibAddin::CoerceHandle< QuantLibAddin::OptionletVolatilityStructure, QuantLib::OptionletVolatilityStructure>()( BaseVolStructureCoerce); // convert object IDs into library objects QuantLib::Handle SpreadLibObj = ObjectHandler::convert2< QuantLib::Handle >(mSpread, "Spread"); // Construct the Value Object boost::shared_ptr valueObject( new QuantLibAddin::ValueObjects::qlSpreadedOptionletVolatility( mObjectID, mBaseVolStructure, mSpread, false )); // Construct the Object boost::shared_ptr object( new QuantLibAddin::SpreadedOptionletVolatility( valueObject, BaseVolStructureLibObj, SpreadLibObj, 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 SpreadedOptionletVolatilityWorker::HandleOKCallback(){ Nan::HandleScope scope; Local argv[2] = { Nan::New(mError).ToLocalChecked(), Nan::New(mReturnValue).ToLocalChecked() }; callback->Call(2, argv); } NAN_METHOD(QuantLibNode::SpreadedOptionletVolatility) { // validate js arguments if (info.Length() == 0 || !info[0]->IsString()) { return Nan::ThrowError("ObjectID is required."); } // convert js argument to c++ type String::Utf8Value strObjectID(info[0]->ToString()); string ObjectIDCpp(strdup(*strObjectID)); // convert js argument to c++ type ObjectHandler::property_t BaseVolStructureCpp = ObjectHandler::property_t(static_cast(Nan::To(info[1]).FromJust())); // convert js argument to c++ type ObjectHandler::property_t SpreadCpp = ObjectHandler::property_t(static_cast(Nan::To(info[2]).FromJust())); // declare callback Nan::Callback *callback = new Nan::Callback(info[3].As()); // launch Async worker Nan::AsyncQueueWorker(new SpreadedOptionletVolatilityWorker( callback ,ObjectIDCpp ,BaseVolStructureCpp ,SpreadCpp )); } //SpreadedOptionletVolatilityWorker::~SpreadedOptionletVolatilityWorker(){ // //} //SpreadedOptionletVolatilityWorker::Destroy(){ // //} void StrippedOptionletAdapterWorker::Execute(){ try{ // convert object IDs into library objects OH_GET_REFERENCE(StrippedOptionletBaseLibObjPtr, mStrippedOptionletBase, QuantLibAddin::StrippedOptionletBase, QuantLib::StrippedOptionletBase) // Construct the Value Object boost::shared_ptr valueObject( new QuantLibAddin::ValueObjects::qlStrippedOptionletAdapter( mObjectID, mStrippedOptionletBase, false )); // Construct the Object boost::shared_ptr object( new QuantLibAddin::StrippedOptionletAdapter( valueObject, StrippedOptionletBaseLibObjPtr, 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 StrippedOptionletAdapterWorker::HandleOKCallback(){ Nan::HandleScope scope; Local argv[2] = { Nan::New(mError).ToLocalChecked(), Nan::New(mReturnValue).ToLocalChecked() }; callback->Call(2, argv); } NAN_METHOD(QuantLibNode::StrippedOptionletAdapter) { // validate js arguments if (info.Length() == 0 || !info[0]->IsString()) { return Nan::ThrowError("ObjectID is required."); } if (info.Length() == 1 || !info[1]->IsString()) { return Nan::ThrowError("StrippedOptionletBase is required."); } // convert js argument to c++ type String::Utf8Value strObjectID(info[0]->ToString()); string ObjectIDCpp(strdup(*strObjectID)); // convert js argument to c++ type String::Utf8Value strStrippedOptionletBase(info[1]->ToString()); string StrippedOptionletBaseCpp(strdup(*strStrippedOptionletBase)); // declare callback Nan::Callback *callback = new Nan::Callback(info[2].As()); // launch Async worker Nan::AsyncQueueWorker(new StrippedOptionletAdapterWorker( callback ,ObjectIDCpp ,StrippedOptionletBaseCpp )); } //StrippedOptionletAdapterWorker::~StrippedOptionletAdapterWorker(){ // //} //StrippedOptionletAdapterWorker::Destroy(){ // //} void StrippedOptionletWorker::Execute(){ try{ // convert input datatypes to QuantLib datatypes QuantLib::Size SettlementDaysLib; QuantLibAddin::cppToLibrary(mSettlementDays, SettlementDaysLib); // convert input datatypes to QuantLib enumerated datatypes QuantLib::Calendar CalendarEnum = ObjectHandler::Create()(mCalendar); // convert input datatypes to QuantLib enumerated datatypes QuantLib::BusinessDayConvention BusinessDayConventionEnum = ObjectHandler::Create()(mBusinessDayConvention); // convert object IDs into library objects OH_GET_REFERENCE(IborIndexLibObjPtr, mIborIndex, QuantLibAddin::IborIndex, QuantLib::IborIndex) // convert input datatypes to QuantLib datatypes std::vector OptionletDatesLib = ObjectHandler::vector::convert2( mOptionletDates, "OptionletDates"); // convert object IDs into library objects std::vector< std::vector< QuantLib::Handle > > VolatilitiesLibObj = ObjectHandler::matrix::convert2< QuantLib::Handle >(mVolatilities, "Volatilities"); // convert input datatypes to QuantLib enumerated datatypes QuantLib::DayCounter DayCounterEnum = ObjectHandler::Create()(mDayCounter); // Construct the Value Object boost::shared_ptr valueObject( new QuantLibAddin::ValueObjects::qlStrippedOptionlet( mObjectID, mSettlementDays, mCalendar, mBusinessDayConvention, mIborIndex, mOptionletDates, mStrikes, mVolatilities, mDayCounter, false )); // Construct the Object boost::shared_ptr object( new QuantLibAddin::StrippedOptionlet( valueObject, SettlementDaysLib, CalendarEnum, BusinessDayConventionEnum, IborIndexLibObjPtr, OptionletDatesLib, mStrikes, VolatilitiesLibObj, DayCounterEnum, 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 StrippedOptionletWorker::HandleOKCallback(){ Nan::HandleScope scope; Local argv[2] = { Nan::New(mError).ToLocalChecked(), Nan::New(mReturnValue).ToLocalChecked() }; callback->Call(2, argv); } NAN_METHOD(QuantLibNode::StrippedOptionlet) { // 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("SettlementDays is required."); } if (info.Length() == 2 || !info[2]->IsString()) { return Nan::ThrowError("Calendar is required."); } if (info.Length() == 3 || !info[3]->IsString()) { return Nan::ThrowError("BusinessDayConvention is required."); } if (info.Length() == 4 || !info[4]->IsString()) { return Nan::ThrowError("IborIndex is required."); } if (info.Length() == 5 || !info[5]->IsArray()) { return Nan::ThrowError("OptionletDates is required."); } if (info.Length() == 6 || !info[6]->IsArray()) { return Nan::ThrowError("Strikes is required."); } if (info.Length() == 7 || !info[7]->IsArray()) { return Nan::ThrowError("Volatilities is required."); } if (info.Length() == 8 || !info[8]->IsString()) { return Nan::ThrowError("DayCounter 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 SettlementDaysCpp = Nan::To(info[1]).FromJust(); // convert js argument to c++ type String::Utf8Value strCalendar(info[2]->ToString()); string CalendarCpp(strdup(*strCalendar)); // convert js argument to c++ type String::Utf8Value strBusinessDayConvention(info[3]->ToString()); string BusinessDayConventionCpp(strdup(*strBusinessDayConvention)); // convert js argument to c++ type String::Utf8Value strIborIndex(info[4]->ToString()); string IborIndexCpp(strdup(*strIborIndex)); // convert js argument to c++ type std::vectorOptionletDatesCpp; Local OptionletDatesArray = info[5].As(); for (unsigned int i = 0; i < OptionletDatesArray->Length(); i++){ ObjectHandler::property_t tmp = ObjectHandler::property_t(static_cast(Nan::To(Nan::Get(OptionletDatesArray, i).ToLocalChecked()).FromJust())); OptionletDatesCpp.push_back(tmp); } // convert js argument to c++ type std::vectorStrikesCpp; Local StrikesArray = info[6].As(); for (unsigned int i = 0; i < StrikesArray->Length(); i++){ StrikesCpp.push_back(Nan::To(Nan::Get(StrikesArray, i).ToLocalChecked()).FromJust()); } // convert js argument to c++ type std::vector< std::vector >VolatilitiesCpp; Local VolatilitiesMatrix = info[7].As(); for (unsigned int i = 0; i < VolatilitiesMatrix->Length(); i++){ Local VolatilitiesArray = VolatilitiesMatrix->Get(i).As(); std::vector tmp; for (unsigned int j = 0; j < VolatilitiesArray->Length(); j++){ ObjectHandler::property_t temp = ObjectHandler::property_t(static_cast(Nan::To(Nan::Get(VolatilitiesArray, j).ToLocalChecked()).FromJust())); tmp.push_back(temp); } VolatilitiesCpp.push_back(tmp); } // convert js argument to c++ type String::Utf8Value strDayCounter(info[8]->ToString()); string DayCounterCpp(strdup(*strDayCounter)); // declare callback Nan::Callback *callback = new Nan::Callback(info[9].As()); // launch Async worker Nan::AsyncQueueWorker(new StrippedOptionletWorker( callback ,ObjectIDCpp ,SettlementDaysCpp ,CalendarCpp ,BusinessDayConventionCpp ,IborIndexCpp ,OptionletDatesCpp ,StrikesCpp ,VolatilitiesCpp ,DayCounterCpp )); } //StrippedOptionletWorker::~StrippedOptionletWorker(){ // //} //StrippedOptionletWorker::Destroy(){ // //} void OptionletStripper1Worker::Execute(){ try{ // convert object IDs into library objects OH_GET_REFERENCE(TermVolSurfaceLibObjPtr, mTermVolSurface, QuantLibAddin::CapFloorTermVolSurface, QuantLib::CapFloorTermVolSurface) // convert object IDs into library objects OH_GET_REFERENCE(IborIndexLibObjPtr, mIborIndex, QuantLibAddin::IborIndex, QuantLib::IborIndex) // convert input datatypes to QuantLib datatypes // convert input datatypes to QuantLib datatypes QuantLib::Natural MaxIterLib = ObjectHandler::convert2( mMaxIter, "MaxIter", QuantLib::Null()); // Construct the Value Object boost::shared_ptr valueObject( new QuantLibAddin::ValueObjects::qlOptionletStripper1( mObjectID, mTermVolSurface, mIborIndex, mSwitchStrike, mAccuracy, mMaxIter, false )); // Construct the Object boost::shared_ptr object( new QuantLibAddin::OptionletStripper1( valueObject, TermVolSurfaceLibObjPtr, IborIndexLibObjPtr, mSwitchStrike, mAccuracy, MaxIterLib, 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 OptionletStripper1Worker::HandleOKCallback(){ Nan::HandleScope scope; Local argv[2] = { Nan::New(mError).ToLocalChecked(), Nan::New(mReturnValue).ToLocalChecked() }; callback->Call(2, argv); } NAN_METHOD(QuantLibNode::OptionletStripper1) { // validate js arguments if (info.Length() == 0 || !info[0]->IsString()) { return Nan::ThrowError("ObjectID is required."); } if (info.Length() == 1 || !info[1]->IsString()) { return Nan::ThrowError("TermVolSurface is required."); } if (info.Length() == 2 || !info[2]->IsString()) { return Nan::ThrowError("IborIndex is required."); } if (info.Length() == 3 || !info[3]->IsNumber()) { return Nan::ThrowError("SwitchStrike is required."); } if (info.Length() == 4 || !info[4]->IsNumber()) { return Nan::ThrowError("Accuracy is required."); } // convert js argument to c++ type String::Utf8Value strObjectID(info[0]->ToString()); string ObjectIDCpp(strdup(*strObjectID)); // convert js argument to c++ type String::Utf8Value strTermVolSurface(info[1]->ToString()); string TermVolSurfaceCpp(strdup(*strTermVolSurface)); // convert js argument to c++ type String::Utf8Value strIborIndex(info[2]->ToString()); string IborIndexCpp(strdup(*strIborIndex)); // convert js argument to c++ type double SwitchStrikeCpp = Nan::To(info[3]).FromJust(); // convert js argument to c++ type double AccuracyCpp = Nan::To(info[4]).FromJust(); // convert js argument to c++ type ObjectHandler::property_t MaxIterCpp = ObjectHandler::property_t(static_cast(Nan::To(info[5]).FromJust())); // declare callback Nan::Callback *callback = new Nan::Callback(info[6].As()); // launch Async worker Nan::AsyncQueueWorker(new OptionletStripper1Worker( callback ,ObjectIDCpp ,TermVolSurfaceCpp ,IborIndexCpp ,SwitchStrikeCpp ,AccuracyCpp ,MaxIterCpp )); } //OptionletStripper1Worker::~OptionletStripper1Worker(){ // //} //OptionletStripper1Worker::Destroy(){ // //} void OptionletStripper2Worker::Execute(){ try{ // convert object IDs into library objects OH_GET_REFERENCE(OptionletStripper1LibObjPtr, mOptionletStripper1, QuantLibAddin::OptionletStripper1, QuantLib::OptionletStripper1) // convert object IDs into library objects OH_GET_OBJECT(TermVolCurveCoerce, mTermVolCurve, ObjectHandler::Object) QuantLib::Handle TermVolCurveLibObj = QuantLibAddin::CoerceHandle< QuantLibAddin::CapFloorTermVolCurve, QuantLib::CapFloorTermVolCurve>()( TermVolCurveCoerce); // Construct the Value Object boost::shared_ptr valueObject( new QuantLibAddin::ValueObjects::qlOptionletStripper2( mObjectID, mOptionletStripper1, mTermVolCurve, false )); // Construct the Object boost::shared_ptr object( new QuantLibAddin::OptionletStripper2( valueObject, OptionletStripper1LibObjPtr, TermVolCurveLibObj, 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 OptionletStripper2Worker::HandleOKCallback(){ Nan::HandleScope scope; Local argv[2] = { Nan::New(mError).ToLocalChecked(), Nan::New(mReturnValue).ToLocalChecked() }; callback->Call(2, argv); } NAN_METHOD(QuantLibNode::OptionletStripper2) { // validate js arguments if (info.Length() == 0 || !info[0]->IsString()) { return Nan::ThrowError("ObjectID is required."); } if (info.Length() == 1 || !info[1]->IsString()) { return Nan::ThrowError("OptionletStripper1 is required."); } // convert js argument to c++ type String::Utf8Value strObjectID(info[0]->ToString()); string ObjectIDCpp(strdup(*strObjectID)); // convert js argument to c++ type String::Utf8Value strOptionletStripper1(info[1]->ToString()); string OptionletStripper1Cpp(strdup(*strOptionletStripper1)); // convert js argument to c++ type ObjectHandler::property_t TermVolCurveCpp = ObjectHandler::property_t(static_cast(Nan::To(info[2]).FromJust())); // declare callback Nan::Callback *callback = new Nan::Callback(info[3].As()); // launch Async worker Nan::AsyncQueueWorker(new OptionletStripper2Worker( callback ,ObjectIDCpp ,OptionletStripper1Cpp ,TermVolCurveCpp )); } //OptionletStripper2Worker::~OptionletStripper2Worker(){ // //} //OptionletStripper2Worker::Destroy(){ // //} void CapFloorTermVolCurveWorker::Execute(){ try{ // convert input datatypes to QuantLib datatypes QuantLib::Size SettlementDaysLib; QuantLibAddin::cppToLibrary(mSettlementDays, SettlementDaysLib); // convert input datatypes to QuantLib enumerated datatypes QuantLib::Calendar CalendarEnum = ObjectHandler::Create()(mCalendar); // convert input datatypes to QuantLib enumerated datatypes QuantLib::BusinessDayConvention BusinessDayConventionEnum = ObjectHandler::Create()(mBusinessDayConvention); // convert input datatypes to QuantLib datatypes std::vector OptionTenorsLib; // convert object IDs into library objects std::vector< QuantLib::Handle > VolatilitiesLibObj = ObjectHandler::vector::convert2< QuantLib::Handle >(mVolatilities, "Volatilities"); // convert input datatypes to QuantLib enumerated datatypes QuantLib::DayCounter DayCounterEnum = ObjectHandler::Create()(mDayCounter); // Construct the Value Object boost::shared_ptr valueObject( new QuantLibAddin::ValueObjects::qlCapFloorTermVolCurve( mObjectID, mSettlementDays, mCalendar, mBusinessDayConvention, mOptionTenors, mVolatilities, mDayCounter, false )); // Construct the Object boost::shared_ptr object( new QuantLibAddin::CapFloorTermVolCurve( valueObject, SettlementDaysLib, CalendarEnum, BusinessDayConventionEnum, OptionTenorsLib, VolatilitiesLibObj, DayCounterEnum, 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 CapFloorTermVolCurveWorker::HandleOKCallback(){ Nan::HandleScope scope; Local argv[2] = { Nan::New(mError).ToLocalChecked(), Nan::New(mReturnValue).ToLocalChecked() }; callback->Call(2, argv); } NAN_METHOD(QuantLibNode::CapFloorTermVolCurve) { // 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("SettlementDays is required."); } if (info.Length() == 2 || !info[2]->IsString()) { return Nan::ThrowError("Calendar is required."); } if (info.Length() == 3 || !info[3]->IsString()) { return Nan::ThrowError("BusinessDayConvention is required."); } if (info.Length() == 4 || !info[4]->IsArray()) { return Nan::ThrowError("OptionTenors is required."); } if (info.Length() == 5 || !info[5]->IsArray()) { return Nan::ThrowError("Volatilities is required."); } if (info.Length() == 6 || !info[6]->IsString()) { return Nan::ThrowError("DayCounter 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 SettlementDaysCpp = Nan::To(info[1]).FromJust(); // convert js argument to c++ type String::Utf8Value strCalendar(info[2]->ToString()); string CalendarCpp(strdup(*strCalendar)); // convert js argument to c++ type String::Utf8Value strBusinessDayConvention(info[3]->ToString()); string BusinessDayConventionCpp(strdup(*strBusinessDayConvention)); // convert js argument to c++ type std::vectorOptionTenorsCpp; Local OptionTenorsArray = info[4].As(); for (unsigned int i = 0; i < OptionTenorsArray->Length(); i++){ ObjectHandler::property_t tmp = ObjectHandler::property_t(static_cast(Nan::To(Nan::Get(OptionTenorsArray, i).ToLocalChecked()).FromJust())); OptionTenorsCpp.push_back(tmp); } // convert js argument to c++ type std::vectorVolatilitiesCpp; Local VolatilitiesArray = info[5].As(); for (unsigned int i = 0; i < VolatilitiesArray->Length(); i++){ ObjectHandler::property_t tmp = ObjectHandler::property_t(static_cast(Nan::To(Nan::Get(VolatilitiesArray, i).ToLocalChecked()).FromJust())); VolatilitiesCpp.push_back(tmp); } // convert js argument to c++ type String::Utf8Value strDayCounter(info[6]->ToString()); string DayCounterCpp(strdup(*strDayCounter)); // declare callback Nan::Callback *callback = new Nan::Callback(info[7].As()); // launch Async worker Nan::AsyncQueueWorker(new CapFloorTermVolCurveWorker( callback ,ObjectIDCpp ,SettlementDaysCpp ,CalendarCpp ,BusinessDayConventionCpp ,OptionTenorsCpp ,VolatilitiesCpp ,DayCounterCpp )); } //CapFloorTermVolCurveWorker::~CapFloorTermVolCurveWorker(){ // //} //CapFloorTermVolCurveWorker::Destroy(){ // //} void CapFloorTermVolSurfaceWorker::Execute(){ try{ // convert input datatypes to QuantLib datatypes QuantLib::Size SettlementDaysLib; QuantLibAddin::cppToLibrary(mSettlementDays, SettlementDaysLib); // convert input datatypes to QuantLib enumerated datatypes QuantLib::Calendar CalendarEnum = ObjectHandler::Create()(mCalendar); // convert input datatypes to QuantLib enumerated datatypes QuantLib::BusinessDayConvention BusinessDayConventionEnum = ObjectHandler::Create()(mBusinessDayConvention); // convert input datatypes to QuantLib datatypes std::vector OptionTenorsLib; // convert object IDs into library objects std::vector< std::vector< QuantLib::Handle > > VolatilitiesLibObj = ObjectHandler::matrix::convert2< QuantLib::Handle >(mVolatilities, "Volatilities"); // convert input datatypes to QuantLib enumerated datatypes QuantLib::DayCounter DayCounterEnum = ObjectHandler::Create()(mDayCounter); // Construct the Value Object boost::shared_ptr valueObject( new QuantLibAddin::ValueObjects::qlCapFloorTermVolSurface( mObjectID, mSettlementDays, mCalendar, mBusinessDayConvention, mOptionTenors, mStrikes, mVolatilities, mDayCounter, false )); // Construct the Object boost::shared_ptr object( new QuantLibAddin::CapFloorTermVolSurface( valueObject, SettlementDaysLib, CalendarEnum, BusinessDayConventionEnum, OptionTenorsLib, mStrikes, VolatilitiesLibObj, DayCounterEnum, 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 CapFloorTermVolSurfaceWorker::HandleOKCallback(){ Nan::HandleScope scope; Local argv[2] = { Nan::New(mError).ToLocalChecked(), Nan::New(mReturnValue).ToLocalChecked() }; callback->Call(2, argv); } NAN_METHOD(QuantLibNode::CapFloorTermVolSurface) { // 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("SettlementDays is required."); } if (info.Length() == 2 || !info[2]->IsString()) { return Nan::ThrowError("Calendar is required."); } if (info.Length() == 3 || !info[3]->IsString()) { return Nan::ThrowError("BusinessDayConvention is required."); } if (info.Length() == 4 || !info[4]->IsArray()) { return Nan::ThrowError("OptionTenors is required."); } if (info.Length() == 5 || !info[5]->IsArray()) { return Nan::ThrowError("Strikes is required."); } if (info.Length() == 6 || !info[6]->IsArray()) { return Nan::ThrowError("Volatilities is required."); } if (info.Length() == 7 || !info[7]->IsString()) { return Nan::ThrowError("DayCounter 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 SettlementDaysCpp = Nan::To(info[1]).FromJust(); // convert js argument to c++ type String::Utf8Value strCalendar(info[2]->ToString()); string CalendarCpp(strdup(*strCalendar)); // convert js argument to c++ type String::Utf8Value strBusinessDayConvention(info[3]->ToString()); string BusinessDayConventionCpp(strdup(*strBusinessDayConvention)); // convert js argument to c++ type std::vectorOptionTenorsCpp; Local OptionTenorsArray = info[4].As(); for (unsigned int i = 0; i < OptionTenorsArray->Length(); i++){ ObjectHandler::property_t tmp = ObjectHandler::property_t(static_cast(Nan::To(Nan::Get(OptionTenorsArray, i).ToLocalChecked()).FromJust())); OptionTenorsCpp.push_back(tmp); } // convert js argument to c++ type std::vectorStrikesCpp; Local StrikesArray = info[5].As(); for (unsigned int i = 0; i < StrikesArray->Length(); i++){ StrikesCpp.push_back(Nan::To(Nan::Get(StrikesArray, i).ToLocalChecked()).FromJust()); } // convert js argument to c++ type std::vector< std::vector >VolatilitiesCpp; Local VolatilitiesMatrix = info[6].As(); for (unsigned int i = 0; i < VolatilitiesMatrix->Length(); i++){ Local VolatilitiesArray = VolatilitiesMatrix->Get(i).As(); std::vector tmp; for (unsigned int j = 0; j < VolatilitiesArray->Length(); j++){ ObjectHandler::property_t temp = ObjectHandler::property_t(static_cast(Nan::To(Nan::Get(VolatilitiesArray, j).ToLocalChecked()).FromJust())); tmp.push_back(temp); } VolatilitiesCpp.push_back(tmp); } // convert js argument to c++ type String::Utf8Value strDayCounter(info[7]->ToString()); string DayCounterCpp(strdup(*strDayCounter)); // declare callback Nan::Callback *callback = new Nan::Callback(info[8].As()); // launch Async worker Nan::AsyncQueueWorker(new CapFloorTermVolSurfaceWorker( callback ,ObjectIDCpp ,SettlementDaysCpp ,CalendarCpp ,BusinessDayConventionCpp ,OptionTenorsCpp ,StrikesCpp ,VolatilitiesCpp ,DayCounterCpp )); } //CapFloorTermVolSurfaceWorker::~CapFloorTermVolSurfaceWorker(){ // //} //CapFloorTermVolSurfaceWorker::Destroy(){ // //} void OptionletVTSVolatilityWorker::Execute(){ try{ // convert input datatypes to QuantLib datatypes QuantLib::Date OptionDateLib = ObjectHandler::convert2( mOptionDate, "OptionDate"); // convert object IDs into library objects OH_GET_REFERENCE(ObjectIDLibObjPtr, mObjectID, QuantLibAddin::OptionletVolatilityStructure, QuantLib::OptionletVolatilityStructure) // loop on the input parameter and populate the return vector QuantLibAddin::qlOptionletVTSVolatilityBind bindObject = boost::bind((QuantLibAddin::qlOptionletVTSVolatilitySignature) &QuantLib::OptionletVolatilityStructure::volatility, ObjectIDLibObjPtr ,OptionDateLib ,_1 ,mAllowExtrapolation ); ObjectHandler::loop (bindObject, mStrike, mReturnValue ); }catch(const std::exception &e){ mError = e.what(); }catch (...){ mError = "unkown error"; } } void OptionletVTSVolatilityWorker::HandleOKCallback(){ Nan::HandleScope scope; Local tmpArray = Nan::New(mReturnValue.size()); for (unsigned int i = 0; i < mReturnValue.size(); i++) { Nan::Set(tmpArray,i,Nan::New(mReturnValue[i])); } Local argv[2] = { Nan::New(mError).ToLocalChecked(), tmpArray }; callback->Call(2, argv); } NAN_METHOD(QuantLibNode::OptionletVTSVolatility) { // validate js arguments if (info.Length() == 0 || !info[0]->IsString()) { return Nan::ThrowError("ObjectID is required."); } if (info.Length() == 2 || !info[2]->IsArray()) { return Nan::ThrowError("Strike is required."); } if (info.Length() == 3 || !info[3]->IsBoolean()) { return Nan::ThrowError("AllowExtrapolation is required."); } // convert js argument to c++ type String::Utf8Value strObjectID(info[0]->ToString()); string ObjectIDCpp(strdup(*strObjectID)); // convert js argument to c++ type ObjectHandler::property_t OptionDateCpp = ObjectHandler::property_t(static_cast(Nan::To(info[1]).FromJust())); // convert js argument to c++ type std::vectorStrikeCpp; Local StrikeArray = info[2].As(); for (unsigned int i = 0; i < StrikeArray->Length(); i++){ StrikeCpp.push_back(Nan::To(Nan::Get(StrikeArray, i).ToLocalChecked()).FromJust()); } // convert js argument to c++ type bool AllowExtrapolationCpp = Nan::To(info[3]).FromJust(); // declare callback Nan::Callback *callback = new Nan::Callback(info[4].As()); // launch Async worker Nan::AsyncQueueWorker(new OptionletVTSVolatilityWorker( callback ,ObjectIDCpp ,OptionDateCpp ,StrikeCpp ,AllowExtrapolationCpp )); } //OptionletVTSVolatilityWorker::~OptionletVTSVolatilityWorker(){ // //} //OptionletVTSVolatilityWorker::Destroy(){ // //} void OptionletVTSVolatility2Worker::Execute(){ try{ // convert input datatypes to QuantLib datatypes QuantLib::Period OptionTenorLib; QuantLibAddin::cppToLibrary(mOptionTenor, OptionTenorLib); // convert object IDs into library objects OH_GET_REFERENCE(ObjectIDLibObjPtr, mObjectID, QuantLibAddin::OptionletVolatilityStructure, QuantLib::OptionletVolatilityStructure) // loop on the input parameter and populate the return vector QuantLibAddin::qlOptionletVTSVolatility2Bind bindObject = boost::bind((QuantLibAddin::qlOptionletVTSVolatility2Signature) &QuantLib::OptionletVolatilityStructure::volatility, ObjectIDLibObjPtr ,OptionTenorLib ,_1 ,mAllowExtrapolation ); ObjectHandler::loop (bindObject, mStrike, mReturnValue ); }catch(const std::exception &e){ mError = e.what(); }catch (...){ mError = "unkown error"; } } void OptionletVTSVolatility2Worker::HandleOKCallback(){ Nan::HandleScope scope; Local tmpArray = Nan::New(mReturnValue.size()); for (unsigned int i = 0; i < mReturnValue.size(); i++) { Nan::Set(tmpArray,i,Nan::New(mReturnValue[i])); } Local argv[2] = { Nan::New(mError).ToLocalChecked(), tmpArray }; callback->Call(2, argv); } NAN_METHOD(QuantLibNode::OptionletVTSVolatility2) { // validate js arguments if (info.Length() == 0 || !info[0]->IsString()) { return Nan::ThrowError("ObjectID is required."); } if (info.Length() == 1 || !info[1]->IsString()) { return Nan::ThrowError("OptionTenor is required."); } if (info.Length() == 2 || !info[2]->IsArray()) { return Nan::ThrowError("Strike is required."); } if (info.Length() == 3 || !info[3]->IsBoolean()) { return Nan::ThrowError("AllowExtrapolation is required."); } // convert js argument to c++ type String::Utf8Value strObjectID(info[0]->ToString()); string ObjectIDCpp(strdup(*strObjectID)); // convert js argument to c++ type String::Utf8Value strOptionTenor(info[1]->ToString()); string OptionTenorCpp(strdup(*strOptionTenor)); // convert js argument to c++ type std::vectorStrikeCpp; Local StrikeArray = info[2].As(); for (unsigned int i = 0; i < StrikeArray->Length(); i++){ StrikeCpp.push_back(Nan::To(Nan::Get(StrikeArray, i).ToLocalChecked()).FromJust()); } // convert js argument to c++ type bool AllowExtrapolationCpp = Nan::To(info[3]).FromJust(); // declare callback Nan::Callback *callback = new Nan::Callback(info[4].As()); // launch Async worker Nan::AsyncQueueWorker(new OptionletVTSVolatility2Worker( callback ,ObjectIDCpp ,OptionTenorCpp ,StrikeCpp ,AllowExtrapolationCpp )); } //OptionletVTSVolatility2Worker::~OptionletVTSVolatility2Worker(){ // //} //OptionletVTSVolatility2Worker::Destroy(){ // //} void OptionletVTSBlackVarianceWorker::Execute(){ try{ // convert input datatypes to QuantLib datatypes std::vector OptionDateLib = ObjectHandler::vector::convert2( mOptionDate, "OptionDate"); // convert object IDs into library objects OH_GET_REFERENCE(ObjectIDLibObjPtr, mObjectID, QuantLibAddin::OptionletVolatilityStructure, QuantLib::OptionletVolatilityStructure) std::vector returnValue; // loop on the input parameter and populate the return vector QuantLibAddin::qlOptionletVTSBlackVarianceBind bindObject = boost::bind((QuantLibAddin::qlOptionletVTSBlackVarianceSignature) &QuantLib::OptionletVolatilityStructure::blackVariance, ObjectIDLibObjPtr ,_1 ,mStrike ,mAllowExtrapolation ); ObjectHandler::loop (bindObject, OptionDateLib, returnValue ); mReturnValue = QuantLibAddin::libraryToVector(returnValue); }catch(const std::exception &e){ mError = e.what(); }catch (...){ mError = "unkown error"; } } void OptionletVTSBlackVarianceWorker::HandleOKCallback(){ Nan::HandleScope scope; Local tmpArray = Nan::New(mReturnValue.size()); for (unsigned int i = 0; i < mReturnValue.size(); i++) { Nan::Set(tmpArray,i,Nan::New(mReturnValue[i])); } Local argv[2] = { Nan::New(mError).ToLocalChecked(), tmpArray }; callback->Call(2, argv); } NAN_METHOD(QuantLibNode::OptionletVTSBlackVariance) { // 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("OptionDate is required."); } if (info.Length() == 2 || !info[2]->IsNumber()) { return Nan::ThrowError("Strike is required."); } if (info.Length() == 3 || !info[3]->IsBoolean()) { return Nan::ThrowError("AllowExtrapolation 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::vectorOptionDateCpp; Local OptionDateArray = info[1].As(); for (unsigned int i = 0; i < OptionDateArray->Length(); i++){ ObjectHandler::property_t tmp = ObjectHandler::property_t(static_cast(Nan::To(Nan::Get(OptionDateArray, i).ToLocalChecked()).FromJust())); OptionDateCpp.push_back(tmp); } // convert js argument to c++ type double StrikeCpp = Nan::To(info[2]).FromJust(); // convert js argument to c++ type bool AllowExtrapolationCpp = Nan::To(info[3]).FromJust(); // declare callback Nan::Callback *callback = new Nan::Callback(info[4].As()); // launch Async worker Nan::AsyncQueueWorker(new OptionletVTSBlackVarianceWorker( callback ,ObjectIDCpp ,OptionDateCpp ,StrikeCpp ,AllowExtrapolationCpp )); } //OptionletVTSBlackVarianceWorker::~OptionletVTSBlackVarianceWorker(){ // //} //OptionletVTSBlackVarianceWorker::Destroy(){ // //} void OptionletVTSBlackVariance2Worker::Execute(){ try{ // convert input datatypes to QuantLib datatypes std::vector OptionTenorLib; // convert object IDs into library objects OH_GET_REFERENCE(ObjectIDLibObjPtr, mObjectID, QuantLibAddin::OptionletVolatilityStructure, QuantLib::OptionletVolatilityStructure) std::vector returnValue; // loop on the input parameter and populate the return vector QuantLibAddin::qlOptionletVTSBlackVariance2Bind bindObject = boost::bind((QuantLibAddin::qlOptionletVTSBlackVariance2Signature) &QuantLib::OptionletVolatilityStructure::blackVariance, ObjectIDLibObjPtr ,_1 ,mStrike ,mAllowExtrapolation ); ObjectHandler::loop (bindObject, OptionTenorLib, returnValue ); mReturnValue = QuantLibAddin::libraryToVector(returnValue); }catch(const std::exception &e){ mError = e.what(); }catch (...){ mError = "unkown error"; } } void OptionletVTSBlackVariance2Worker::HandleOKCallback(){ Nan::HandleScope scope; Local tmpArray = Nan::New(mReturnValue.size()); for (unsigned int i = 0; i < mReturnValue.size(); i++) { Nan::Set(tmpArray,i,Nan::New(mReturnValue[i])); } Local argv[2] = { Nan::New(mError).ToLocalChecked(), tmpArray }; callback->Call(2, argv); } NAN_METHOD(QuantLibNode::OptionletVTSBlackVariance2) { // 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("OptionTenor is required."); } if (info.Length() == 2 || !info[2]->IsNumber()) { return Nan::ThrowError("Strike is required."); } if (info.Length() == 3 || !info[3]->IsBoolean()) { return Nan::ThrowError("AllowExtrapolation 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::vectorOptionTenorCpp; Local OptionTenorArray = info[1].As(); for (unsigned int i = 0; i < OptionTenorArray->Length(); i++){ ObjectHandler::property_t tmp = ObjectHandler::property_t(static_cast(Nan::To(Nan::Get(OptionTenorArray, i).ToLocalChecked()).FromJust())); OptionTenorCpp.push_back(tmp); } // convert js argument to c++ type double StrikeCpp = Nan::To(info[2]).FromJust(); // convert js argument to c++ type bool AllowExtrapolationCpp = Nan::To(info[3]).FromJust(); // declare callback Nan::Callback *callback = new Nan::Callback(info[4].As()); // launch Async worker Nan::AsyncQueueWorker(new OptionletVTSBlackVariance2Worker( callback ,ObjectIDCpp ,OptionTenorCpp ,StrikeCpp ,AllowExtrapolationCpp )); } //OptionletVTSBlackVariance2Worker::~OptionletVTSBlackVariance2Worker(){ // //} //OptionletVTSBlackVariance2Worker::Destroy(){ // //} void StrippedOptionletBaseStrikesWorker::Execute(){ try{ // convert object IDs into library objects OH_GET_REFERENCE(ObjectIDLibObjPtr, mObjectID, QuantLibAddin::StrippedOptionletBase, QuantLib::StrippedOptionletBase) // convert input datatypes to QuantLib datatypes QuantLib::Size IndexLib; QuantLibAddin::cppToLibrary(mIndex, IndexLib); // loop on the input parameter and populate the return vector mReturnValue = ObjectIDLibObjPtr->optionletStrikes( IndexLib ); }catch(const std::exception &e){ mError = e.what(); }catch (...){ mError = "unkown error"; } } void StrippedOptionletBaseStrikesWorker::HandleOKCallback(){ Nan::HandleScope scope; Local tmpArray = Nan::New(mReturnValue.size()); for (unsigned int i = 0; i < mReturnValue.size(); i++) { Nan::Set(tmpArray,i,Nan::New(mReturnValue[i])); } Local argv[2] = { Nan::New(mError).ToLocalChecked(), tmpArray }; callback->Call(2, argv); } NAN_METHOD(QuantLibNode::StrippedOptionletBaseStrikes) { // 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("Index 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 IndexCpp = Nan::To(info[1]).FromJust(); // declare callback Nan::Callback *callback = new Nan::Callback(info[2].As()); // launch Async worker Nan::AsyncQueueWorker(new StrippedOptionletBaseStrikesWorker( callback ,ObjectIDCpp ,IndexCpp )); } //StrippedOptionletBaseStrikesWorker::~StrippedOptionletBaseStrikesWorker(){ // //} //StrippedOptionletBaseStrikesWorker::Destroy(){ // //} void StrippedOptionletBaseOptionletVolatilitiesWorker::Execute(){ try{ // convert object IDs into library objects OH_GET_REFERENCE(ObjectIDLibObjPtr, mObjectID, QuantLibAddin::StrippedOptionletBase, QuantLib::StrippedOptionletBase) // convert input datatypes to QuantLib datatypes QuantLib::Size IndexLib; QuantLibAddin::cppToLibrary(mIndex, IndexLib); // loop on the input parameter and populate the return vector mReturnValue = ObjectIDLibObjPtr->optionletVolatilities( IndexLib ); }catch(const std::exception &e){ mError = e.what(); }catch (...){ mError = "unkown error"; } } void StrippedOptionletBaseOptionletVolatilitiesWorker::HandleOKCallback(){ Nan::HandleScope scope; Local tmpArray = Nan::New(mReturnValue.size()); for (unsigned int i = 0; i < mReturnValue.size(); i++) { Nan::Set(tmpArray,i,Nan::New(mReturnValue[i])); } Local argv[2] = { Nan::New(mError).ToLocalChecked(), tmpArray }; callback->Call(2, argv); } NAN_METHOD(QuantLibNode::StrippedOptionletBaseOptionletVolatilities) { // 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("Index 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 IndexCpp = Nan::To(info[1]).FromJust(); // declare callback Nan::Callback *callback = new Nan::Callback(info[2].As()); // launch Async worker Nan::AsyncQueueWorker(new StrippedOptionletBaseOptionletVolatilitiesWorker( callback ,ObjectIDCpp ,IndexCpp )); } //StrippedOptionletBaseOptionletVolatilitiesWorker::~StrippedOptionletBaseOptionletVolatilitiesWorker(){ // //} //StrippedOptionletBaseOptionletVolatilitiesWorker::Destroy(){ // //} void StrippedOptionletBaseOptionletFixingDatesWorker::Execute(){ try{ // convert object IDs into library objects OH_GET_REFERENCE(ObjectIDLibObjPtr, mObjectID, QuantLibAddin::StrippedOptionletBase, QuantLib::StrippedOptionletBase) // loop on the input parameter and populate the return vector std::vector returnValue = ObjectIDLibObjPtr->optionletFixingDates( ); mReturnValue = QuantLibAddin::libraryToVector(returnValue); }catch(const std::exception &e){ mError = e.what(); }catch (...){ mError = "unkown error"; } } void StrippedOptionletBaseOptionletFixingDatesWorker::HandleOKCallback(){ Nan::HandleScope scope; Local tmpArray = Nan::New(mReturnValue.size()); for (unsigned int i = 0; i < mReturnValue.size(); i++) { Nan::Set(tmpArray,i,Nan::New(mReturnValue[i])); } Local argv[2] = { Nan::New(mError).ToLocalChecked(), tmpArray }; callback->Call(2, argv); } NAN_METHOD(QuantLibNode::StrippedOptionletBaseOptionletFixingDates) { // validate js arguments if (info.Length() == 0 || !info[0]->IsString()) { return Nan::ThrowError("ObjectID is required."); } // convert js argument to c++ type String::Utf8Value strObjectID(info[0]->ToString()); string ObjectIDCpp(strdup(*strObjectID)); // declare callback Nan::Callback *callback = new Nan::Callback(info[1].As()); // launch Async worker Nan::AsyncQueueWorker(new StrippedOptionletBaseOptionletFixingDatesWorker( callback ,ObjectIDCpp )); } //StrippedOptionletBaseOptionletFixingDatesWorker::~StrippedOptionletBaseOptionletFixingDatesWorker(){ // //} //StrippedOptionletBaseOptionletFixingDatesWorker::Destroy(){ // //} void StrippedOptionletBaseOptionletFixingTimesWorker::Execute(){ try{ // convert object IDs into library objects OH_GET_REFERENCE(ObjectIDLibObjPtr, mObjectID, QuantLibAddin::StrippedOptionletBase, QuantLib::StrippedOptionletBase) // loop on the input parameter and populate the return vector mReturnValue = ObjectIDLibObjPtr->optionletFixingTimes( ); }catch(const std::exception &e){ mError = e.what(); }catch (...){ mError = "unkown error"; } } void StrippedOptionletBaseOptionletFixingTimesWorker::HandleOKCallback(){ Nan::HandleScope scope; Local tmpArray = Nan::New(mReturnValue.size()); for (unsigned int i = 0; i < mReturnValue.size(); i++) { Nan::Set(tmpArray,i,Nan::New(mReturnValue[i])); } Local argv[2] = { Nan::New(mError).ToLocalChecked(), tmpArray }; callback->Call(2, argv); } NAN_METHOD(QuantLibNode::StrippedOptionletBaseOptionletFixingTimes) { // validate js arguments if (info.Length() == 0 || !info[0]->IsString()) { return Nan::ThrowError("ObjectID is required."); } // convert js argument to c++ type String::Utf8Value strObjectID(info[0]->ToString()); string ObjectIDCpp(strdup(*strObjectID)); // declare callback Nan::Callback *callback = new Nan::Callback(info[1].As()); // launch Async worker Nan::AsyncQueueWorker(new StrippedOptionletBaseOptionletFixingTimesWorker( callback ,ObjectIDCpp )); } //StrippedOptionletBaseOptionletFixingTimesWorker::~StrippedOptionletBaseOptionletFixingTimesWorker(){ // //} //StrippedOptionletBaseOptionletFixingTimesWorker::Destroy(){ // //} void StrippedOptionletBaseAtmOptionletRatesWorker::Execute(){ try{ // convert object IDs into library objects OH_GET_REFERENCE(ObjectIDLibObjPtr, mObjectID, QuantLibAddin::StrippedOptionletBase, QuantLib::StrippedOptionletBase) // loop on the input parameter and populate the return vector mReturnValue = ObjectIDLibObjPtr->atmOptionletRates( ); }catch(const std::exception &e){ mError = e.what(); }catch (...){ mError = "unkown error"; } } void StrippedOptionletBaseAtmOptionletRatesWorker::HandleOKCallback(){ Nan::HandleScope scope; Local tmpArray = Nan::New(mReturnValue.size()); for (unsigned int i = 0; i < mReturnValue.size(); i++) { Nan::Set(tmpArray,i,Nan::New(mReturnValue[i])); } Local argv[2] = { Nan::New(mError).ToLocalChecked(), tmpArray }; callback->Call(2, argv); } NAN_METHOD(QuantLibNode::StrippedOptionletBaseAtmOptionletRates) { // validate js arguments if (info.Length() == 0 || !info[0]->IsString()) { return Nan::ThrowError("ObjectID is required."); } // convert js argument to c++ type String::Utf8Value strObjectID(info[0]->ToString()); string ObjectIDCpp(strdup(*strObjectID)); // declare callback Nan::Callback *callback = new Nan::Callback(info[1].As()); // launch Async worker Nan::AsyncQueueWorker(new StrippedOptionletBaseAtmOptionletRatesWorker( callback ,ObjectIDCpp )); } //StrippedOptionletBaseAtmOptionletRatesWorker::~StrippedOptionletBaseAtmOptionletRatesWorker(){ // //} //StrippedOptionletBaseAtmOptionletRatesWorker::Destroy(){ // //} void StrippedOptionletBaseDayCounterWorker::Execute(){ try{ // convert object IDs into library objects OH_GET_REFERENCE(ObjectIDLibObjPtr, mObjectID, QuantLibAddin::StrippedOptionletBase, QuantLib::StrippedOptionletBase) // invoke the member function QuantLib::DayCounter returnValue = ObjectIDLibObjPtr->dayCounter( ); std::ostringstream os; os << returnValue; mReturnValue = os.str(); }catch(const std::exception &e){ mError = e.what(); }catch (...){ mError = "unkown error"; } } void StrippedOptionletBaseDayCounterWorker::HandleOKCallback(){ Nan::HandleScope scope; Local argv[2] = { Nan::New(mError).ToLocalChecked(), Nan::New(mReturnValue).ToLocalChecked() }; callback->Call(2, argv); } NAN_METHOD(QuantLibNode::StrippedOptionletBaseDayCounter) { // validate js arguments if (info.Length() == 0 || !info[0]->IsString()) { return Nan::ThrowError("ObjectID is required."); } // convert js argument to c++ type String::Utf8Value strObjectID(info[0]->ToString()); string ObjectIDCpp(strdup(*strObjectID)); // declare callback Nan::Callback *callback = new Nan::Callback(info[1].As()); // launch Async worker Nan::AsyncQueueWorker(new StrippedOptionletBaseDayCounterWorker( callback ,ObjectIDCpp )); } //StrippedOptionletBaseDayCounterWorker::~StrippedOptionletBaseDayCounterWorker(){ // //} //StrippedOptionletBaseDayCounterWorker::Destroy(){ // //} void StrippedOptionletBaseCalendarWorker::Execute(){ try{ // convert object IDs into library objects OH_GET_REFERENCE(ObjectIDLibObjPtr, mObjectID, QuantLibAddin::StrippedOptionletBase, QuantLib::StrippedOptionletBase) // invoke the member function QuantLib::Calendar returnValue = ObjectIDLibObjPtr->calendar( ); std::ostringstream os; os << returnValue; mReturnValue = os.str(); }catch(const std::exception &e){ mError = e.what(); }catch (...){ mError = "unkown error"; } } void StrippedOptionletBaseCalendarWorker::HandleOKCallback(){ Nan::HandleScope scope; Local argv[2] = { Nan::New(mError).ToLocalChecked(), Nan::New(mReturnValue).ToLocalChecked() }; callback->Call(2, argv); } NAN_METHOD(QuantLibNode::StrippedOptionletBaseCalendar) { // validate js arguments if (info.Length() == 0 || !info[0]->IsString()) { return Nan::ThrowError("ObjectID is required."); } // convert js argument to c++ type String::Utf8Value strObjectID(info[0]->ToString()); string ObjectIDCpp(strdup(*strObjectID)); // declare callback Nan::Callback *callback = new Nan::Callback(info[1].As()); // launch Async worker Nan::AsyncQueueWorker(new StrippedOptionletBaseCalendarWorker( callback ,ObjectIDCpp )); } //StrippedOptionletBaseCalendarWorker::~StrippedOptionletBaseCalendarWorker(){ // //} //StrippedOptionletBaseCalendarWorker::Destroy(){ // //} void StrippedOptionletBaseSettlementDaysWorker::Execute(){ try{ // convert object IDs into library objects OH_GET_REFERENCE(ObjectIDLibObjPtr, mObjectID, QuantLibAddin::StrippedOptionletBase, QuantLib::StrippedOptionletBase) // invoke the member function QuantLib::Natural returnValue = ObjectIDLibObjPtr->settlementDays( ); mReturnValue = QuantLibAddin::libraryToScalar(returnValue); }catch(const std::exception &e){ mError = e.what(); }catch (...){ mError = "unkown error"; } } void StrippedOptionletBaseSettlementDaysWorker::HandleOKCallback(){ Nan::HandleScope scope; Local argv[2] = { Nan::New(mError).ToLocalChecked(), Nan::New(mReturnValue) }; callback->Call(2, argv); } NAN_METHOD(QuantLibNode::StrippedOptionletBaseSettlementDays) { // validate js arguments if (info.Length() == 0 || !info[0]->IsString()) { return Nan::ThrowError("ObjectID is required."); } // convert js argument to c++ type String::Utf8Value strObjectID(info[0]->ToString()); string ObjectIDCpp(strdup(*strObjectID)); // declare callback Nan::Callback *callback = new Nan::Callback(info[1].As()); // launch Async worker Nan::AsyncQueueWorker(new StrippedOptionletBaseSettlementDaysWorker( callback ,ObjectIDCpp )); } //StrippedOptionletBaseSettlementDaysWorker::~StrippedOptionletBaseSettlementDaysWorker(){ // //} //StrippedOptionletBaseSettlementDaysWorker::Destroy(){ // //} void StrippedOptionletBaseBusinessDayConventionWorker::Execute(){ try{ // convert object IDs into library objects OH_GET_REFERENCE(ObjectIDLibObjPtr, mObjectID, QuantLibAddin::StrippedOptionletBase, QuantLib::StrippedOptionletBase) // invoke the member function QuantLib::BusinessDayConvention returnValue = ObjectIDLibObjPtr->businessDayConvention( ); std::ostringstream os; os << returnValue; mReturnValue = os.str(); }catch(const std::exception &e){ mError = e.what(); }catch (...){ mError = "unkown error"; } } void StrippedOptionletBaseBusinessDayConventionWorker::HandleOKCallback(){ Nan::HandleScope scope; Local argv[2] = { Nan::New(mError).ToLocalChecked(), Nan::New(mReturnValue).ToLocalChecked() }; callback->Call(2, argv); } NAN_METHOD(QuantLibNode::StrippedOptionletBaseBusinessDayConvention) { // validate js arguments if (info.Length() == 0 || !info[0]->IsString()) { return Nan::ThrowError("ObjectID is required."); } // convert js argument to c++ type String::Utf8Value strObjectID(info[0]->ToString()); string ObjectIDCpp(strdup(*strObjectID)); // declare callback Nan::Callback *callback = new Nan::Callback(info[1].As()); // launch Async worker Nan::AsyncQueueWorker(new StrippedOptionletBaseBusinessDayConventionWorker( callback ,ObjectIDCpp )); } //StrippedOptionletBaseBusinessDayConventionWorker::~StrippedOptionletBaseBusinessDayConventionWorker(){ // //} //StrippedOptionletBaseBusinessDayConventionWorker::Destroy(){ // //} void OptionletStripperOptionletFixingTenorsWorker::Execute(){ try{ // convert object IDs into library objects OH_GET_REFERENCE(ObjectIDLibObjPtr, mObjectID, QuantLibAddin::OptionletStripper, QuantLib::OptionletStripper) // loop on the input parameter and populate the return vector std::vector returnValue = ObjectIDLibObjPtr->optionletFixingTenors( ); mReturnValue = QuantLibAddin::libraryToVector(returnValue); }catch(const std::exception &e){ mError = e.what(); }catch (...){ mError = "unkown error"; } } void OptionletStripperOptionletFixingTenorsWorker::HandleOKCallback(){ Nan::HandleScope scope; Local tmpArray = Nan::New(mReturnValue.size()); for (unsigned int i = 0; i < mReturnValue.size(); i++) { Nan::Set(tmpArray,i,Nan::New(mReturnValue[i]).ToLocalChecked()); } Local argv[2] = { Nan::New(mError).ToLocalChecked(), tmpArray }; callback->Call(2, argv); } NAN_METHOD(QuantLibNode::OptionletStripperOptionletFixingTenors) { // validate js arguments if (info.Length() == 0 || !info[0]->IsString()) { return Nan::ThrowError("ObjectID is required."); } // convert js argument to c++ type String::Utf8Value strObjectID(info[0]->ToString()); string ObjectIDCpp(strdup(*strObjectID)); // declare callback Nan::Callback *callback = new Nan::Callback(info[1].As()); // launch Async worker Nan::AsyncQueueWorker(new OptionletStripperOptionletFixingTenorsWorker( callback ,ObjectIDCpp )); } //OptionletStripperOptionletFixingTenorsWorker::~OptionletStripperOptionletFixingTenorsWorker(){ // //} //OptionletStripperOptionletFixingTenorsWorker::Destroy(){ // //} void OptionletStripperOptionletPaymentDatesWorker::Execute(){ try{ // convert object IDs into library objects OH_GET_REFERENCE(ObjectIDLibObjPtr, mObjectID, QuantLibAddin::OptionletStripper, QuantLib::OptionletStripper) // loop on the input parameter and populate the return vector std::vector returnValue = ObjectIDLibObjPtr->optionletPaymentDates( ); mReturnValue = QuantLibAddin::libraryToVector(returnValue); }catch(const std::exception &e){ mError = e.what(); }catch (...){ mError = "unkown error"; } } void OptionletStripperOptionletPaymentDatesWorker::HandleOKCallback(){ Nan::HandleScope scope; Local tmpArray = Nan::New(mReturnValue.size()); for (unsigned int i = 0; i < mReturnValue.size(); i++) { Nan::Set(tmpArray,i,Nan::New(mReturnValue[i])); } Local argv[2] = { Nan::New(mError).ToLocalChecked(), tmpArray }; callback->Call(2, argv); } NAN_METHOD(QuantLibNode::OptionletStripperOptionletPaymentDates) { // validate js arguments if (info.Length() == 0 || !info[0]->IsString()) { return Nan::ThrowError("ObjectID is required."); } // convert js argument to c++ type String::Utf8Value strObjectID(info[0]->ToString()); string ObjectIDCpp(strdup(*strObjectID)); // declare callback Nan::Callback *callback = new Nan::Callback(info[1].As()); // launch Async worker Nan::AsyncQueueWorker(new OptionletStripperOptionletPaymentDatesWorker( callback ,ObjectIDCpp )); } //OptionletStripperOptionletPaymentDatesWorker::~OptionletStripperOptionletPaymentDatesWorker(){ // //} //OptionletStripperOptionletPaymentDatesWorker::Destroy(){ // //} void OptionletStripperOptionletAccrualPeriodsWorker::Execute(){ try{ // convert object IDs into library objects OH_GET_REFERENCE(ObjectIDLibObjPtr, mObjectID, QuantLibAddin::OptionletStripper, QuantLib::OptionletStripper) // loop on the input parameter and populate the return vector mReturnValue = ObjectIDLibObjPtr->optionletAccrualPeriods( ); }catch(const std::exception &e){ mError = e.what(); }catch (...){ mError = "unkown error"; } } void OptionletStripperOptionletAccrualPeriodsWorker::HandleOKCallback(){ Nan::HandleScope scope; Local tmpArray = Nan::New(mReturnValue.size()); for (unsigned int i = 0; i < mReturnValue.size(); i++) { Nan::Set(tmpArray,i,Nan::New(mReturnValue[i])); } Local argv[2] = { Nan::New(mError).ToLocalChecked(), tmpArray }; callback->Call(2, argv); } NAN_METHOD(QuantLibNode::OptionletStripperOptionletAccrualPeriods) { // validate js arguments if (info.Length() == 0 || !info[0]->IsString()) { return Nan::ThrowError("ObjectID is required."); } // convert js argument to c++ type String::Utf8Value strObjectID(info[0]->ToString()); string ObjectIDCpp(strdup(*strObjectID)); // declare callback Nan::Callback *callback = new Nan::Callback(info[1].As()); // launch Async worker Nan::AsyncQueueWorker(new OptionletStripperOptionletAccrualPeriodsWorker( callback ,ObjectIDCpp )); } //OptionletStripperOptionletAccrualPeriodsWorker::~OptionletStripperOptionletAccrualPeriodsWorker(){ // //} //OptionletStripperOptionletAccrualPeriodsWorker::Destroy(){ // //} void OptionletStripper1CapFloorPricesWorker::Execute(){ try{ // convert object IDs into library objects OH_GET_REFERENCE(ObjectIDLibObjPtr, mObjectID, QuantLibAddin::OptionletStripper1, QuantLib::OptionletStripper1) QuantLib::Matrix returnValue; // invoke the member function returnValue = ObjectIDLibObjPtr->capFloorPrices( ); mReturnValue = QuantLibAddin::qlMatrixToVv(returnValue); }catch(const std::exception &e){ mError = e.what(); }catch (...){ mError = "unkown error"; } } void OptionletStripper1CapFloorPricesWorker::HandleOKCallback(){ Nan::HandleScope scope; Local tmpMatrix = Nan::New(mReturnValue.size()); for (unsigned int i = 0; i < mReturnValue.size(); i++) { Local tmpArray = Nan::New(mReturnValue[i].size()); for (unsigned int j = 0; j < mReturnValue[i].size(); j++) { Nan::Set(tmpArray,j,Nan::New(mReturnValue[i][j])); } Nan::Set(tmpMatrix,i,tmpArray); } Local argv[2] = { Nan::New(mError).ToLocalChecked(), tmpMatrix }; callback->Call(2, argv); } NAN_METHOD(QuantLibNode::OptionletStripper1CapFloorPrices) { // validate js arguments if (info.Length() == 0 || !info[0]->IsString()) { return Nan::ThrowError("ObjectID is required."); } // convert js argument to c++ type String::Utf8Value strObjectID(info[0]->ToString()); string ObjectIDCpp(strdup(*strObjectID)); // declare callback Nan::Callback *callback = new Nan::Callback(info[1].As()); // launch Async worker Nan::AsyncQueueWorker(new OptionletStripper1CapFloorPricesWorker( callback ,ObjectIDCpp )); } //OptionletStripper1CapFloorPricesWorker::~OptionletStripper1CapFloorPricesWorker(){ // //} //OptionletStripper1CapFloorPricesWorker::Destroy(){ // //} void OptionletStripper1CapFloorVolatilitiesWorker::Execute(){ try{ // convert object IDs into library objects OH_GET_REFERENCE(ObjectIDLibObjPtr, mObjectID, QuantLibAddin::OptionletStripper1, QuantLib::OptionletStripper1) QuantLib::Matrix returnValue; // invoke the member function returnValue = ObjectIDLibObjPtr->capFloorVolatilities( ); mReturnValue = QuantLibAddin::qlMatrixToVv(returnValue); }catch(const std::exception &e){ mError = e.what(); }catch (...){ mError = "unkown error"; } } void OptionletStripper1CapFloorVolatilitiesWorker::HandleOKCallback(){ Nan::HandleScope scope; Local tmpMatrix = Nan::New(mReturnValue.size()); for (unsigned int i = 0; i < mReturnValue.size(); i++) { Local tmpArray = Nan::New(mReturnValue[i].size()); for (unsigned int j = 0; j < mReturnValue[i].size(); j++) { Nan::Set(tmpArray,j,Nan::New(mReturnValue[i][j])); } Nan::Set(tmpMatrix,i,tmpArray); } Local argv[2] = { Nan::New(mError).ToLocalChecked(), tmpMatrix }; callback->Call(2, argv); } NAN_METHOD(QuantLibNode::OptionletStripper1CapFloorVolatilities) { // validate js arguments if (info.Length() == 0 || !info[0]->IsString()) { return Nan::ThrowError("ObjectID is required."); } // convert js argument to c++ type String::Utf8Value strObjectID(info[0]->ToString()); string ObjectIDCpp(strdup(*strObjectID)); // declare callback Nan::Callback *callback = new Nan::Callback(info[1].As()); // launch Async worker Nan::AsyncQueueWorker(new OptionletStripper1CapFloorVolatilitiesWorker( callback ,ObjectIDCpp )); } //OptionletStripper1CapFloorVolatilitiesWorker::~OptionletStripper1CapFloorVolatilitiesWorker(){ // //} //OptionletStripper1CapFloorVolatilitiesWorker::Destroy(){ // //} void OptionletStripper1OptionletPricesWorker::Execute(){ try{ // convert object IDs into library objects OH_GET_REFERENCE(ObjectIDLibObjPtr, mObjectID, QuantLibAddin::OptionletStripper1, QuantLib::OptionletStripper1) QuantLib::Matrix returnValue; // invoke the member function returnValue = ObjectIDLibObjPtr->optionletPrices( ); mReturnValue = QuantLibAddin::qlMatrixToVv(returnValue); }catch(const std::exception &e){ mError = e.what(); }catch (...){ mError = "unkown error"; } } void OptionletStripper1OptionletPricesWorker::HandleOKCallback(){ Nan::HandleScope scope; Local tmpMatrix = Nan::New(mReturnValue.size()); for (unsigned int i = 0; i < mReturnValue.size(); i++) { Local tmpArray = Nan::New(mReturnValue[i].size()); for (unsigned int j = 0; j < mReturnValue[i].size(); j++) { Nan::Set(tmpArray,j,Nan::New(mReturnValue[i][j])); } Nan::Set(tmpMatrix,i,tmpArray); } Local argv[2] = { Nan::New(mError).ToLocalChecked(), tmpMatrix }; callback->Call(2, argv); } NAN_METHOD(QuantLibNode::OptionletStripper1OptionletPrices) { // validate js arguments if (info.Length() == 0 || !info[0]->IsString()) { return Nan::ThrowError("ObjectID is required."); } // convert js argument to c++ type String::Utf8Value strObjectID(info[0]->ToString()); string ObjectIDCpp(strdup(*strObjectID)); // declare callback Nan::Callback *callback = new Nan::Callback(info[1].As()); // launch Async worker Nan::AsyncQueueWorker(new OptionletStripper1OptionletPricesWorker( callback ,ObjectIDCpp )); } //OptionletStripper1OptionletPricesWorker::~OptionletStripper1OptionletPricesWorker(){ // //} //OptionletStripper1OptionletPricesWorker::Destroy(){ // //} void OptionletStripper1SwitchStrikeWorker::Execute(){ try{ // convert object IDs into library objects OH_GET_REFERENCE(ObjectIDLibObjPtr, mObjectID, QuantLibAddin::OptionletStripper1, QuantLib::OptionletStripper1) // invoke the member function mReturnValue = ObjectIDLibObjPtr->switchStrike( ); }catch(const std::exception &e){ mError = e.what(); }catch (...){ mError = "unkown error"; } } void OptionletStripper1SwitchStrikeWorker::HandleOKCallback(){ Nan::HandleScope scope; Local argv[2] = { Nan::New(mError).ToLocalChecked(), Nan::New(mReturnValue) }; callback->Call(2, argv); } NAN_METHOD(QuantLibNode::OptionletStripper1SwitchStrike) { // validate js arguments if (info.Length() == 0 || !info[0]->IsString()) { return Nan::ThrowError("ObjectID is required."); } // convert js argument to c++ type String::Utf8Value strObjectID(info[0]->ToString()); string ObjectIDCpp(strdup(*strObjectID)); // declare callback Nan::Callback *callback = new Nan::Callback(info[1].As()); // launch Async worker Nan::AsyncQueueWorker(new OptionletStripper1SwitchStrikeWorker( callback ,ObjectIDCpp )); } //OptionletStripper1SwitchStrikeWorker::~OptionletStripper1SwitchStrikeWorker(){ // //} //OptionletStripper1SwitchStrikeWorker::Destroy(){ // //} void OptionletStripper2SpreadsVolWorker::Execute(){ try{ // convert object IDs into library objects OH_GET_REFERENCE(ObjectIDLibObjPtr, mObjectID, QuantLibAddin::OptionletStripper2, QuantLib::OptionletStripper2) // loop on the input parameter and populate the return vector mReturnValue = ObjectIDLibObjPtr->spreadsVol( ); }catch(const std::exception &e){ mError = e.what(); }catch (...){ mError = "unkown error"; } } void OptionletStripper2SpreadsVolWorker::HandleOKCallback(){ Nan::HandleScope scope; Local tmpArray = Nan::New(mReturnValue.size()); for (unsigned int i = 0; i < mReturnValue.size(); i++) { Nan::Set(tmpArray,i,Nan::New(mReturnValue[i])); } Local argv[2] = { Nan::New(mError).ToLocalChecked(), tmpArray }; callback->Call(2, argv); } NAN_METHOD(QuantLibNode::OptionletStripper2SpreadsVol) { // validate js arguments if (info.Length() == 0 || !info[0]->IsString()) { return Nan::ThrowError("ObjectID is required."); } // convert js argument to c++ type String::Utf8Value strObjectID(info[0]->ToString()); string ObjectIDCpp(strdup(*strObjectID)); // declare callback Nan::Callback *callback = new Nan::Callback(info[1].As()); // launch Async worker Nan::AsyncQueueWorker(new OptionletStripper2SpreadsVolWorker( callback ,ObjectIDCpp )); } //OptionletStripper2SpreadsVolWorker::~OptionletStripper2SpreadsVolWorker(){ // //} //OptionletStripper2SpreadsVolWorker::Destroy(){ // //} void OptionletStripper2AtmCapFloorPricesWorker::Execute(){ try{ // convert object IDs into library objects OH_GET_REFERENCE(ObjectIDLibObjPtr, mObjectID, QuantLibAddin::OptionletStripper2, QuantLib::OptionletStripper2) // loop on the input parameter and populate the return vector std::vector returnValue = ObjectIDLibObjPtr->atmCapFloorPrices( ); mReturnValue = QuantLibAddin::libraryToVector(returnValue); }catch(const std::exception &e){ mError = e.what(); }catch (...){ mError = "unkown error"; } } void OptionletStripper2AtmCapFloorPricesWorker::HandleOKCallback(){ Nan::HandleScope scope; Local tmpArray = Nan::New(mReturnValue.size()); for (unsigned int i = 0; i < mReturnValue.size(); i++) { Nan::Set(tmpArray,i,Nan::New(mReturnValue[i])); } Local argv[2] = { Nan::New(mError).ToLocalChecked(), tmpArray }; callback->Call(2, argv); } NAN_METHOD(QuantLibNode::OptionletStripper2AtmCapFloorPrices) { // validate js arguments if (info.Length() == 0 || !info[0]->IsString()) { return Nan::ThrowError("ObjectID is required."); } // convert js argument to c++ type String::Utf8Value strObjectID(info[0]->ToString()); string ObjectIDCpp(strdup(*strObjectID)); // declare callback Nan::Callback *callback = new Nan::Callback(info[1].As()); // launch Async worker Nan::AsyncQueueWorker(new OptionletStripper2AtmCapFloorPricesWorker( callback ,ObjectIDCpp )); } //OptionletStripper2AtmCapFloorPricesWorker::~OptionletStripper2AtmCapFloorPricesWorker(){ // //} //OptionletStripper2AtmCapFloorPricesWorker::Destroy(){ // //} void OptionletStripper2AtmCapFloorStrikesWorker::Execute(){ try{ // convert object IDs into library objects OH_GET_REFERENCE(ObjectIDLibObjPtr, mObjectID, QuantLibAddin::OptionletStripper2, QuantLib::OptionletStripper2) // loop on the input parameter and populate the return vector mReturnValue = ObjectIDLibObjPtr->atmCapFloorStrikes( ); }catch(const std::exception &e){ mError = e.what(); }catch (...){ mError = "unkown error"; } } void OptionletStripper2AtmCapFloorStrikesWorker::HandleOKCallback(){ Nan::HandleScope scope; Local tmpArray = Nan::New(mReturnValue.size()); for (unsigned int i = 0; i < mReturnValue.size(); i++) { Nan::Set(tmpArray,i,Nan::New(mReturnValue[i])); } Local argv[2] = { Nan::New(mError).ToLocalChecked(), tmpArray }; callback->Call(2, argv); } NAN_METHOD(QuantLibNode::OptionletStripper2AtmCapFloorStrikes) { // validate js arguments if (info.Length() == 0 || !info[0]->IsString()) { return Nan::ThrowError("ObjectID is required."); } // convert js argument to c++ type String::Utf8Value strObjectID(info[0]->ToString()); string ObjectIDCpp(strdup(*strObjectID)); // declare callback Nan::Callback *callback = new Nan::Callback(info[1].As()); // launch Async worker Nan::AsyncQueueWorker(new OptionletStripper2AtmCapFloorStrikesWorker( callback ,ObjectIDCpp )); } //OptionletStripper2AtmCapFloorStrikesWorker::~OptionletStripper2AtmCapFloorStrikesWorker(){ // //} //OptionletStripper2AtmCapFloorStrikesWorker::Destroy(){ // //} void CapFloorTermVTSVolatilityWorker::Execute(){ try{ // convert object IDs into library objects OH_GET_REFERENCE(ObjectIDLibObjPtr, mObjectID, QuantLibAddin::CapFloorTermVolatilityStructure, QuantLib::CapFloorTermVolatilityStructure) // convert input datatypes to QuantLib datatypes QuantLib::Date OptionDateLib = ObjectHandler::convert2( mOptionDate, "OptionDate"); // loop on the input parameter and populate the return vector QuantLibAddin::qlCapFloorTermVTSVolatilityBind bindObject = boost::bind((QuantLibAddin::qlCapFloorTermVTSVolatilitySignature) &QuantLib::CapFloorTermVolatilityStructure::volatility, ObjectIDLibObjPtr ,OptionDateLib ,_1 ,mAllowExtrapolation ); ObjectHandler::loop (bindObject, mStrike, mReturnValue ); }catch(const std::exception &e){ mError = e.what(); }catch (...){ mError = "unkown error"; } } void CapFloorTermVTSVolatilityWorker::HandleOKCallback(){ Nan::HandleScope scope; Local tmpArray = Nan::New(mReturnValue.size()); for (unsigned int i = 0; i < mReturnValue.size(); i++) { Nan::Set(tmpArray,i,Nan::New(mReturnValue[i])); } Local argv[2] = { Nan::New(mError).ToLocalChecked(), tmpArray }; callback->Call(2, argv); } NAN_METHOD(QuantLibNode::CapFloorTermVTSVolatility) { // validate js arguments if (info.Length() == 0 || !info[0]->IsString()) { return Nan::ThrowError("ObjectID is required."); } if (info.Length() == 2 || !info[2]->IsArray()) { return Nan::ThrowError("Strike is required."); } if (info.Length() == 3 || !info[3]->IsBoolean()) { return Nan::ThrowError("AllowExtrapolation is required."); } // convert js argument to c++ type String::Utf8Value strObjectID(info[0]->ToString()); string ObjectIDCpp(strdup(*strObjectID)); // convert js argument to c++ type ObjectHandler::property_t OptionDateCpp = ObjectHandler::property_t(static_cast(Nan::To(info[1]).FromJust())); // convert js argument to c++ type std::vectorStrikeCpp; Local StrikeArray = info[2].As(); for (unsigned int i = 0; i < StrikeArray->Length(); i++){ StrikeCpp.push_back(Nan::To(Nan::Get(StrikeArray, i).ToLocalChecked()).FromJust()); } // convert js argument to c++ type bool AllowExtrapolationCpp = Nan::To(info[3]).FromJust(); // declare callback Nan::Callback *callback = new Nan::Callback(info[4].As()); // launch Async worker Nan::AsyncQueueWorker(new CapFloorTermVTSVolatilityWorker( callback ,ObjectIDCpp ,OptionDateCpp ,StrikeCpp ,AllowExtrapolationCpp )); } //CapFloorTermVTSVolatilityWorker::~CapFloorTermVTSVolatilityWorker(){ // //} //CapFloorTermVTSVolatilityWorker::Destroy(){ // //} void CapFloorTermVTSVolatility2Worker::Execute(){ try{ // convert object IDs into library objects OH_GET_REFERENCE(ObjectIDLibObjPtr, mObjectID, QuantLibAddin::CapFloorTermVolatilityStructure, QuantLib::CapFloorTermVolatilityStructure) // convert input datatypes to QuantLib datatypes QuantLib::Period OptionTenorLib; QuantLibAddin::cppToLibrary(mOptionTenor, OptionTenorLib); // loop on the input parameter and populate the return vector QuantLibAddin::qlCapFloorTermVTSVolatility2Bind bindObject = boost::bind((QuantLibAddin::qlCapFloorTermVTSVolatility2Signature) &QuantLib::CapFloorTermVolatilityStructure::volatility, ObjectIDLibObjPtr ,OptionTenorLib ,_1 ,mAllowExtrapolation ); ObjectHandler::loop (bindObject, mStrike, mReturnValue ); }catch(const std::exception &e){ mError = e.what(); }catch (...){ mError = "unkown error"; } } void CapFloorTermVTSVolatility2Worker::HandleOKCallback(){ Nan::HandleScope scope; Local tmpArray = Nan::New(mReturnValue.size()); for (unsigned int i = 0; i < mReturnValue.size(); i++) { Nan::Set(tmpArray,i,Nan::New(mReturnValue[i])); } Local argv[2] = { Nan::New(mError).ToLocalChecked(), tmpArray }; callback->Call(2, argv); } NAN_METHOD(QuantLibNode::CapFloorTermVTSVolatility2) { // validate js arguments if (info.Length() == 0 || !info[0]->IsString()) { return Nan::ThrowError("ObjectID is required."); } if (info.Length() == 1 || !info[1]->IsString()) { return Nan::ThrowError("OptionTenor is required."); } if (info.Length() == 2 || !info[2]->IsArray()) { return Nan::ThrowError("Strike is required."); } if (info.Length() == 3 || !info[3]->IsBoolean()) { return Nan::ThrowError("AllowExtrapolation is required."); } // convert js argument to c++ type String::Utf8Value strObjectID(info[0]->ToString()); string ObjectIDCpp(strdup(*strObjectID)); // convert js argument to c++ type String::Utf8Value strOptionTenor(info[1]->ToString()); string OptionTenorCpp(strdup(*strOptionTenor)); // convert js argument to c++ type std::vectorStrikeCpp; Local StrikeArray = info[2].As(); for (unsigned int i = 0; i < StrikeArray->Length(); i++){ StrikeCpp.push_back(Nan::To(Nan::Get(StrikeArray, i).ToLocalChecked()).FromJust()); } // convert js argument to c++ type bool AllowExtrapolationCpp = Nan::To(info[3]).FromJust(); // declare callback Nan::Callback *callback = new Nan::Callback(info[4].As()); // launch Async worker Nan::AsyncQueueWorker(new CapFloorTermVTSVolatility2Worker( callback ,ObjectIDCpp ,OptionTenorCpp ,StrikeCpp ,AllowExtrapolationCpp )); } //CapFloorTermVTSVolatility2Worker::~CapFloorTermVTSVolatility2Worker(){ // //} //CapFloorTermVTSVolatility2Worker::Destroy(){ // //} void CapFloorTermVolCurveOptionTenorsWorker::Execute(){ try{ // convert object IDs into library objects OH_GET_REFERENCE(ObjectIDLibObjPtr, mObjectID, QuantLibAddin::CapFloorTermVolCurve, QuantLib::CapFloorTermVolCurve) // loop on the input parameter and populate the return vector std::vector returnValue = ObjectIDLibObjPtr->optionTenors( ); mReturnValue = QuantLibAddin::libraryToVector(returnValue); }catch(const std::exception &e){ mError = e.what(); }catch (...){ mError = "unkown error"; } } void CapFloorTermVolCurveOptionTenorsWorker::HandleOKCallback(){ Nan::HandleScope scope; Local tmpArray = Nan::New(mReturnValue.size()); for (unsigned int i = 0; i < mReturnValue.size(); i++) { Nan::Set(tmpArray,i,Nan::New(mReturnValue[i]).ToLocalChecked()); } Local argv[2] = { Nan::New(mError).ToLocalChecked(), tmpArray }; callback->Call(2, argv); } NAN_METHOD(QuantLibNode::CapFloorTermVolCurveOptionTenors) { // validate js arguments if (info.Length() == 0 || !info[0]->IsString()) { return Nan::ThrowError("ObjectID is required."); } // convert js argument to c++ type String::Utf8Value strObjectID(info[0]->ToString()); string ObjectIDCpp(strdup(*strObjectID)); // declare callback Nan::Callback *callback = new Nan::Callback(info[1].As()); // launch Async worker Nan::AsyncQueueWorker(new CapFloorTermVolCurveOptionTenorsWorker( callback ,ObjectIDCpp )); } //CapFloorTermVolCurveOptionTenorsWorker::~CapFloorTermVolCurveOptionTenorsWorker(){ // //} //CapFloorTermVolCurveOptionTenorsWorker::Destroy(){ // //} void CapFloorTermVolCurveOptionDatesWorker::Execute(){ try{ // convert object IDs into library objects OH_GET_REFERENCE(ObjectIDLibObjPtr, mObjectID, QuantLibAddin::CapFloorTermVolCurve, QuantLib::CapFloorTermVolCurve) // loop on the input parameter and populate the return vector std::vector returnValue = ObjectIDLibObjPtr->optionDates( ); mReturnValue = QuantLibAddin::libraryToVector(returnValue); }catch(const std::exception &e){ mError = e.what(); }catch (...){ mError = "unkown error"; } } void CapFloorTermVolCurveOptionDatesWorker::HandleOKCallback(){ Nan::HandleScope scope; Local tmpArray = Nan::New(mReturnValue.size()); for (unsigned int i = 0; i < mReturnValue.size(); i++) { Nan::Set(tmpArray,i,Nan::New(mReturnValue[i])); } Local argv[2] = { Nan::New(mError).ToLocalChecked(), tmpArray }; callback->Call(2, argv); } NAN_METHOD(QuantLibNode::CapFloorTermVolCurveOptionDates) { // validate js arguments if (info.Length() == 0 || !info[0]->IsString()) { return Nan::ThrowError("ObjectID is required."); } // convert js argument to c++ type String::Utf8Value strObjectID(info[0]->ToString()); string ObjectIDCpp(strdup(*strObjectID)); // declare callback Nan::Callback *callback = new Nan::Callback(info[1].As()); // launch Async worker Nan::AsyncQueueWorker(new CapFloorTermVolCurveOptionDatesWorker( callback ,ObjectIDCpp )); } //CapFloorTermVolCurveOptionDatesWorker::~CapFloorTermVolCurveOptionDatesWorker(){ // //} //CapFloorTermVolCurveOptionDatesWorker::Destroy(){ // //} void CapFloorTermVolSurfaceOptionTenorsWorker::Execute(){ try{ // convert object IDs into library objects OH_GET_REFERENCE(ObjectIDLibObjPtr, mObjectID, QuantLibAddin::CapFloorTermVolSurface, QuantLib::CapFloorTermVolSurface) // loop on the input parameter and populate the return vector std::vector returnValue = ObjectIDLibObjPtr->optionTenors( ); mReturnValue = QuantLibAddin::libraryToVector(returnValue); }catch(const std::exception &e){ mError = e.what(); }catch (...){ mError = "unkown error"; } } void CapFloorTermVolSurfaceOptionTenorsWorker::HandleOKCallback(){ Nan::HandleScope scope; Local tmpArray = Nan::New(mReturnValue.size()); for (unsigned int i = 0; i < mReturnValue.size(); i++) { Nan::Set(tmpArray,i,Nan::New(mReturnValue[i]).ToLocalChecked()); } Local argv[2] = { Nan::New(mError).ToLocalChecked(), tmpArray }; callback->Call(2, argv); } NAN_METHOD(QuantLibNode::CapFloorTermVolSurfaceOptionTenors) { // validate js arguments if (info.Length() == 0 || !info[0]->IsString()) { return Nan::ThrowError("ObjectID is required."); } // convert js argument to c++ type String::Utf8Value strObjectID(info[0]->ToString()); string ObjectIDCpp(strdup(*strObjectID)); // declare callback Nan::Callback *callback = new Nan::Callback(info[1].As()); // launch Async worker Nan::AsyncQueueWorker(new CapFloorTermVolSurfaceOptionTenorsWorker( callback ,ObjectIDCpp )); } //CapFloorTermVolSurfaceOptionTenorsWorker::~CapFloorTermVolSurfaceOptionTenorsWorker(){ // //} //CapFloorTermVolSurfaceOptionTenorsWorker::Destroy(){ // //} void CapFloorTermVolSurfaceOptionDatesWorker::Execute(){ try{ // convert object IDs into library objects OH_GET_REFERENCE(ObjectIDLibObjPtr, mObjectID, QuantLibAddin::CapFloorTermVolSurface, QuantLib::CapFloorTermVolSurface) // loop on the input parameter and populate the return vector std::vector returnValue = ObjectIDLibObjPtr->optionDates( ); mReturnValue = QuantLibAddin::libraryToVector(returnValue); }catch(const std::exception &e){ mError = e.what(); }catch (...){ mError = "unkown error"; } } void CapFloorTermVolSurfaceOptionDatesWorker::HandleOKCallback(){ Nan::HandleScope scope; Local tmpArray = Nan::New(mReturnValue.size()); for (unsigned int i = 0; i < mReturnValue.size(); i++) { Nan::Set(tmpArray,i,Nan::New(mReturnValue[i])); } Local argv[2] = { Nan::New(mError).ToLocalChecked(), tmpArray }; callback->Call(2, argv); } NAN_METHOD(QuantLibNode::CapFloorTermVolSurfaceOptionDates) { // validate js arguments if (info.Length() == 0 || !info[0]->IsString()) { return Nan::ThrowError("ObjectID is required."); } // convert js argument to c++ type String::Utf8Value strObjectID(info[0]->ToString()); string ObjectIDCpp(strdup(*strObjectID)); // declare callback Nan::Callback *callback = new Nan::Callback(info[1].As()); // launch Async worker Nan::AsyncQueueWorker(new CapFloorTermVolSurfaceOptionDatesWorker( callback ,ObjectIDCpp )); } //CapFloorTermVolSurfaceOptionDatesWorker::~CapFloorTermVolSurfaceOptionDatesWorker(){ // //} //CapFloorTermVolSurfaceOptionDatesWorker::Destroy(){ // //} void CapFloorTermVolSurfaceStrikesWorker::Execute(){ try{ // convert object IDs into library objects OH_GET_REFERENCE(ObjectIDLibObjPtr, mObjectID, QuantLibAddin::CapFloorTermVolSurface, QuantLib::CapFloorTermVolSurface) // loop on the input parameter and populate the return vector mReturnValue = ObjectIDLibObjPtr->strikes( ); }catch(const std::exception &e){ mError = e.what(); }catch (...){ mError = "unkown error"; } } void CapFloorTermVolSurfaceStrikesWorker::HandleOKCallback(){ Nan::HandleScope scope; Local tmpArray = Nan::New(mReturnValue.size()); for (unsigned int i = 0; i < mReturnValue.size(); i++) { Nan::Set(tmpArray,i,Nan::New(mReturnValue[i])); } Local argv[2] = { Nan::New(mError).ToLocalChecked(), tmpArray }; callback->Call(2, argv); } NAN_METHOD(QuantLibNode::CapFloorTermVolSurfaceStrikes) { // validate js arguments if (info.Length() == 0 || !info[0]->IsString()) { return Nan::ThrowError("ObjectID is required."); } // convert js argument to c++ type String::Utf8Value strObjectID(info[0]->ToString()); string ObjectIDCpp(strdup(*strObjectID)); // declare callback Nan::Callback *callback = new Nan::Callback(info[1].As()); // launch Async worker Nan::AsyncQueueWorker(new CapFloorTermVolSurfaceStrikesWorker( callback ,ObjectIDCpp )); } //CapFloorTermVolSurfaceStrikesWorker::~CapFloorTermVolSurfaceStrikesWorker(){ // //} //CapFloorTermVolSurfaceStrikesWorker::Destroy(){ // //}