Commit 85b519be authored by Bradley C. Kuszmaul's avatar Bradley C. Kuszmaul

Fiddle around

git-svn-id: file:///svn/tokudb@252 c7de825b-a66e-492c-adef-691d508d4ae1
parent ccbebab6
......@@ -15,9 +15,9 @@ void print_dbtype(void) {
}
#define DECL_LIMIT 100
//#define DECL_LIMIT 100
struct fieldinfo {
char decl[DECL_LIMIT];
char *decl;
unsigned int off;
unsigned int size;
};
......@@ -25,31 +25,31 @@ struct fieldinfo {
#include "sample_offsets_32.h"
#include "sample_offsets_64.h"
void print_struct (const char *structname, struct fieldinfo *fields32, struct fieldinfo *fields64, unsigned int N) {
void print_struct (const char *structname, int need_internal, struct fieldinfo *fields32, struct fieldinfo *fields64, unsigned int N) {
unsigned int i;
unsigned int current_32 = 0;
unsigned int current_64 = 0;
int dummy_counter=0;
// int did_toku_internal=0;
int did_toku_internal=0;
printf("struct __toku_%s {\n", structname);
for (i=0; i<N; i++) {
unsigned int this_32 = fields32[i].off;
unsigned int this_64 = fields64[i].off;
assert(strcmp(fields32[i].decl, fields64[i].decl)==0);
#if 0
if (!did_toku_internal && this_offset+sizeof(void*)>current_offset) {
printf(" struct __tokudb_internal *i;\n");
current_offset+=sizeof(void*);
did_toku_internal=1;
}
#endif
//fprintf(stderr, "this32=%d current32=%d this64=%d current64=%d\n", this_32, current_32, this_64, current_64);
if (this_32 > current_32 || this_64 > current_64) {
unsigned int diff32 = this_32-current_32;
unsigned int diff64 = this_64-current_64;
assert(this_32 > current_32 && this_64 > current_64);
if (diff32!=diff64) {
unsigned int diff = diff64-diff32;
printf(" void* dummy%d[%d];\n", dummy_counter++, diff/4);
unsigned int n_dummys = diff/4;
if (need_internal && !did_toku_internal) {
printf(" struct __toku%s_internal *i;\n", structname);
n_dummys--;
did_toku_internal=1;
}
if (n_dummys>0) printf(" void* dummy%d[%d];\n", dummy_counter++, n_dummys);
diff64-=diff*2;
diff32-=diff;
......@@ -68,6 +68,7 @@ void print_struct (const char *structname, struct fieldinfo *fields32, struct fi
current_32 += fields32[i].size;
current_64 += fields64[i].size;
}
assert(did_toku_internal || !need_internal);
printf("};\n");
}
......@@ -80,10 +81,10 @@ int main (int argc __attribute__((__unused__)), char *argv[] __attribute__((__un
print_dbtype();
assert(sizeof(db_fields32)==sizeof(db_fields64));
print_struct("db", db_fields32, db_fields64, sizeof(db_fields32)/sizeof(db_fields32[0]));
print_struct("db", 1, db_fields32, db_fields64, sizeof(db_fields32)/sizeof(db_fields32[0]));
assert(sizeof(dbt_fields32)==sizeof(dbt_fields64));
print_struct("dbt", dbt_fields32, dbt_fields64, sizeof(dbt_fields32)/sizeof(dbt_fields32[0]));
print_struct("dbt", 0, dbt_fields32, dbt_fields64, sizeof(dbt_fields32)/sizeof(dbt_fields32[0]));
printf("#if defined(__cplusplus)\n}\n#endif\n");
printf("#endif\n");
......
......@@ -39,15 +39,14 @@ void open_file (void) {
}
void sort_and_dump_fields (const char *structname) {
void sort_and_dump_fields (const char *structname, unsigned int sizeofstruct) {
int i;
qsort(fields, field_counter, sizeof(fields[0]), compare_fields);
fprintf(outf, "struct fieldinfo %s_fields%d[] = {\n", structname, __WORDSIZE);
for (i=0; i<field_counter; i++) {
fprintf(outf, " {\"%s\", %d, %d}", fields[i].decl, fields[i].off, fields[i].size);
if (i+1<field_counter) fprintf(outf, ",");
fprintf(outf, "\n");
fprintf(outf, " {\"%s\", %d, %d},\n", fields[i].decl, fields[i].off, fields[i].size);
}
fprintf(outf, " {0, 0, %d} /* size of whole struct */\n", sizeofstruct);
fprintf(outf, "};\n");
}
......@@ -67,8 +66,9 @@ void sample_db_offsets (void) {
STRUCT_SETUP(DB,set_bt_compare, "int (*%s) (DB *, int (*)(DB *, const DBT *, const DBT *))");
STRUCT_SETUP(DB,set_flags, "int (*%s) (DB *, u_int32_t)");
STRUCT_SETUP(DB,stat, "int (*%s) (DB *, void *, u_int32_t)");
sort_and_dump_fields("db");
sort_and_dump_fields("db", sizeof(DB));
}
void sample_dbt_offsets (void) {
field_counter=0;
STRUCT_SETUP(DBT,app_private, "void*%s");
......@@ -76,8 +76,16 @@ void sample_dbt_offsets (void) {
STRUCT_SETUP(DBT,flags, "u_int32_t %s");
STRUCT_SETUP(DBT,size, "u_int32_t %s");
STRUCT_SETUP(DBT,ulen, "u_int32_t %s");
sort_and_dump_fields("dbt");
sort_and_dump_fields("dbt", sizeof(DBT));
}
void sample_db_txn_offsets (void) {
field_counter=0;
STRUCT_SETUP(DB_TXN, commit, "int (*%s) (DB_TXN*, u_int32_t)");
STRUCT_SETUP(DB_TXN, id, "u_int32_t (*%s) (DB_TXN *)");
sort_and_dump_fields("db_txn", sizeof(DB_TXN));
}
int main (int argc __attribute__((__unused__)), char *argv[] __attribute__((__unused__))) {
open_file();
fprintf(outf, "/* BDB offsets on a %d-bit machine */\n", __WORDSIZE);
......
......@@ -12,12 +12,14 @@ struct fieldinfo db_fields32[] = {
{"int (*rename) (DB *, const char *, const char *, const char *, u_int32_t)", 332, 4},
{"int (*set_flags) (DB *, u_int32_t)", 380, 4},
{"int (*stat) (DB *, void *, u_int32_t)", 396, 4},
{"int (*set_bt_compare) (DB *, int (*)(DB *, const DBT *, const DBT *))", 412, 4}
{"int (*set_bt_compare) (DB *, int (*)(DB *, const DBT *, const DBT *))", 412, 4},
{0, 0, 484} /* size of whole struct */
};
struct fieldinfo dbt_fields32[] = {
{"void*data", 0, 4},
{"u_int32_t size", 4, 4},
{"u_int32_t ulen", 8, 4},
{"void*app_private", 20, 4},
{"u_int32_t flags", 24, 4}
{"u_int32_t flags", 24, 4},
{0, 0, 28} /* size of whole struct */
};
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment