00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef Z_GTCDB_H
00010 #define Z_GTCDB_H
00011
00028 #include <gtcspeaker.h>
00029 #include <gtcmesh.h>
00030
00031 #define GTCBITBUFFERSIZE 256
00032 typedef struct _gtcBitBufferList gtcBitBufferList;
00033 struct _gtcBitBufferList
00034 {
00035 char bits[GTCBITBUFFERSIZE];
00036 gtcBitBufferList *next;
00037 };
00038 typedef struct
00039 {
00040 gtcBitBufferList first,*last;
00041 int offset;
00042 } gtcBitBuffer;
00043
00044 gtcBitBuffer *gtc_new_bitbuffer();
00045 void gtc_destroy_bitbuffer(gtcBitBuffer *bb);
00046 void gtc_bitbuffer_put_bit(gtcBitBuffer *bb, int bit);
00047 gtcPacket *gtc_bitbuffer_to_packet(gtcBitBuffer *bb);
00049 void gtc_bitbuffer_ip(gtcBitBuffer *bb, int i, int prec);
00051 void gtc_bitbuffer_up(gtcBitBuffer *bb, unsigned i, int prec);
00053 void gtc_bitbuffer_iv(gtcBitBuffer *bb, int i);
00055 void gtc_bitbuffer_uv(gtcBitBuffer *bb, unsigned i);
00057 void gtc_bitbuffer_float(gtcBitBuffer *bb, float f,
00058 int mantissa, int exponent);
00060 void gtc_bitbuffer_matrix(gtcBitBuffer *bb, float f[3][3],
00061 int mantissa, int exponent);
00063 void gtc_bitbuffer_string(gtcBitBuffer *bb, char *s);
00064
00065 void gtc_bitpacket_prepare(gtcPacket *p);
00066 int gtc_bitpacket_get_bit(gtcPacket *p);
00068 int gtc_bitpacket_ip(gtcPacket *p, int prec);
00070 unsigned gtc_bitpacket_up(gtcPacket *p, int prec);
00072 int gtc_bitpacket_iv(gtcPacket *p);
00074 unsigned gtc_bitpacket_uv(gtcPacket *p);
00076 float gtc_bitpacket_float(gtcPacket *p, int mantissa, int exponent);
00078 void gtc_bitpacket_matrix(gtcPacket *p, float f[3][3],
00079 int mantissa, int exponent);
00081 char *gtc_bitpacket_string(gtcPacket *p);
00082
00083
00085 enum gtcDBTypes
00086 {
00087 gtcDBBegin=0,
00088
00089 gtcDBInt,
00090 gtcDBUnsigned,
00091 gtcDBFloat,
00092 gtcDBMatrix,
00093 gtcDBChar,
00094 gtcDBIntVec,
00095 gtcDBUnsignedVec,
00096 gtcDBFloatVec,
00097 gtcDBMatrixVec,
00098 gtcDBCharVec,
00099
00100 gtcDBEnd
00101 };
00102
00103 extern const int gtcDBTypeSizes[];
00104
00106 typedef struct _vectype
00107 {
00109 unsigned size;
00111 } vectype;
00112
00113 typedef struct _gtcDBNode gtcDBNode;
00121 struct _gtcDBNode
00122 {
00124 int id;
00126 int hash;
00128 int type;
00130 int size;
00132 void *value;
00134 gtcDBNode *next[2];
00135 };
00136
00138 gtcDBNode *gtc_new_dbnode(int id, int type, void *value);
00140 gtcDBNode *gtc_new_dbnode_vec(int id, int type, int size, void *values);
00142 void gtc_delete_dbnode(gtcDBNode *node);
00143
00144 #define HASHSIZE 256
00145 typedef struct
00146 {
00147 int count;
00148 gtcDBNode *hash[2][HASHSIZE];
00149 int refcount;
00150 } gtcDB;
00151
00153 int gtc_hash(int size, void *data, int hash);
00155 gtcDB *gtc_db_new(void);
00157 void gtc_db_delete(gtcDB *db);
00159 int gtc_db_insert_int(gtcDB *db, int i);
00161 int gtc_db_insert_unsigned(gtcDB *db, unsigned i);
00163 int gtc_db_insert_float(gtcDB *db, gtcReal f);
00165 int gtc_db_insert_matrix33(gtcDB *db, gtcReal m[3][3]);
00167 int gtc_db_insert_matrix44(gtcDB *db, gtcReal m[4][4]);
00169 int gtc_db_insert_char(gtcDB *db, char x);
00171 int gtc_db_insert_array_int(gtcDB *db, int length, int elems[]);
00173 int gtc_db_insert_array_unsigned(gtcDB *db, int length, unsigned elems[]);
00175 int gtc_db_insert_array_float(gtcDB *db, int length, gtcReal elems[]);
00177 int gtc_db_insert_array_matrix33(gtcDB *db, int length, gtcReal elems[][3][3]);
00179 int gtc_db_insert_array_matrix44(gtcDB *db, int length, gtcReal elems[][4][4]);
00181 int gtc_db_insert_array_char(gtcDB *db, int length, char elems[]);
00183 int gtc_db_insert_string(gtcDB *db, char string[]);
00184
00186 gtcDBNode *gtc_db_get(gtcDB *db, int id);
00187
00189 void gtc_dbnode_print(gtcDBNode *foo);
00190
00191 typedef struct
00192 {
00193 int float_mantissa, float_exponent;
00194 } gtcBitSettings;
00196 void gtc_bitbuffer_db(gtcBitBuffer *bb, gtcDB *db,
00197 gtcBitSettings *set, gtcDB *prev);
00199 gtcDB *gtc_bitpacket_db(gtcPacket *bp, gtcBitSettings *set,
00200 gtcDB *prev);
00201
00202 #endif