git-svn-id: svn://db.shs.com.ru/pip@775 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5

This commit is contained in:
2019-04-08 07:52:48 +00:00
parent 1307b25994
commit 36cd98365a
3 changed files with 50 additions and 24 deletions

View File

@@ -26,6 +26,8 @@
#include "pistring.h"
class PIVariant;
namespace PICodeInfo {
enum PIP_EXPORT TypeFlag {
@@ -41,7 +43,8 @@ enum PIP_EXPORT TypeFlag {
typedef PIFlags<PICodeInfo::TypeFlag> TypeFlags;
typedef PIMap<PIString, PIString> MetaMap;
typedef PIByteArray(*AccessFunction)(const void *, const char *);
typedef PIByteArray(*AccessValueFunction)(const void *, const char *);
typedef const char*(*AccessTypeFunction)(const char *);
struct PIP_EXPORT TypeInfo {
TypeInfo(const PIString & n = PIString(), const PIString & t = PIString(), PICodeInfo::TypeFlags f = 0, int b = -1) {name = n; type = t; flags = f; bits = b;}
@@ -152,15 +155,25 @@ inline PICout operator <<(PICout s, const PICodeInfo::EnumInfo & v) {
extern PIMap<PIString, PICodeInfo::ClassInfo * > * classesInfo;
extern PIMap<PIString, PICodeInfo::EnumInfo * > * enumsInfo;
extern PIMap<PIString, PICodeInfo::AccessFunction> * accessFunctions;
extern PIMap<PIString, PICodeInfo::AccessValueFunction> * accessValueFunctions;
extern PIMap<PIString, PICodeInfo::AccessTypeFunction> * accessTypeFunctions;
inline PIByteArray getMember(const void * p, const char * class_name, const char * member_name) {
if (!p || !class_name || !member_name || !accessFunctions) return PIByteArray();
AccessFunction af = accessFunctions->value(PIStringAscii(class_name), (AccessFunction)0);
inline PIByteArray getMemberValue(const void * p, const char * class_name, const char * member_name) {
if (!p || !class_name || !member_name || !accessValueFunctions) return PIByteArray();
AccessValueFunction af = accessValueFunctions->value(PIStringAscii(class_name), (AccessValueFunction)0);
if (!af) return PIByteArray();
return af(p, member_name);
}
inline const char * getMemberType(const char * class_name, const char * member_name) {
if (!class_name || !member_name || !accessTypeFunctions) return "";
AccessTypeFunction af = accessTypeFunctions->value(PIStringAscii(class_name), (AccessTypeFunction)0);
if (!af) return "";
return af(member_name);
}
PIVariant getMemberAsVariant(const void * p, const char * class_name, const char * member_name);
}
class __PICodeInfoInitializer__ {
@@ -170,7 +183,8 @@ public:
_inited_ = true;
PICodeInfo::classesInfo = new PIMap<PIString, PICodeInfo::ClassInfo * >;
PICodeInfo::enumsInfo = new PIMap<PIString, PICodeInfo::EnumInfo * >;
PICodeInfo::accessFunctions = new PIMap<PIString, PICodeInfo::AccessFunction>;
PICodeInfo::accessValueFunctions = new PIMap<PIString, PICodeInfo::AccessValueFunction>;
PICodeInfo::accessTypeFunctions = new PIMap<PIString, PICodeInfo::AccessTypeFunction>;
}
static bool _inited_;
};