载入中...
搜索中...
未找到
SquirrelBinding.h
浏览该文件的文档.
1#pragma once
2
13#include "common/Export.h"
14#include "common/Result.h"
15#include "common/Value.h"
16
17#include <squirrel.h>
18#include <simplesquirrel/simplesquirrel.hpp>
19
20#include <cstddef>
21#include <functional>
22#include <string>
23#include <utility>
24
25namespace eve::script {
26
36 std::size_t maxDepth = 64;
37 std::size_t maxElements = 100000;
38 std::string source = "squirrel.binding";
39};
40
51 const SquirrelValueOptions& options = {});
52
59[[nodiscard]] EVENGINE_API_FOUNDATION Result<Value> valueFromSquirrel(const ssq::Object& object,
60 const SquirrelValueOptions& options = {});
61
70[[nodiscard]] EVENGINE_API_FOUNDATION Result<void> pushValue(HSQUIRRELVM vm, const Value& value,
71 const SquirrelValueOptions& options = {});
72
74[[nodiscard]] EVENGINE_API_FOUNDATION ssq::Table projectDiagnostic(HSQUIRRELVM vm, const Diagnostic& diagnostic);
75
77[[nodiscard]] EVENGINE_API_FOUNDATION ssq::Table projectStatus(HSQUIRRELVM vm, const Status& status);
78
87[[nodiscard]] EVENGINE_API ssq::Table projectStatusResult(HSQUIRRELVM vm, const Status& status);
88
96[[nodiscard]] EVENGINE_API_FOUNDATION ssq::Table projectStatusResult(HSQUIRRELVM vm, const Status& status,
97 const Value& value);
98
107[[nodiscard]] EVENGINE_API_FOUNDATION ssq::Table projectStatusResult(HSQUIRRELVM vm, const Status& status,
108 ssq::Object value);
109
117EVENGINE_API_FOUNDATION void markResultHasValue(ssq::Table& result);
118
130template <class T, class Projector>
132[[nodiscard]] ssq::Table projectResult(HSQUIRRELVM vm, Result<T>&& result, Projector&& projector) {
133 if (!result.ok()) return projectStatusResult(vm, result.status());
134
135 const Status status = result.status();
136 T payload = std::move(result).takeValue();
138 return projectStatusResult(vm, status, std::invoke(std::forward<Projector>(projector), std::move(payload)));
139}
140
142[[nodiscard]] EVENGINE_API_FOUNDATION ssq::Table projectResult(HSQUIRRELVM vm, Result<void>&& result);
143
150[[nodiscard]] EVENGINE_API_FOUNDATION bool ignoreResult(const ssq::Object& result, const std::string& reason);
151
158EVENGINE_API_FOUNDATION void exposeResultBindings(ssq::Table& eveTable);
159
160} // namespace eve::script
double value
Value::Object payload
struct SQVM * HSQUIRRELVM
HSQUIRRELVM vm
Definition ECS.cpp:20
#define EVENGINE_API_FOUNDATION_INLINE
仅供"只有内联成员"的类型使用的组宏:拥有者 dllexport,消费方不导入。
Definition Export.h:170
#define EVENGINE_API_FOUNDATION
每个链接组(link group)各自的导出宏。
Definition Export.h:106
#define EVENGINE_API
宿主(eve / libmain)导出宏;插件从进程导入同一批符号。
Definition Export.h:31
wgpu::PopErrorScopeStatus status
Move-only, checked operation results for the common layer.
const SquirrelValueOptions & options
uint32_t index
const UnitySourceAsset & source
Owning, renderer-independent dynamic values.
Move-only operation result carrying either a value or Status.
Definition Result.h:155
Structured status and zero or more diagnostics for an operation.
Definition Status.h:68
bool ignoreResult(const ssq::Object &result, const std::string &reason)
Mark a projected Result table as intentionally ignored by script.
ssq::Table projectDiagnostic(HSQUIRRELVM vm, const Diagnostic &diagnostic)
Project one Diagnostic using the common script table schema.
Result< void > pushValue(HSQUIRRELVM vm, const Value &value, const SquirrelValueOptions &options)
Push a canonical Value into the active Squirrel VM.
void markResultHasValue(ssq::Table &result)
Declare that a projected table received a payload the caller attached itself.
ssq::Table projectStatus(HSQUIRRELVM vm, const Status &status)
Project one Status using the common script table schema.
ssq::Table projectStatusResult(HSQUIRRELVM vm, const Status &status)
Project a checked native status that carries no payload.
ssq::Table projectResult(HSQUIRRELVM vm, Result< void > &&result)
Consume and project a void native Result using the common schema.
void exposeResultBindings(ssq::Table &eveTable)
Expose the common script helpers under eve.result.
Result< Value > valueFromSquirrel(HSQUIRRELVM vm, SQInteger index, const SquirrelValueOptions &options)
Convert one Squirrel value into the canonical owning Value tree.
Limits and provenance used by the Squirrel ↔ Value adapter.