24 #pragma message "C++ support is required for extras module" 28 #ifndef MCR_EXTRAS_REGISTRY_H_ 29 #define MCR_EXTRAS_REGISTRY_H_ 31 #include "mcr/extras/base_cpp.h" 36 class RegistryPrivate;
39 friend class RegistryPrivate;
47 inline mcr_IRegistry &operator *()
51 inline const mcr_IRegistry &operator *()
const 57 return mcr::offset<Registry>(originPt);
59 static inline const Registry *
offset(
const mcr_IRegistry *originPt)
61 return mcr::offset<Registry>(originPt);
70 virtual const char *name(
struct mcr_Interface *ifacePt)
const;
71 virtual struct mcr_Interface *interface(
const char *name)
const;
72 virtual size_t setName(
struct mcr_Interface *ifacePt,
const char *name);
73 virtual void addName(
struct mcr_Interface *ifacePt,
const char *name);
74 virtual void addNames(
struct mcr_Interface *ifacePt,
const char *
const *addNames,
size_t addNamesCount);
76 virtual void removeName(
const char *removeName);
77 virtual size_t count()
const;
81 virtual void unregister();
85 RegistryPrivate *_private;
87 static void deinit(
struct mcr_IRegistry *iregPt)
90 offset(iregPt)->unregister();
92 static size_t id(
const struct mcr_IRegistry *iregPt,
struct mcr_Interface *ifacePt)
94 return iregPt ?
offset(iregPt)->id(ifacePt) : (size_t)~0;
96 static struct mcr_Interface *from_id(
const struct mcr_IRegistry *iregPt,
size_t id)
98 return iregPt ?
offset(iregPt)->interface(
id) :
nullptr;
100 static const char *name(
const struct mcr_IRegistry *iregPt,
struct mcr_Interface *ifacePt)
102 return iregPt ?
offset(iregPt)->name(ifacePt) :
nullptr;
104 static struct mcr_Interface *from_name(
const struct mcr_IRegistry *iregPt,
const char *name)
106 return iregPt ?
offset(iregPt)->interface(name) :
nullptr;
108 static size_t set_name(
struct mcr_IRegistry *iregPt,
struct mcr_Interface *ifacePt,
const char *name)
116 return offset(iregPt)->setName(ifacePt, name);
123 static int add_names(
struct mcr_IRegistry *iregPt,
struct mcr_Interface *ifacePt,
const char *
const*addNames,
size_t addNamesCount)
129 offset(iregPt)->addNames(ifacePt, addNames, addNamesCount);
135 static void remove(
struct mcr_IRegistry *iregPt,
struct mcr_Interface *ifacePt)
138 offset(iregPt)->remove(ifacePt);
140 static void remove_name(
struct mcr_IRegistry *iregPt,
const char *removeName)
143 offset(iregPt)->removeName(removeName);
145 static size_t count(
const struct mcr_IRegistry *iregPt)
147 return iregPt ?
offset(iregPt)->count() : 0;
149 static void trim(
struct mcr_IRegistry *iregPt)
154 static void clear(
struct mcr_IRegistry *iregPt)
Raise a compiler error. Usage: #include "mcr/err.h"
Libmacro, by Jonathan Pelletier, New Paradigm Software. Alpha version.
#define mcr_dassert(expression)