mirror of
https://github.com/infiniflow/ragflow.git
synced 2026-03-06 08:06:43 +08:00
# RAGFlow Go Implementation Plan 🚀 This repository tracks the progress of porting RAGFlow to Go. We'll implement core features and provide performance comparisons between Python and Go versions. ## Implementation Checklist - [x] User Management APIs - [x] Dataset Management Operations - [x] Retrieval Test - [x] Chat Management Operations - [x] Infinity Go SDK --------- Signed-off-by: Jin Hai <haijin.chn@gmail.com> Co-authored-by: Yingfeng Zhang <yingfeng.zhang@gmail.com>
81 lines
1.9 KiB
C++
81 lines
1.9 KiB
C++
#include "openccxx.h"
|
|
#include "opencc.h"
|
|
#include "utils.h"
|
|
|
|
#include <iostream>
|
|
#include <string>
|
|
|
|
OpenCC::OpenCC(const std::string &home_dir) : od((opencc_t)-1) {
|
|
config_file = mstrcpy(OPENCC_DEFAULT_CONFIG_TRAD_TO_SIMP);
|
|
open(config_file, home_dir.c_str());
|
|
}
|
|
|
|
OpenCC::~OpenCC() {
|
|
if (od != (opencc_t)-1)
|
|
opencc_close(od);
|
|
free(config_file);
|
|
}
|
|
|
|
int OpenCC::open(const char *config_file, const char *home_dir) {
|
|
if (od != (opencc_t)-1)
|
|
opencc_close(od);
|
|
od = opencc_open(config_file, home_dir);
|
|
return (od == (opencc_t)-1) ? (-1) : (0);
|
|
}
|
|
|
|
long OpenCC::convert(const std::string &in, std::string &out, long length) {
|
|
if (od == (opencc_t)-1)
|
|
return -1;
|
|
|
|
if (length == -1)
|
|
length = in.length();
|
|
|
|
char *outbuf = opencc_convert_utf8(od, in.c_str(), length);
|
|
|
|
if (outbuf == (char *)-1)
|
|
return -1;
|
|
|
|
out = outbuf;
|
|
free(outbuf);
|
|
|
|
return length;
|
|
}
|
|
|
|
/**
|
|
* Warning:
|
|
* This method can be used only if wchar_t is encoded in UCS4 on your platform.
|
|
*/
|
|
long OpenCC::convert(const std::wstring &in, std::wstring &out, long length) {
|
|
if (od == (opencc_t)-1)
|
|
return -1;
|
|
|
|
size_t inbuf_left = in.length();
|
|
if (length >= 0 && length < (long)inbuf_left)
|
|
inbuf_left = length;
|
|
|
|
const ucs4_t *inbuf = (const ucs4_t *)in.c_str();
|
|
long count = 0;
|
|
|
|
while (inbuf_left != 0) {
|
|
size_t retval;
|
|
size_t outbuf_left;
|
|
ucs4_t *outbuf;
|
|
|
|
/* occupy space */
|
|
outbuf_left = inbuf_left + 64;
|
|
out.resize(count + outbuf_left);
|
|
outbuf = (ucs4_t *)out.c_str() + count;
|
|
|
|
retval = opencc_convert(od, (ucs4_t **)&inbuf, &inbuf_left, &outbuf, &outbuf_left);
|
|
if (retval == (size_t)-1)
|
|
return -1;
|
|
count += retval;
|
|
}
|
|
|
|
/* set the zero termination and shrink the size */
|
|
out.resize(count + 1);
|
|
out[count] = L'\0';
|
|
|
|
return count;
|
|
}
|