/* Copyright (C) 2016 -2017 Jerry Jin */ #include #include #include "prices.hpp" #include #include #include #include #include #include #include "../loop.hpp" void MidEquivalentWorker::Execute(){ try{ // invoke the utility function mReturnValue = QuantLib::midEquivalent( mBid , mAsk , mLast , mClose ); }catch(const std::exception &e){ mError = e.what(); }catch (...){ mError = "unkown error"; } } void MidEquivalentWorker::HandleOKCallback(){ Nan::HandleScope scope; Local argv[2] = { Nan::New(mError).ToLocalChecked(), Nan::New(mReturnValue) }; callback->Call(2, argv); } NAN_METHOD(QuantLibNode::MidEquivalent) { // validate js arguments if (info.Length() == 0 || !info[0]->IsNumber()) { return Nan::ThrowError("Bid is required."); } if (info.Length() == 1 || !info[1]->IsNumber()) { return Nan::ThrowError("Ask is required."); } if (info.Length() == 2 || !info[2]->IsNumber()) { return Nan::ThrowError("Last is required."); } if (info.Length() == 3 || !info[3]->IsNumber()) { return Nan::ThrowError("Close is required."); } // convert js argument to c++ type double BidCpp = Nan::To(info[0]).FromJust(); // convert js argument to c++ type double AskCpp = Nan::To(info[1]).FromJust(); // convert js argument to c++ type double LastCpp = Nan::To(info[2]).FromJust(); // convert js argument to c++ type double CloseCpp = Nan::To(info[3]).FromJust(); // declare callback Nan::Callback *callback = new Nan::Callback(info[4].As()); // launch Async worker Nan::AsyncQueueWorker(new MidEquivalentWorker( callback ,BidCpp ,AskCpp ,LastCpp ,CloseCpp )); } //MidEquivalentWorker::~MidEquivalentWorker(){ // //} //void MidEquivalentWorker::Destroy(){ // //} void MidSafeWorker::Execute(){ try{ // invoke the utility function mReturnValue = QuantLib::midSafe( mBid , mAsk ); }catch(const std::exception &e){ mError = e.what(); }catch (...){ mError = "unkown error"; } } void MidSafeWorker::HandleOKCallback(){ Nan::HandleScope scope; Local argv[2] = { Nan::New(mError).ToLocalChecked(), Nan::New(mReturnValue) }; callback->Call(2, argv); } NAN_METHOD(QuantLibNode::MidSafe) { // validate js arguments if (info.Length() == 0 || !info[0]->IsNumber()) { return Nan::ThrowError("Bid is required."); } if (info.Length() == 1 || !info[1]->IsNumber()) { return Nan::ThrowError("Ask is required."); } // convert js argument to c++ type double BidCpp = Nan::To(info[0]).FromJust(); // convert js argument to c++ type double AskCpp = Nan::To(info[1]).FromJust(); // declare callback Nan::Callback *callback = new Nan::Callback(info[2].As()); // launch Async worker Nan::AsyncQueueWorker(new MidSafeWorker( callback ,BidCpp ,AskCpp )); } //MidSafeWorker::~MidSafeWorker(){ // //} //void MidSafeWorker::Destroy(){ // //}