浏览代码

Improved DefData support.

woollybah 11 年之前
父节点
当前提交
ef79bb0be2
共有 2 个文件被更改,包括 141 次插入98 次删除
  1. 78 48
      blitz.mod/blitz_types.c
  2. 63 50
      blitz.mod/blitz_types.h

+ 78 - 48
blitz.mod/blitz_types.c

@@ -1,48 +1,78 @@
-
-#include "blitz.h"
-
-const char *bbVoidTypeTag="?";
-const char *bbByteTypeTag="b";
-const char *bbShortTypeTag="s";
-const char *bbIntTypeTag="i";
-const char *bbFloatTypeTag="f";
-const char *bbDoubleTypeTag="d";
-const char *bbStringTypeTag="$";
-const char *bbObjectTypeTag=":Object";
-const char *bbBytePtrTypeTag="*b";
-
-BBINT bbConvertToInt( void *val,const char *tag ){
-	switch( tag[0] ){
-	case 'b':return *(BBBYTE*)val;
-	case 's':return *(BBSHORT*)val;
-	case 'i':return *(BBINT*)val;
-	case 'f':return *(BBFLOAT*)val;
-	case 'd':return *(BBDOUBLE*)val;
-	case '$':return bbStringToInt( *(BBSTRING*)val );
-	}
-	return 0;
-}
-
-BBDOUBLE bbConvertToFloat( void *val,const char *tag ){
-	switch( tag[0] ){
-	case 'b':return *(BBBYTE*)val;
-	case 's':return *(BBSHORT*)val;
-	case 'i':return *(BBINT*)val;
-	case 'f':return *(BBFLOAT*)val;
-	case 'd':return *(BBDOUBLE*)val;
-	case '$':return bbStringToFloat( *(BBSTRING*)val );
-	}
-	return 0;
-}
-
-BBSTRING bbConvertToString( void *val,const char *tag ){
-	switch( tag[0] ){
-	case 'b':return bbStringFromInt( *(BBBYTE*)val );
-	case 's':return bbStringFromInt( *(BBSHORT*)val );
-	case 'i':return bbStringFromInt( *(BBINT*)val );
-	case 'f':return bbStringFromFloat( *(BBFLOAT*)val );
-	case 'd':return bbStringFromFloat( *(BBDOUBLE*)val );
-	case '$':return *(BBSTRING*)val;
-	}
-	return 0;
-}
+
+#include "blitz.h"
+
+const char *bbVoidTypeTag="?";
+const char *bbByteTypeTag="b";
+const char *bbShortTypeTag="s";
+const char *bbIntTypeTag="i";
+const char *bbLongTypeTag="l";
+const char *bbFloatTypeTag="f";
+const char *bbDoubleTypeTag="d";
+const char *bbStringTypeTag="$";
+const char *bbObjectTypeTag=":Object";
+const char *bbBytePtrTypeTag="*b";
+
+BBINT bbConvertToInt( struct bbDataDef * data ){
+	switch( data->type[0] ){
+	case 'b':return data->b;
+	case 's':return data->s;
+	case 'i':return data->i;
+	case 'l':return data->l;
+	case 'f':return data->f;
+	case 'd':return data->d;
+	case '$':return bbStringToInt( data->t );
+	}
+	return 0;
+}
+
+BBLONG bbConvertToLong( struct bbDataDef * data ){
+	switch( data->type[0] ){
+	case 'b':return data->b;
+	case 's':return data->s;
+	case 'i':return data->i;
+	case 'l':return data->l;
+	case 'f':return data->f;
+	case 'd':return data->d;
+	case '$':return bbStringToLong( data->t );
+	}
+	return 0;
+}
+
+BBFLOAT bbConvertToFloat( struct bbDataDef * data ){
+	switch( data->type[0] ){
+	case 'b':return data->b;
+	case 's':return data->s;
+	case 'i':return data->i;
+	case 'l':return data->l;
+	case 'f':return data->f;
+	case 'd':return data->d;
+	case '$':return bbStringToFloat( data->t );
+	}
+	return 0;
+}
+
+BBDOUBLE bbConvertToDouble( struct bbDataDef * data ){
+	switch( data->type[0] ){
+	case 'b':return data->b;
+	case 's':return data->s;
+	case 'i':return data->i;
+	case 'l':return data->l;
+	case 'f':return data->f;
+	case 'd':return data->d;
+	case '$':return bbStringToFloat( data->t );
+	}
+	return 0;
+}
+
+BBSTRING bbConvertToString( struct bbDataDef * data ){
+	switch( data->type[0] ){
+	case 'b':return bbStringFromInt( data->b );
+	case 's':return bbStringFromInt( data->s );
+	case 'i':return bbStringFromInt( data->i );
+	case 'l':return bbStringFromLong( data->l );
+	case 'f':return bbStringFromFloat( data->f );
+	case 'd':return bbStringFromFloat( data->d );
+	case '$':return data->t;
+	}
+	return &bbEmptyString;
+}

