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 
21 {
22 public:
23  virtual ~ILibContext() = default;
24 
25  virtual void setName(const char* name) = 0;
26  virtual void setRefCountableRegistry(IRefCountableRegistry* refCountableRegistry) = 0;
27 };
28 
35 class LibContext final: public ILibContext
36 {
37 public:
42  virtual void setName(const char* name) override;
43 
50 
51  const std::string& name() const { return m_name; }
52 
54  IRefCountableRegistry* refCountableRegistry() const { return m_refCountableRegistry.get(); }
55 
56 private:
57  static constexpr const char *kDefaultName = "unnamed_lib_context";
58  std::string m_name = kDefaultName;
59  std::unique_ptr<IRefCountableRegistry> m_refCountableRegistry;
60  std::mutex m_mutex;
61 };
62 
63 //-------------------------------------------------------------------------------------------------
64 
69 LibContext& libContext();
70 
75 const char* sdkVersion();
76 
77 #if !defined(NX_SDK_API)
78  #if !defined(NX_PLUGIN_API)
79  #error "Either NX_SDK_API or NX_PLUGIN_API macro should be defined to export a function."
80  #endif
81  #define NX_SDK_API NX_PLUGIN_API
82 #endif
83 
91 extern "C" NX_SDK_API ILibContext* nxLibContext();
92 static constexpr const char* kNxLibContextFuncName = "nxLibContext";
93 typedef ILibContext* (*NxLibContextFunc)();
94 
109 extern "C" NX_SDK_API const char* nxSdkVersion();
110 static constexpr const char* kNxSdkVersionFuncName = "nxSdkVersion";
111 typedef const char* (*NxSdkVersionFunc)();
112 
113 } // namespace sdk
114 } // namespace nx
virtual void setRefCountableRegistry(IRefCountableRegistry *refCountableRegistry) override
Definition: lib_context.cpp:31
Definition: i_ref_countable_registry.h:26
virtual void setName(const char *name) override
Definition: lib_context.cpp:11
Definition: apple_utils.h:6
Definition: lib_context.h:35
IRefCountableRegistry * refCountableRegistry() const
Definition: lib_context.h:54
Definition: lib_context.h:20