nx_metadata_sdk  1.0
Metadata SDK
lib_context.h
1 // Copyright 2018-present Network Optix, Inc. Licensed under MPL 2.0: www.mozilla.org/MPL/2.0/
2 
3 #pragma once
4 
5 #include <map>
6 #include <memory>
7 #include <mutex>
8 #include <string>
9 
10 #include <nx/sdk/i_string_map.h>
11 
12 #include <nx/sdk/helpers/i_ref_countable_registry.h>
13 
14 namespace nx::sdk {
15 
23 {
24 public:
25  virtual ~ILibContext() = default;
26 
27  virtual void setName(const char* name) = 0;
28  virtual void setRefCountableRegistry(IRefCountableRegistry* refCountableRegistry) = 0;
29 };
30 
37 class LibContext final: public ILibContext
38 {
39 public:
44  virtual void setName(const char* name) override;
45 
52 
53  const std::string& name() const { return m_name; }
54 
56  IRefCountableRegistry* refCountableRegistry() const { return m_refCountableRegistry.get(); }
57 
58 private:
59  static constexpr const char *kDefaultName = "unnamed_lib_context";
60  std::string m_name = kDefaultName;
61  std::unique_ptr<IRefCountableRegistry> m_refCountableRegistry;
62  std::mutex m_mutex;
63 };
64 
65 //-------------------------------------------------------------------------------------------------
66 
71 LibContext& libContext();
72 
77 const char* sdkVersion();
78 
83 std::map<std::string, std::string>& unitTestOptions();
84 
85 #if !defined(NX_SDK_API)
86  #if !defined(NX_PLUGIN_API)
87  #error "Either NX_SDK_API or NX_PLUGIN_API macro should be defined to export a function."
88  #endif
89  #define NX_SDK_API NX_PLUGIN_API
90 #endif
91 
99 extern "C" NX_SDK_API ILibContext* nxLibContext();
100 static constexpr const char* kNxLibContextFuncName = "nxLibContext";
101 typedef ILibContext* (*NxLibContextFunc)();
102 
117 extern "C" NX_SDK_API const char* nxSdkVersion();
118 static constexpr const char* kNxSdkVersionFuncName = "nxSdkVersion";
119 typedef const char* (*NxSdkVersionFunc)();
120 
132 extern "C" NX_SDK_API void nxSetUnitTestOptions(const IStringMap* options);
133 static constexpr const char* kNxSetUnitTestOptionsFuncName = "nxSetUnitTestOptions";
134 typedef void (*NxSetUnitTestOptionsFunc)(const IStringMap* options);
135 
136 } // namespace nx::sdk
virtual void setRefCountableRegistry(IRefCountableRegistry *refCountableRegistry) override
Definition: lib_context.cpp:30
Definition: i_ref_countable_registry.h:25
virtual void setName(const char *name) override
Definition: lib_context.cpp:10
Definition: device_agent.h:13
Definition: lib_context.h:37
IRefCountableRegistry * refCountableRegistry() const
Definition: lib_context.h:56
Definition: lib_context.h:22