diff options
author | lapayo94@gmail.com <lapayo94@gmail.com@0a769ca7-a7f5-676a-18bf-c427514a06d6> | 2012-07-08 23:01:08 +0200 |
---|---|---|
committer | lapayo94@gmail.com <lapayo94@gmail.com@0a769ca7-a7f5-676a-18bf-c427514a06d6> | 2012-07-08 23:01:08 +0200 |
commit | 083228a10dffcaa77b1d0035c29013c6802befd4 (patch) | |
tree | 4d8ba1ce8501f044d10135e836e6f956f1b99fa4 /squirrel_3_0_1_stable/_OLD_sqplus/SqPlusTypeMask.h | |
parent | Added a lilypad finisher (diff) | |
download | cuberite-083228a10dffcaa77b1d0035c29013c6802befd4.tar cuberite-083228a10dffcaa77b1d0035c29013c6802befd4.tar.gz cuberite-083228a10dffcaa77b1d0035c29013c6802befd4.tar.bz2 cuberite-083228a10dffcaa77b1d0035c29013c6802befd4.tar.lz cuberite-083228a10dffcaa77b1d0035c29013c6802befd4.tar.xz cuberite-083228a10dffcaa77b1d0035c29013c6802befd4.tar.zst cuberite-083228a10dffcaa77b1d0035c29013c6802befd4.zip |
Diffstat (limited to '')
-rw-r--r-- | squirrel_3_0_1_stable/_OLD_sqplus/SqPlusTypeMask.h (renamed from squirrel_3_0_1_stable/sqplus/SqPlusTypeMask.h) | 338 |
1 files changed, 169 insertions, 169 deletions
diff --git a/squirrel_3_0_1_stable/sqplus/SqPlusTypeMask.h b/squirrel_3_0_1_stable/_OLD_sqplus/SqPlusTypeMask.h index 975a51a1f..50dc0c066 100644 --- a/squirrel_3_0_1_stable/sqplus/SqPlusTypeMask.h +++ b/squirrel_3_0_1_stable/_OLD_sqplus/SqPlusTypeMask.h @@ -1,169 +1,169 @@ - -// File to automatically generate a typemask for a function - -// Will generate type masks that accepts Instance pointer or null -#ifndef SQPLUS_ACCEPT_NULL_INSTANCE - #define SQPLUS_ACCEPT_NULL_INSTANCE -#endif - -// Macros to reduce typing: (P1), (P1,P2), (P1,P2,P3), ... -#define P_0 -#define P_1 P1 -#define P_2 P_1,P2 -#define P_3 P_2,P3 -#define P_4 P_3,P4 -#define P_5 P_4,P5 -#define P_6 P_5,P6 -#define P_7 P_6,P7 - -// Macros to reduce typing: (typename P1), (typename P1,typename P2), ... -#define PTN_0 -#define PTN_1 typename P1 -#define PTN_2 PTN_1,typename P2 -#define PTN_3 PTN_2,typename P3 -#define PTN_4 PTN_3,typename P4 -#define PTN_5 PTN_4,typename P5 -#define PTN_6 PTN_5,typename P6 -#define PTN_7 PTN_6,typename P7 - -// Include a comma first in list: ,typename P1,typename P2 -#define PTNC_0 -#define PTNC_1 ,PTN_1 -#define PTNC_2 ,PTN_2 -#define PTNC_3 ,PTN_3 -#define PTNC_4 ,PTN_4 -#define PTNC_5 ,PTN_5 -#define PTNC_6 ,PTN_6 -#define PTNC_7 ,PTN_7 - -#ifdef SQUNICODE -#define scstrcpy wcscpy -#else -#define scstrcpy strcpy -#endif - -inline const SQChar* strappchar(SQChar *buf, SQChar *in, SQChar ch){ - int l=scstrlen(in); - scstrcpy(buf,in); - buf[l] = ch; -#ifdef SQPLUS_ACCEPT_NULL_INSTANCE - if( ch=='x' ){ - buf[++l] = '|'; // Also accept NULL pointers - buf[++l] = 'o'; - } -#endif - buf[l+1] = 0; - return buf; -} - -template<class T> -struct sqTypeMask { }; - - -// Return type not included in type mask, delegate to void case - -// Base case, no arguments -template<typename RT> -struct sqTypeMask<RT(*)()> { - static const SQChar *Get(){ - static SQChar buf[64]; - //buf[0] = _SC('t'); - //buf[1] = 0; - //strcpy(buf,"t|x"); // Accept both instance and table, we don't use param anyway - buf[0] = _SC('.'); // Accept anything (not used) - buf[1] = 0; - return buf; - } -}; - -// Recursive case, peel of one arg at each level -#define DECLARE_RT_SQTYPEMASK(N,M) \ -template<typename RT PTNC_##N> \ -struct sqTypeMask<RT(*)(P_##N)> { \ - static const SQChar *Get(){ \ - static SQChar buf[10]; \ - return strappchar(buf, (SQChar*)sqTypeMask<RT(*)(P_##M)>::Get(), \ - (SQChar)TypeInfo<P##N>::TypeMask); \ - } \ -}; - -DECLARE_RT_SQTYPEMASK(1,0) -DECLARE_RT_SQTYPEMASK(2,1) -DECLARE_RT_SQTYPEMASK(3,2) -DECLARE_RT_SQTYPEMASK(4,3) -DECLARE_RT_SQTYPEMASK(5,4) -DECLARE_RT_SQTYPEMASK(6,5) -DECLARE_RT_SQTYPEMASK(7,6) - - -// Difference to above is that 1st param is instance instead of table - -#define DECLARE_RT_MEMBER_SQTYPEMASK(N,QUAL) \ -template<typename Callee, typename RT PTNC_##N> \ -struct sqTypeMask<RT(Callee::*)(P_##N) QUAL> { \ - static const SQChar *Get(){ \ - SQChar *buf = (SQChar*)sqTypeMask<RT(*)(P_##N)>::Get(); \ - buf[0] = _SC('x'); \ - return buf; \ - } \ -}; - -// buf[1] = 0; \ - -DECLARE_RT_MEMBER_SQTYPEMASK(0,) -DECLARE_RT_MEMBER_SQTYPEMASK(1,) -DECLARE_RT_MEMBER_SQTYPEMASK(2,) -DECLARE_RT_MEMBER_SQTYPEMASK(3,) -DECLARE_RT_MEMBER_SQTYPEMASK(4,) -DECLARE_RT_MEMBER_SQTYPEMASK(5,) -DECLARE_RT_MEMBER_SQTYPEMASK(6,) -DECLARE_RT_MEMBER_SQTYPEMASK(7,) - -DECLARE_RT_MEMBER_SQTYPEMASK(0,const) -DECLARE_RT_MEMBER_SQTYPEMASK(1,const) -DECLARE_RT_MEMBER_SQTYPEMASK(2,const) -DECLARE_RT_MEMBER_SQTYPEMASK(3,const) -DECLARE_RT_MEMBER_SQTYPEMASK(4,const) -DECLARE_RT_MEMBER_SQTYPEMASK(5,const) -DECLARE_RT_MEMBER_SQTYPEMASK(6,const) -DECLARE_RT_MEMBER_SQTYPEMASK(7,const) - - -#ifdef _MSC_VER - -// Difference to above is we're using __cdecl calling convention here -// Only makes sense for MSVC where member functions can have different -// calling conventions (__cdecl or __thiscall) - -#define DECLARE_RT_MEMBER_SQTYPEMASK_CDECL(N,QUAL) \ -template<typename Callee, typename RT PTNC_##N> \ -struct sqTypeMask<RT(__cdecl Callee::*)(P_##N) QUAL> { \ - static const SQChar *Get(){ \ - SQChar *buf = (SQChar*)sqTypeMask<RT(*)(P_##N)>::Get(); \ - buf[0] = _SC('x'); \ - return buf; \ - } \ -}; - -// buf[1] = 0; \ - -DECLARE_RT_MEMBER_SQTYPEMASK_CDECL(0,) -DECLARE_RT_MEMBER_SQTYPEMASK_CDECL(1,) -DECLARE_RT_MEMBER_SQTYPEMASK_CDECL(2,) -DECLARE_RT_MEMBER_SQTYPEMASK_CDECL(3,) -DECLARE_RT_MEMBER_SQTYPEMASK_CDECL(4,) -DECLARE_RT_MEMBER_SQTYPEMASK_CDECL(5,) -DECLARE_RT_MEMBER_SQTYPEMASK_CDECL(6,) -DECLARE_RT_MEMBER_SQTYPEMASK_CDECL(7,) - -DECLARE_RT_MEMBER_SQTYPEMASK_CDECL(0,const) -DECLARE_RT_MEMBER_SQTYPEMASK_CDECL(1,const) -DECLARE_RT_MEMBER_SQTYPEMASK_CDECL(2,const) -DECLARE_RT_MEMBER_SQTYPEMASK_CDECL(3,const) -DECLARE_RT_MEMBER_SQTYPEMASK_CDECL(4,const) -DECLARE_RT_MEMBER_SQTYPEMASK_CDECL(5,const) -DECLARE_RT_MEMBER_SQTYPEMASK_CDECL(6,const) -DECLARE_RT_MEMBER_SQTYPEMASK_CDECL(7,const) - -#endif // _MSC_VER - +
+// File to automatically generate a typemask for a function
+
+// Will generate type masks that accepts Instance pointer or null
+#ifndef SQPLUS_ACCEPT_NULL_INSTANCE
+ #define SQPLUS_ACCEPT_NULL_INSTANCE
+#endif
+
+// Macros to reduce typing: (P1), (P1,P2), (P1,P2,P3), ...
+#define P_0
+#define P_1 P1
+#define P_2 P_1,P2
+#define P_3 P_2,P3
+#define P_4 P_3,P4
+#define P_5 P_4,P5
+#define P_6 P_5,P6
+#define P_7 P_6,P7
+
+// Macros to reduce typing: (typename P1), (typename P1,typename P2), ...
+#define PTN_0
+#define PTN_1 typename P1
+#define PTN_2 PTN_1,typename P2
+#define PTN_3 PTN_2,typename P3
+#define PTN_4 PTN_3,typename P4
+#define PTN_5 PTN_4,typename P5
+#define PTN_6 PTN_5,typename P6
+#define PTN_7 PTN_6,typename P7
+
+// Include a comma first in list: ,typename P1,typename P2
+#define PTNC_0
+#define PTNC_1 ,PTN_1
+#define PTNC_2 ,PTN_2
+#define PTNC_3 ,PTN_3
+#define PTNC_4 ,PTN_4
+#define PTNC_5 ,PTN_5
+#define PTNC_6 ,PTN_6
+#define PTNC_7 ,PTN_7
+
+#ifdef SQUNICODE
+#define scstrcpy wcscpy
+#else
+#define scstrcpy strcpy
+#endif
+
+inline const SQChar* strappchar(SQChar *buf, SQChar *in, SQChar ch){
+ int l=scstrlen(in);
+ scstrcpy(buf,in);
+ buf[l] = ch;
+#ifdef SQPLUS_ACCEPT_NULL_INSTANCE
+ if( ch=='x' ){
+ buf[++l] = '|'; // Also accept NULL pointers
+ buf[++l] = 'o';
+ }
+#endif
+ buf[l+1] = 0;
+ return buf;
+}
+
+template<class T>
+struct sqTypeMask { };
+
+
+// Return type not included in type mask, delegate to void case
+
+// Base case, no arguments
+template<typename RT>
+struct sqTypeMask<RT(*)()> {
+ static const SQChar *Get(){
+ static SQChar buf[64];
+ //buf[0] = _SC('t');
+ //buf[1] = 0;
+ //strcpy(buf,"t|x"); // Accept both instance and table, we don't use param anyway
+ buf[0] = _SC('.'); // Accept anything (not used)
+ buf[1] = 0;
+ return buf;
+ }
+};
+
+// Recursive case, peel of one arg at each level
+#define DECLARE_RT_SQTYPEMASK(N,M) \
+template<typename RT PTNC_##N> \
+struct sqTypeMask<RT(*)(P_##N)> { \
+ static const SQChar *Get(){ \
+ static SQChar buf[10]; \
+ return strappchar(buf, (SQChar*)sqTypeMask<RT(*)(P_##M)>::Get(), \
+ (SQChar)TypeInfo<P##N>::TypeMask); \
+ } \
+};
+
+DECLARE_RT_SQTYPEMASK(1,0)
+DECLARE_RT_SQTYPEMASK(2,1)
+DECLARE_RT_SQTYPEMASK(3,2)
+DECLARE_RT_SQTYPEMASK(4,3)
+DECLARE_RT_SQTYPEMASK(5,4)
+DECLARE_RT_SQTYPEMASK(6,5)
+DECLARE_RT_SQTYPEMASK(7,6)
+
+
+// Difference to above is that 1st param is instance instead of table
+
+#define DECLARE_RT_MEMBER_SQTYPEMASK(N,QUAL) \
+template<typename Callee, typename RT PTNC_##N> \
+struct sqTypeMask<RT(Callee::*)(P_##N) QUAL> { \
+ static const SQChar *Get(){ \
+ SQChar *buf = (SQChar*)sqTypeMask<RT(*)(P_##N)>::Get(); \
+ buf[0] = _SC('x'); \
+ return buf; \
+ } \
+};
+
+// buf[1] = 0; \
+
+DECLARE_RT_MEMBER_SQTYPEMASK(0,)
+DECLARE_RT_MEMBER_SQTYPEMASK(1,)
+DECLARE_RT_MEMBER_SQTYPEMASK(2,)
+DECLARE_RT_MEMBER_SQTYPEMASK(3,)
+DECLARE_RT_MEMBER_SQTYPEMASK(4,)
+DECLARE_RT_MEMBER_SQTYPEMASK(5,)
+DECLARE_RT_MEMBER_SQTYPEMASK(6,)
+DECLARE_RT_MEMBER_SQTYPEMASK(7,)
+
+DECLARE_RT_MEMBER_SQTYPEMASK(0,const)
+DECLARE_RT_MEMBER_SQTYPEMASK(1,const)
+DECLARE_RT_MEMBER_SQTYPEMASK(2,const)
+DECLARE_RT_MEMBER_SQTYPEMASK(3,const)
+DECLARE_RT_MEMBER_SQTYPEMASK(4,const)
+DECLARE_RT_MEMBER_SQTYPEMASK(5,const)
+DECLARE_RT_MEMBER_SQTYPEMASK(6,const)
+DECLARE_RT_MEMBER_SQTYPEMASK(7,const)
+
+
+#ifdef _MSC_VER
+
+// Difference to above is we're using __cdecl calling convention here
+// Only makes sense for MSVC where member functions can have different
+// calling conventions (__cdecl or __thiscall)
+
+#define DECLARE_RT_MEMBER_SQTYPEMASK_CDECL(N,QUAL) \
+template<typename Callee, typename RT PTNC_##N> \
+struct sqTypeMask<RT(__cdecl Callee::*)(P_##N) QUAL> { \
+ static const SQChar *Get(){ \
+ SQChar *buf = (SQChar*)sqTypeMask<RT(*)(P_##N)>::Get(); \
+ buf[0] = _SC('x'); \
+ return buf; \
+ } \
+};
+
+// buf[1] = 0; \
+
+DECLARE_RT_MEMBER_SQTYPEMASK_CDECL(0,)
+DECLARE_RT_MEMBER_SQTYPEMASK_CDECL(1,)
+DECLARE_RT_MEMBER_SQTYPEMASK_CDECL(2,)
+DECLARE_RT_MEMBER_SQTYPEMASK_CDECL(3,)
+DECLARE_RT_MEMBER_SQTYPEMASK_CDECL(4,)
+DECLARE_RT_MEMBER_SQTYPEMASK_CDECL(5,)
+DECLARE_RT_MEMBER_SQTYPEMASK_CDECL(6,)
+DECLARE_RT_MEMBER_SQTYPEMASK_CDECL(7,)
+
+DECLARE_RT_MEMBER_SQTYPEMASK_CDECL(0,const)
+DECLARE_RT_MEMBER_SQTYPEMASK_CDECL(1,const)
+DECLARE_RT_MEMBER_SQTYPEMASK_CDECL(2,const)
+DECLARE_RT_MEMBER_SQTYPEMASK_CDECL(3,const)
+DECLARE_RT_MEMBER_SQTYPEMASK_CDECL(4,const)
+DECLARE_RT_MEMBER_SQTYPEMASK_CDECL(5,const)
+DECLARE_RT_MEMBER_SQTYPEMASK_CDECL(6,const)
+DECLARE_RT_MEMBER_SQTYPEMASK_CDECL(7,const)
+
+#endif // _MSC_VER
+
|