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 <string>
6 #include <memory>
7 #include <mutex>
8 
9 #include <nx/sdk/helpers/i_ref_countable_registry.h>
10 
11 namespace nx {
12 namespace sdk {
13 
19 {
20 public:
21  virtual ~ILibContext() = default;
22 
23  virtual void setName(const char* name) = 0;
24  virtual void setRefCountableRegistry(IRefCountableRegistry* refCountableRegistry) = 0;
25 };
26 
33 class LibContext final: public ILibContext
34 {
35 public:
40  virtual void setName(const char* name) override;
41 
48 
49  const std::string& name() const { return m_name; }
50 
52  IRefCountableRegistry* refCountableRegistry() const { return m_refCountableRegistry.get(); }
53 
54 private:
55  static constexpr const char *kDefaultName = "unnamed_lib_context";
56  std::string m_name = kDefaultName;
57  std::unique_ptr<IRefCountableRegistry> m_refCountableRegistry;
58  std::mutex m_mutex;
59 };
60 
61 //-------------------------------------------------------------------------------------------------
62 
67 LibContext& libContext();
68 
69 #if !defined(NX_SDK_API)
70  #if !defined(NX_PLUGIN_API)
71  #error "Either NX_SDK_API or NX_PLUGIN_API macro should be defined to export a function."
72  #endif
73  #define NX_SDK_API NX_PLUGIN_API
74 #endif
75 
83 extern "C" NX_SDK_API ILibContext* nxLibContext();
84 static constexpr const char* kNxLibContextFuncName = "nxLibContext";
85 typedef ILibContext* (*NxLibContextFunc)();
86 
99 extern "C" NX_SDK_API const char* nxSdkVersion();
100 static constexpr const char* kNxSdkVersionFuncName = "nxSdkVersion";
101 typedef const char* (*NxSdkVersionFunc)();
102 
103 } // namespace sdk
104 } // namespace nx
virtual void setRefCountableRegistry(IRefCountableRegistry *refCountableRegistry) override
Definition: lib_context.cpp:31
Definition: i_ref_countable_registry.h:24
virtual void setName(const char *name) override
Definition: lib_context.cpp:11
Definition: apple_utils.h:6
Definition: lib_context.h:33
IRefCountableRegistry * refCountableRegistry() const
Definition: lib_context.h:52
Definition: lib_context.h:18