static void sdb_restore_file_cells( sdb_table_t *tbl) {
    struct sdb_read_ctx_t rctx;
    struct bsd_data_t bsd;
    int nread;
    sdb_read_init( & rctx, tbl);
    while( (nread = sdb_read_data( & rctx, & bsd, 1)) > 0) {
        // restore data analysis
        switch( bsd.kind) {
        case BSD_INT:    sdb_analyze_integer(tbl, bsd.content.i); break;
        case BSD_DOUBLE: sdb_analyze_noninteger(tbl, 1); break;
        default:         sdb_analyze_noninteger(tbl, 0); break;
        }

        tbl->nwrittenbytes += nread;
        tbl->nwrittenobjects ++;
    }
//          printf( "exited with code %d, found %d objects encoded in %d bytes\n",
//                  nread, tbl->nwrittenobjects, tbl->nwrittenbytes);
    sdb_read_close( & rctx);
}
Example #2
0
int sdb_raw( sdb_table_t *tbl, unsigned const char *serialized_cell, int length) {
  int r;
  if( tbl->state != SDB_ST_READING) return SDB_EBADSTATE;
  if( tbl->maxwrittenobjects &&
      tbl->maxwrittenobjects >= tbl->nwrittenobjects)
    return SDB_EFULL;
  sdb_untrim( tbl);
  sdb_analyze_noninteger(tbl, 0);
  r = sdb_bss_writer( serialized_cell, length, tbl);
  if( r<0) { return 0; }
  else if( r != length) { return SDB_EINTERNAL; }
  else { tbl->nwrittenobjects++; return SDB_EOK; }
}
Example #3
0
// special case to handle 4 byte forced packing
int sdb_double( sdb_table_t *tbl, double d) {
    int r;
    if( tbl->state != SDB_ST_READING) return SDB_EBADSTATE;
    if( tbl->maxwrittenobjects &&
        tbl->maxwrittenobjects >= tbl->nwrittenobjects)
        return SDB_EFULL;
    sdb_untrim( tbl);

    if( tbl->columns[tbl->nwrittenobjects % tbl->ncolumns].serialization_method & SDB_SM_4_BYTES_FLOATS) {
        d = (double) (float) d;
    }

    sdb_analyze_noninteger(tbl, 1);
    r = bss_double(tbl->bss_ctx, d);
    if( r) {
        return r;
    } else {
        tbl->nwrittenobjects++;
        return SDB_EOK;
    }
}