Как вернуть адрес памяти графа каталогов, чтобы использовать его при последующей проверке элемента? - PullRequest
0 голосов
/ 28 января 2019

Я хочу использовать dawg в своем проекте javascript.Я конвертировал код Dawg здесь в веб-сборку с использованием Emscripten.

Этот проект предоставляет библиотеку dawgdic для построения и доступа к словарям, реализованным с помощью направленных ациклических графов слов (DAWG).

Dawg создается путем минимизации дерева как детерминированного конечного автомата (DFA),и, таким образом, у dawg есть преимущество в использовании памяти

Я взял ссылку на данную ссылку для конвертации в Webassemly. здесь

The below code store items in dawg graph format.
    #include <cassert>
    #include <iostream>
    #include <string>
    #include <dawgdic/dawg-builder.h>
    #include <dawgdic/dictionary-builder.h>
    #include <emscripten/emscripten.h>
    using namespace std;

    #ifdef __cplusplus
    extern "C" {
    #endif
    int EMSCRIPTEN_KEEPALIVE addToDawg(void(*f)(dawgdic::Dawg *c)) {
         dawgdic::DawgBuilder dawg_builder;
  assert(dawg_builder.Insert("apple"));
  assert(dawg_builder.Insert("cherry"));
  assert(!dawg_builder.Insert("banana"));
  assert(dawg_builder.Insert("durian"));
  dawgdic::Dawg dawg;
  dawg_builder.Finish(&dawg);
        return 0;
      }

    #ifdef __cplusplus
    }
    #endif

    Here is link to see output: [here](https://demophp.digi-corp.com/nitin/dawg-builder-test.html)

    How can I return address of memory segment where dawg is stored to Javascript such that later I can call another method to check if item exist in dawg graph? like dawg_dic.Contains("apple").

1 Ответ

0 голосов
/ 29 января 2019

Звучит так, как будто вы хотите создать dawgdic::Dawg в куче (используя new), а затем вернуть его адрес.Со стороны JS это возвращаемое значение будет просто числом, а затем вы можете передать его функции, которая принимает dawgdic::Dawq*.

Так что ваш API может выглядеть так:

dawgdic::Dawg* createDawg() EMSCRIPTEN_KEEPALIVE;
void addToDawg(dawgdic::Dawg *c) EMSCRIPTEN_KEEPALIVE;
...