[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/Devisjs/devisPattern/master/src/devisPattern.cpp [Back]  [Original]

/* Copyright (c) 2016 Devis, MIT License */
#include "node.h"
#include "devisPattern.hpp"

//TStrStrMap devisPattern::devisPattern::tMap;

namespace devisPattern {

    using v8::Context;
    using v8::Function;
    using v8::FunctionCallbackInfo;
    using v8::FunctionTemplate;
    using v8::Isolate;
    using v8::Local;
    using v8::Number;
    using v8::Object;
    using v8::Persistent;
    using v8::String;
    using v8::Value;

    Persistent devisPattern::constructor;

    devisPattern::devisPattern(){
    }

    devisPattern::~devisPattern() {
    }

    void devisPattern::Init(Local exports) {
         Isolate* isolate = exports->GetIsolate();

        Local tpl = FunctionTemplate::New(isolate, New);
        tpl->SetClassName(String::NewFromUtf8(isolate, "devisPattern"));
        tpl->InstanceTemplate()->SetInternalFieldCount(1);

        NODE_SET_PROTOTYPE_METHOD(tpl, "add", add);
        NODE_SET_PROTOTYPE_METHOD(tpl, "list", list);
        NODE_SET_PROTOTYPE_METHOD(tpl, "find", find);

        constructor.Reset(isolate, tpl->GetFunction());
        exports->Set(String::NewFromUtf8(isolate, "devisPattern"),
                     tpl->GetFunction());
    }

    void devisPattern::New(const FunctionCallbackInfo& args) {
        Isolate* isolate = args.GetIsolate();

        if (args.IsConstructCall()) {
            devisPattern* obj = new devisPattern();
            obj->Wrap(args.This());
            args.GetReturnValue().Set(args.This());
        } else {
            const int argc = 1;
            Local argv[argc] = { args[0] };
            Local cons = Local::New(isolate, constructor);
            Local context = isolate->GetCurrentContext();
            Local instance =
            cons->NewInstance(context, argc, argv).ToLocalChecked();
            args.GetReturnValue().Set(instance);
        }
    }

    void devisPattern::NewInstance(const FunctionCallbackInfo& args) {
        Isolate* isolate = args.GetIsolate();

        const unsigned argc = 1;
        Local argv[argc] = { args[0] };
        Local cons = Local::New(isolate, constructor);
        Local context = isolate->GetCurrentContext();
        Local instance =
        cons->NewInstance(context, argc, argv).ToLocalChecked();

        args.GetReturnValue().Set(instance);
    }

    TStrStrMap::const_iterator FindPath(const TStrStrMap& map, const string& path) {
      TStrStrMap::const_iterator i = map.find(path);
      //std::this_thread::sleep_for(std::chrono::seconds(1));
                     return i;
    }

    string liste(TStrStrMap& tMap)
    {
        string res="[";
        for(it_type iterator = tMap.begin(); iterator != tMap.end(); iterator++) {
            if(iterator!=tMap.begin()) res+=",";
            res+=iterator->first;
        }
        res+="]";
        return res;
    }

    int TFind(const TStrStrMap& map, const string& path) {
        auto i = FindPath(map, path);
        if (i != map.end()) return i->second;

        return -1 ;
    }

    void devisPattern::find(const v8::FunctionCallbackInfo& args)
    {
        int data;
        v8::String::Utf8Value _path(args[0]->ToString());
        auto ptr = Unwrap(args.Holder());
        data=TFind(ptr->tMap, *_path);
        args.GetReturnValue().Set(data);
    }

    void devisPattern::list(const v8::FunctionCallbackInfo& args)
    {
        Isolate* isolate=Isolate::GetCurrent();
        auto ptr = Unwrap(args.Holder());
        args.GetReturnValue().Set(String::NewFromUtf8(isolate, liste(ptr->tMap).c_str()));
    }

    void devisPattern::add(const FunctionCallbackInfo& args) {
        auto id=args[1]->Int32Value();
        auto ptr = Unwrap(args.Holder());
        v8::String::Utf8Value _path(args[0]->ToString());
        ptr->tMap.insert(TStrStrPair(*_path,id));
    }

}

Web Proxy Viewer  |  New URL  |  Original Page