| #include "Moses2Wrapper.h" |
| #include <iostream> |
| #include <fstream> |
| #include <cassert> |
| #include <string.h> |
|
|
|
|
| |
| #if defined _WIN32 |
| #define IMPORT __declspec(dllimport) |
| #define EXPORT __declspec(dllexport) |
| #else |
| #define __stdcall |
| #if __GNUC__ >= 4 |
| #define IMPORT __attribute__ ((visibility ("default"))) |
| #define EXPORT __attribute__ ((visibility ("default"))) |
| #else |
| #define IMPORT |
| #define EXPORT |
| #endif |
| #endif |
|
|
|
|
| using namespace std; |
| using namespace Moses2; |
|
|
| extern "C" EXPORT MosesApiErrorCode __stdcall GetMosesSystem(const char* filePath, Moses2::Moses2Wrapper * *pObject) { |
| if (*pObject == NULL) { |
| *pObject = new Moses2::Moses2Wrapper(filePath); |
| return MS_API_OK; |
| } |
| else { |
| return MS_API_E_FAILURE; |
| } |
| } |
|
|
| extern "C" EXPORT MosesApiErrorCode __stdcall Translate(Moses2::Moses2Wrapper * pObject, long id, bool nbest, const char* input, char** output) { |
| if (pObject != NULL) |
| { |
| std::string tr = pObject->Translate(input, id, nbest); |
| *output = Moses2Wrapper::CopyString(tr.c_str()); |
| return MS_API_OK; |
| } |
| else { |
| return MS_API_E_FAILURE; |
| } |
| } |
|
|
| extern "C" EXPORT MosesApiErrorCode __stdcall FreeMemory(char* output) { |
| if (output != nullptr) { |
| Moses2Wrapper::Free(output); |
| return MS_API_OK; |
| } |
| else { |
| return MS_API_E_FAILURE; |
| } |
| } |
|
|
| extern "C" EXPORT MosesApiErrorCode __stdcall ReleaseSystem(Moses2::Moses2Wrapper **pObject) { |
| if (*pObject != NULL) |
| { |
| delete* pObject; |
| *pObject = NULL; |
| return MS_API_OK; |
| } |
| else { |
| return MS_API_E_FAILURE; |
| } |
| } |
|
|
| extern "C" EXPORT MosesApiErrorCode __stdcall EngineVersion() { |
| |
| std::cout << "0.0.1" << std::endl; |
| return MS_API_OK; |
| } |
|
|
| int main(int argc, char** argv) |
| { |
| assert(argc >= 2); |
| cerr << "Starting" << endl; |
| string filePath(argv[1]); |
| Moses2::Moses2Wrapper *pObject = nullptr; |
| MosesApiErrorCode ret = GetMosesSystem(filePath.c_str(), &pObject); |
| assert(ret == MS_API_OK); |
|
|
| ifstream inFile; |
| inFile.open(argv[2]); |
|
|
| long id = 44; |
| string input; |
| while (std::getline(inFile, input)) |
| { |
| char* output; |
| ret = Translate(pObject, id, true, input.c_str(), &output); |
| assert(ret == MS_API_OK); |
| cerr << output << flush; |
|
|
| ret = FreeMemory(output); |
| assert(ret == MS_API_OK); |
|
|
| ++id; |
| } |
|
|
| ret = ReleaseSystem(&pObject); |
| assert(ret == MS_API_OK); |
|
|
| cerr << "Finished" << endl; |
| } |