+ 63 - 50
blitz.mod/blitz_types.h

@@ -1,50 +1,63 @@
-
-#ifndef BLITZ_TYPES_H
-#define BLITZ_TYPES_H
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-#ifdef _MSC_VER
-	typedef __int64 BBInt64;
-	typedef unsigned __int64 BBUInt64;
-#else
-	typedef long long BBInt64;
-	typedef unsigned long long BBUInt64;
-#endif
-
-typedef unsigned short	BBChar;
-
-typedef struct BBClass	BBClass;
-typedef struct BBObject	BBObject;
-typedef struct BBString	BBString;
-typedef struct BBArray	BBArray;
-
-typedef unsigned char	BBBYTE;
-typedef unsigned short	BBSHORT;
-typedef signed int		BBINT;
-typedef BBInt64			BBLONG;
-typedef float			BBFLOAT;
-typedef double			BBDOUBLE;
-typedef BBClass*		BBCLASS;
-typedef BBObject*		BBOBJECT;
-typedef BBString*		BBSTRING;
-typedef BBArray*		BBARRAY;
-
-extern const char *bbVoidTypeTag;	//"?"
-extern const char *bbByteTypeTag;	//"b"
-extern const char *bbShortTypeTag;	//"s"
-extern const char *bbIntTypeTag;	//"i"
-extern const char *bbLongTypeTag;	//"l"
-extern const char *bbFloatTypeTag;	//"f"
-extern const char *bbDoubleTypeTag;	//"d"
-extern const char *bbStringTypeTag;	//"$"
-extern const char *bbObjectTypeTag;	//":Object"
-extern const char *bbBytePtrTypeTag;//"*b"
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
+
+#ifndef BLITZ_TYPES_H
+#define BLITZ_TYPES_H
+
+#ifdef __cplusplus
+extern "C"{
+#endif
+
+#ifdef _MSC_VER
+	typedef __int64 BBInt64;
+	typedef unsigned __int64 BBUInt64;
+#else
+	typedef long long BBInt64;
+	typedef unsigned long long BBUInt64;
+#endif
+
+typedef unsigned short	BBChar;
+
+typedef struct BBClass	BBClass;
+typedef struct BBObject	BBObject;
+typedef struct BBString	BBString;
+typedef struct BBArray	BBArray;
+
+typedef unsigned char	BBBYTE;
+typedef unsigned short	BBSHORT;
+typedef signed int		BBINT;
+typedef BBInt64			BBLONG;
+typedef float			BBFLOAT;
+typedef double			BBDOUBLE;
+typedef BBClass*		BBCLASS;
+typedef BBObject*		BBOBJECT;
+typedef BBString*		BBSTRING;
+typedef BBArray*		BBARRAY;
+
+extern const char *bbVoidTypeTag;	//"?"
+extern const char *bbByteTypeTag;	//"b"
+extern const char *bbShortTypeTag;	//"s"
+extern const char *bbIntTypeTag;	//"i"
+extern const char *bbLongTypeTag;	//"l"
+extern const char *bbFloatTypeTag;	//"f"
+extern const char *bbDoubleTypeTag;	//"d"
+extern const char *bbStringTypeTag;	//"$"
+extern const char *bbObjectTypeTag;	//":Object"
+extern const char *bbBytePtrTypeTag;//"*b"
+
+struct bbDataDef { 
+	char * type; 
+	union {
+		BBBYTE b;
+		BBSHORT s;
+		BBINT i;
+		BBLONG l;
+		BBFLOAT f;
+		BBDOUBLE d;
+		BBSTRING t;
+	};
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif