仓库结构: edge/ 设备端(原根目录设备端代码整体移入) control/ 管理端(清理后) docs/ 文档(PRD 移入 design/) README.md 根导航(新增) 清理: - control/.brainstorm 临时草稿删除 - control 根级重复文档(API表/PRD_04)并入 docs/design/ - control/plan.md -> docs/implementation/control-plan.md - control/safesightd-linux-arm64 二进制取消版本控制(.gitignore) - edge/transform 模型转换产物归入 models/,onnx/pt 大源文件取消跟踪(.gitignore) - Readme.md(PRD) -> docs/design/PRD_Product_v1.2.md(避开 README 大小写冲突) 更新: - 根 README.md 导航、docs/README.md 文档索引 - deployment.md/检查表路径加 edge/ 前缀 - .gitignore 重写(edge/control 分区规则)
81 lines
2.1 KiB
C++
81 lines
2.1 KiB
C++
#pragma once
|
|
|
|
#include <sstream>
|
|
#include <string>
|
|
#include <string_view>
|
|
|
|
#include "utils/simple_json.h"
|
|
|
|
namespace rk3588 {
|
|
|
|
inline std::string JsonEscapeString(std::string_view s) {
|
|
std::string out;
|
|
out.reserve(s.size() + 8);
|
|
for (char c : s) {
|
|
switch (c) {
|
|
case '\\': out += "\\\\"; break;
|
|
case '"': out += "\\\""; break;
|
|
case '\n': out += "\\n"; break;
|
|
case '\r': out += "\\r"; break;
|
|
case '\t': out += "\\t"; break;
|
|
default:
|
|
if (static_cast<unsigned char>(c) < 0x20) {
|
|
out += "?";
|
|
} else {
|
|
out.push_back(c);
|
|
}
|
|
}
|
|
}
|
|
return out;
|
|
}
|
|
|
|
inline void StringifySimpleJsonTo(const SimpleJson& v, std::ostringstream& oss);
|
|
|
|
inline void StringifyArrayTo(const SimpleJson::Array& arr, std::ostringstream& oss) {
|
|
oss << '[';
|
|
for (size_t i = 0; i < arr.size(); ++i) {
|
|
if (i) oss << ',';
|
|
StringifySimpleJsonTo(arr[i], oss);
|
|
}
|
|
oss << ']';
|
|
}
|
|
|
|
inline void StringifyObjectTo(const SimpleJson::Object& obj, std::ostringstream& oss) {
|
|
oss << '{';
|
|
bool first = true;
|
|
for (const auto& kv : obj) {
|
|
if (!first) oss << ',';
|
|
first = false;
|
|
oss << '"' << JsonEscapeString(kv.first) << '"' << ':';
|
|
StringifySimpleJsonTo(kv.second, oss);
|
|
}
|
|
oss << '}';
|
|
}
|
|
|
|
inline void StringifySimpleJsonTo(const SimpleJson& v, std::ostringstream& oss) {
|
|
if (v.IsNull()) {
|
|
oss << "null";
|
|
} else if (v.IsBool()) {
|
|
oss << (v.AsBool(false) ? "true" : "false");
|
|
} else if (v.IsNumber()) {
|
|
// Keep simple.
|
|
oss << v.AsNumber(0.0);
|
|
} else if (v.IsString()) {
|
|
oss << '"' << JsonEscapeString(v.AsString("")) << '"';
|
|
} else if (v.IsArray()) {
|
|
StringifyArrayTo(v.AsArray(), oss);
|
|
} else if (v.IsObject()) {
|
|
StringifyObjectTo(v.AsObject(), oss);
|
|
} else {
|
|
oss << "null";
|
|
}
|
|
}
|
|
|
|
inline std::string StringifySimpleJson(const SimpleJson& v) {
|
|
std::ostringstream oss;
|
|
StringifySimpleJsonTo(v, oss);
|
|
return oss.str();
|
|
}
|
|
|
|
} // namespace rk3588
|