Browse Source

+ show db usage map

master
Alex 'AdUser' Z 11 years ago
parent
commit
0d378b8497
  1. 54
      src/util.c

54
src/util.c

@ -30,6 +30,7 @@ void usage(int exitcode) {
printf("\n" printf("\n"
" -S <num> Search for images similar ot this sample\n" " -S <num> Search for images similar ot this sample\n"
" -B <num> Show bitmap for this sample\n" " -B <num> Show bitmap for this sample\n"
" -U <num> Show db usage map, <num> entries per column\n"
); );
exit(exitcode); exit(exitcode);
} }
@ -79,6 +80,43 @@ int db_search(db_t *db, rec_t *sample, float tresh, match_t **matches)
return found; return found;
} }
int db_usage_map(db_t *db, unsigned short int cols)
{
const int blk_size = 4096;
unsigned int i, j = 0;
unsigned char *p, *t;
char buf[256];
block_t blk;
assert(db != NULL);
assert(cols <= 256);
memset(&blk, 0x0, sizeof(block_t));
memset(buf, 0x0, sizeof(char) * 256);
blk.start = 1;
blk.records = blk_size;
while (db_rd_blk(db, &blk) > 0) {
p = blk.data;
for (i = 0; i < blk.records; i++, p += REC_LEN) {
t = p + OFF_USED;
buf[j] = (*t == 0xFF) ? '1' : '0';
if (j++ < cols)
continue;
puts(buf);
memset(buf, 0x0, sizeof(char) * 256);
j = 0;
}
if (j > 0)
puts(buf);
FREE(blk.data);
blk.start += blk_size;
}
return 0;
}
int rec_bitmap(db_t *db, rec_t *sample) int rec_bitmap(db_t *db, rec_t *sample)
{ {
uint16_t row; uint16_t row;
@ -108,9 +146,10 @@ int rec_bitmap(db_t *db, rec_t *sample)
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
enum { undef, search, bitmap } mode = undef; enum { undef, search, bitmap, usage_map } mode = undef;
const char *db_path = NULL; const char *db_path = NULL;
float tresh = 0.10; float tresh = 0.10;
unsigned short int cols;
db_t db; db_t db;
rec_t sample; rec_t sample;
char opt = '\0'; char opt = '\0';
@ -121,7 +160,7 @@ int main(int argc, char **argv)
if (argc < 3) if (argc < 3)
usage(EXIT_FAILURE); usage(EXIT_FAILURE);
while ((opt = getopt(argc, argv, "b:t:S:B:")) != -1) { while ((opt = getopt(argc, argv, "b:t:S:B:U:")) != -1) {
switch (opt) { switch (opt) {
case 'b' : case 'b' :
db_path = optarg; db_path = optarg;
@ -138,13 +177,19 @@ int main(int argc, char **argv)
mode = search; mode = search;
sample.num = atoll(optarg); sample.num = atoll(optarg);
break; break;
case 'U' :
mode = usage_map;
cols = atoi(optarg);
if (cols <= 0 || cols >= 256)
cols = 64;
break;
default : default :
usage(EXIT_FAILURE); usage(EXIT_FAILURE);
break; break;
} }
} }
if (sample.num <= 0) if ((mode == search || mode == bitmap) && sample.num <= 0)
usage(EXIT_FAILURE); usage(EXIT_FAILURE);
if (db_open(&db, db_path) == -1) { if (db_open(&db, db_path) == -1) {
@ -158,6 +203,9 @@ int main(int argc, char **argv)
if (mode == bitmap) if (mode == bitmap)
rec_bitmap(&db, &sample); rec_bitmap(&db, &sample);
if (mode == usage_map)
db_usage_map(&db, cols);
db_close(&db); db_close(&db);
exit(EXIT_SUCCESS); exit(EXIT_SUCCESS);

Loading…
Cancel
Save