Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 3c52f8539a | |||
| 94101c7d2c |
@@ -353,6 +353,9 @@ if(ENABLE_CONAN)
|
|||||||
KEEP_RPATHS
|
KEEP_RPATHS
|
||||||
NO_OUTPUT_DIRS
|
NO_OUTPUT_DIRS
|
||||||
OPTIONS boost:without_stacktrace=True # Apple Silicon cross-compilation fails without it
|
OPTIONS boost:without_stacktrace=True # Apple Silicon cross-compilation fails without it
|
||||||
|
onetbb:tbbmalloc=False
|
||||||
|
onetbb:tbbproxy=False
|
||||||
|
onetbb:tbbbind=False
|
||||||
BUILD missing
|
BUILD missing
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -11,85 +11,57 @@ namespace node_osrm
|
|||||||
|
|
||||||
struct V8Renderer
|
struct V8Renderer
|
||||||
{
|
{
|
||||||
explicit V8Renderer(const Napi::Env &env) : env(env) {}
|
explicit V8Renderer(const Napi::Env &env, Napi::Value &out) : env(env), out(out) {}
|
||||||
|
|
||||||
Napi::Value operator()(const osrm::json::String &string) const
|
void operator()(const osrm::json::String &string) const
|
||||||
{
|
{
|
||||||
return Napi::String::New(env, string.value);
|
out = Napi::String::New(env, string.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
Napi::Value operator()(const osrm::json::Number &number) const
|
void operator()(const osrm::json::Number &number) const
|
||||||
{
|
{
|
||||||
return Napi::Number::New(env, number.value);
|
out = Napi::Number::New(env, number.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
Napi::Value operator()(const osrm::json::Object &object) const
|
void operator()(const osrm::json::Object &object) const
|
||||||
{
|
{
|
||||||
Napi::Object obj = Napi::Object::New(env);
|
Napi::Object obj = Napi::Object::New(env);
|
||||||
for (const auto &keyValue : object.values)
|
for (const auto &keyValue : object.values)
|
||||||
{
|
{
|
||||||
obj.Set(keyValue.first, visit(*this, keyValue.second));
|
Napi::Value child;
|
||||||
|
std::visit(V8Renderer(env, child), keyValue.second);
|
||||||
|
obj.Set(keyValue.first, child);
|
||||||
}
|
}
|
||||||
return obj;
|
out = obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
Napi::Value operator()(const osrm::json::Array &array) const
|
void operator()(const osrm::json::Array &array) const
|
||||||
{
|
{
|
||||||
Napi::Array a = Napi::Array::New(env, array.values.size());
|
Napi::Array a = Napi::Array::New(env, array.values.size());
|
||||||
for (auto i = 0u; i < array.values.size(); ++i)
|
for (auto i = 0u; i < array.values.size(); ++i)
|
||||||
{
|
{
|
||||||
a.Set(i, visit(*this, array.values[i]));
|
Napi::Value child;
|
||||||
|
std::visit(V8Renderer(env, child), array.values[i]);
|
||||||
|
a.Set(i, child);
|
||||||
}
|
}
|
||||||
return a;
|
out = a;
|
||||||
}
|
}
|
||||||
|
|
||||||
Napi::Value operator()(const osrm::json::True &) const { return Napi::Boolean::New(env, true); }
|
void operator()(const osrm::json::True &) const { out = Napi::Boolean::New(env, true); }
|
||||||
|
|
||||||
Napi::Value operator()(const osrm::json::False &) const
|
void operator()(const osrm::json::False &) const { out = Napi::Boolean::New(env, false); }
|
||||||
{
|
|
||||||
return Napi::Boolean::New(env, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
Napi::Value operator()(const osrm::json::Null &) const { return env.Null(); }
|
void operator()(const osrm::json::Null &) const { out = env.Null(); }
|
||||||
|
|
||||||
private:
|
|
||||||
Napi::Value visit(const V8Renderer &renderer, const osrm::json::Value &value) const
|
|
||||||
{
|
|
||||||
switch (value.index())
|
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
return renderer(std::get<osrm::json::String>(value));
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
return renderer(std::get<osrm::json::Number>(value));
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
return renderer(std::get<osrm::json::Object>(value));
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
return renderer(std::get<osrm::json::Array>(value));
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
return renderer(std::get<osrm::json::True>(value));
|
|
||||||
break;
|
|
||||||
case 5:
|
|
||||||
return renderer(std::get<osrm::json::False>(value));
|
|
||||||
break;
|
|
||||||
case 6:
|
|
||||||
return renderer(std::get<osrm::json::Null>(value));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return env.Null();
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const Napi::Env &env;
|
const Napi::Env &env;
|
||||||
|
Napi::Value &out;
|
||||||
};
|
};
|
||||||
|
|
||||||
inline void renderToV8(const Napi::Env &env, Napi::Value &out, const osrm::json::Object &object)
|
inline void renderToV8(const Napi::Env &env, Napi::Value &out, const osrm::json::Object &object)
|
||||||
{
|
{
|
||||||
V8Renderer renderer(env);
|
V8Renderer renderer(env, out);
|
||||||
out = renderer(object);
|
renderer(object);
|
||||||
}
|
}
|
||||||
} // namespace node_osrm
|
} // namespace node_osrm
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user