diff --git a/examples/cpp/cxx_test.cc b/examples/cpp/cxx_test.cc index e26c8f0..5e1f4ff 100644 --- a/examples/cpp/cxx_test.cc +++ b/examples/cpp/cxx_test.cc @@ -36,6 +36,23 @@ int main() << "returned: " << hp->get("x.y.z", "false") << std::endl; + // ======= opt api test ======= + + PUTPARAM(xacc.eager, false); + PUTPARAM(xacc.lazy.device, "xla"); + + std::string device_type = GETPARAM(xacc.lazy.device, "xpu"); + std::cout << "\n:: (opt api) test put parameter" << std::endl + << "expected: xla" << std::endl + << "returned: " << device_type << std::endl + << "expected: 0" << std::endl + << "returned: " << GETPARAM(xacc.eager, true) << std::endl; + + std::cout << "\n:: (opt api) test undefined" << std::endl + << "expected: 100" << std::endl + << "returned: " << GETPARAM(xacc.dynamo.time, 100) << std::endl; + std::cout << "in main" << std::endl; + return 0; } \ No newline at end of file diff --git a/hyperparameter/hyperparameter.h b/hyperparameter/hyperparameter.h index 26a6cbe..71dd61b 100644 --- a/hyperparameter/hyperparameter.h +++ b/hyperparameter/hyperparameter.h @@ -32,7 +32,7 @@ namespace hyperparameter { return finalize((len >= 32 ? h32bytes(p, len, seed) : seed + PRIME5) + len, p + (len & ~0x1F), len & 0x1F); } - + private: static constexpr uint64_t PRIME1 = 11400714785074694791ULL; static constexpr uint64_t PRIME2 = 14029467366897019727ULL; @@ -191,6 +191,21 @@ namespace hyperparameter { return storage_put_str(_storage, key, val); } + + std::shared_ptr get_hp() { + static std::shared_ptr hp; + if (!hp) { + hp = hyperparameter::create_shared(); + } + return hp; + } } +#define GETHP hyperparameter::get_hp() + +// Implicit create hyperparameter object +#define GETPARAM(p, default_val) \ + (GETHP->get(([](){ constexpr uint64_t x = hyperparameter::xxhash(#p,sizeof(#p)-1); return x;})(), default_val)) +#define PUTPARAM(p, default_val) (GETHP->put(#p, default_val)) + #endif \ No newline at end of file