2
0
Brucey 4 жил өмнө
parent
commit
a1571444bc

+ 27 - 1
blitz.mod/blitz_array.h

@@ -27,7 +27,33 @@ struct BBArray{
 	int    scales[1];  // [dims]
 };
 
-extern		BBClass bbArrayClass;
+struct BBClass_Array{
+	//extends BBGCPool
+	BBClass*	super;
+	void		(*free)( BBObject *o );
+	
+	BBDebugScope*debug_scope;
+
+	unsigned int instance_size;
+
+	void		(*ctor)( BBObject *o );
+	void		(*dtor)( BBObject *o );
+	
+	BBString*	(*ToString)( BBObject *x );
+	int		(*Compare)( BBObject *x,BBObject *y );
+	BBObject*	(*SendMessage)( BBObject * o, BBObject *m,BBObject *s );
+
+	BBINTERFACETABLE itable;
+	void*   extra;
+	unsigned int obj_size;
+	unsigned int instance_count;
+	unsigned int fields_offset;
+
+	void (*bbArraySort)( BBArray *arr,int ascending );
+	BBArray* (*bbArrayDimensions)( BBArray *arr );
+};
+
+extern	struct BBClass_Array bbArrayClass;
 extern		BBArray bbEmptyArray;
 
 BBArray*	bbArrayNew( const char *type,int dims,... );

+ 4 - 4
blitz.mod/blitz_string.c

@@ -95,7 +95,7 @@ struct BBClass_String bbStringClass={
 };
 
 BBString bbEmptyString={
-	&bbStringClass, //clas
+	(BBClass*)&bbStringClass, //clas
 	0x776eddfb6bfd9195, // hash
 	0				//length
 };
@@ -117,14 +117,14 @@ static int charsEqual( unsigned short *a,unsigned short *b,int n ){
 //***** Note: Not called in THREADED mode.
 static void bbStringFree( BBObject *o ){
 	if (bbCountInstances) {
-		bbAtomicAdd(&bbStringClass.instance_count, -1);
+		bbAtomicAdd((int*)&bbStringClass.instance_count, -1);
 	}
 }
 
 BBString *bbStringNew( int len ){
 	BBString *str;
 	if( !len ) return &bbEmptyString;
-	str=(BBString*)bbGCAllocObject( sizeof(BBString)+len*sizeof(BBChar),&bbStringClass,BBGC_ATOMIC );
+	str=(BBString*)bbGCAllocObject( sizeof(BBString)+len*sizeof(BBChar),(BBClass*)&bbStringClass,BBGC_ATOMIC );
 	str->hash=0;
 	str->length=len;
 	return str;
@@ -250,7 +250,7 @@ BBString *bbStringFromWString( const BBChar *p ){
 }
 
 BBString *bbStringFromUTF8String( const unsigned char *p ){
-	return p ? bbStringFromUTF8Bytes( p,strlen(p) ) : &bbEmptyString;
+	return p ? bbStringFromUTF8Bytes( p,strlen((char*)p) ) : &bbEmptyString;
 }
 
 BBString *bbStringFromUTF8Bytes( const unsigned char *p,int n ){

+ 53 - 1
blitz.mod/blitz_string.h

@@ -42,7 +42,59 @@ struct BBClass_String{
 	unsigned int instance_count;
 	unsigned int fields_offset;
 
-	void*	vfns[40];
+	int (*bbStringFind)( BBString *x,BBString *y,int i );
+	int (*bbStringFindLast)( BBString *x,BBString *y,int i );
+	BBString* (*bbStringTrim)( BBString *str );
+	BBString* (*bbStringReplace)( BBString *str,BBString *sub,BBString *rep );
+
+	BBString* (*bbStringToLower)( BBString *str );
+	BBString* (*bbStringToUpper)( BBString *str );
+
+	int (*bbStringToInt)( BBString *t );
+	BBInt64 (*bbStringToLong)( BBString *t );
+	float (*bbStringToFloat)( BBString *t );
+	double (*bbStringToDouble)( BBString *t );
+	unsigned char* (*bbStringToCString)( BBString *str );
+	BBChar* (*bbStringToWString)( BBString *str );
+
+	BBString* (*bbStringFromInt)( int n );
+	BBString* (*bbStringFromLong)( BBInt64 n );
+	BBString* (*bbStringFromFloat)( float n );
+	BBString* (*bbStringFromDouble)( double n );
+	BBString* (*bbStringFromCString)( const char *p );
+	BBString* (*bbStringFromWString)( const BBChar *p );
+
+	BBString* (*bbStringFromBytes)( const unsigned char *p,int n );
+	BBString* (*bbStringFromShorts)( const unsigned short *p,int n );
+
+	int (*bbStringStartsWith)( BBString *x,BBString *y );
+	int (*bbStringEndsWith)( BBString *x,BBString *y );
+	int (*bbStringContains)( BBString *x,BBString *y );
+
+	BBArray* (*bbStringSplit)( BBString *str,BBString *sep );
+	BBString* (*bbStringJoin)( BBString *sep,BBArray *bits );
+
+	BBString* (*bbStringFromUTF8String)( const unsigned char *p );
+	unsigned char* (*bbStringToUTF8String)( BBString *str );
+	BBString* (*bbStringFromUTF8Bytes)( const unsigned char *p,int n );
+
+	BBSIZET (*bbStringToSizet)( BBString *t );
+	BBString* (*bbStringFromSizet)( BBSIZET n );
+
+	unsigned int (*bbStringToUInt)( BBString *t );
+	BBString* (*bbStringFromUInt)( unsigned int n );
+	BBUInt64 (*bbStringToULong)( BBString *t );
+	BBString* (*bbStringFromULong)( BBUInt64 n );
+
+#ifdef _WIN32
+	WPARAM (*bbStringToWParam)( BBString *t );
+	BBString* (*bbStringFromWParam)( WPARAM n );
+	LPARAM (*bbStringToLParam)( BBString *t );
+	BBString* (*bbStringFromLParam)( LPARAM n );
+#endif
+
+	unsigned char* (*bbStringToUTF8StringBuffer)( BBString *str, unsigned char * buf, size_t * length );
+	BBULONG (*bbStringHash)( BBString * x );
 };
 
 extern	struct BBClass_String bbStringClass;

+ 1 - 0
blitz.mod/blitz_types.h

@@ -25,6 +25,7 @@ typedef struct BBInterface BBInterface;
 typedef struct BBInterfaceOffsets BBInterfaceOffsets;
 typedef struct BBEnum BBEnum;
 typedef struct BBClass_String BBClass_String;
+typedef struct BBClass_Array BBClass_Array;
 
 typedef unsigned char	BBBYTE;
 typedef unsigned short	BBSHORT;