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  std::string m_name = "unnamed_lib_context";
56  std::unique_ptr<IRefCountableRegistry> m_refCountableRegistry;
57  std::mutex m_mutex;
58 };
59 
60 //-------------------------------------------------------------------------------------------------
61 
66 LibContext& libContext();
67 
68 static constexpr const char* kNxLibContextFuncName = "nxLibContext";
69 typedef ILibContext* (*NxLibContextFunc)();
70 
71 #if !defined(NX_SDK_API)
72  #if !defined(NX_PLUGIN_API)
73  #error "Either NX_SDK_API or NX_PLUGIN_API macro should be defined to export a function."
74  #endif
75  #define NX_SDK_API NX_PLUGIN_API
76 #endif
77 
85 extern "C" NX_SDK_API ILibContext* nxLibContext();
86 
87 } // namespace sdk
88 } // namespace nx
virtual void setRefCountableRegistry(IRefCountableRegistry *refCountableRegistry) override
Definition: lib_context.cpp:19
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