Changeset 2032 for trunk


Ignore:
Timestamp:
Apr 15, 2012, 3:43:49 AM (7 years ago)
Author:
ksherdy
Message:

Refactor arbitrary length symbol resolution.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/symbol_table/src/id_symbol_table.hpp

    r2031 r2032  
    329329
    330330        BitBlock * starts_base = starts;
    331 //      uint8_t * buffer_base = buffer;
     331  uint8_t * buffer_base = buffer;
    332332        uint8_t * h0_base = h0;
    333333        uint8_t * h1_base = h1;
     
    355355                          starts_base--;
    356356
     357                    blk_count++;
    357358
    358359                    starts_rscanner.init(starts_base);
     
    360361
    361362                    if(!starts_rscanner.is_done()) { // found start
    362                                         lgth = epos + (BLOCK_SIZE - starts_rscanner.get_pos()) + (BLOCK_SIZE * blk_count);
    363                                 //      spos = (BLOCK_SIZE - (-1 * spos)) & (BLOCK_SIZE - 1);
    364                                                        
    365                                         //                                      buffer_base -= (BLOCK_SIZE * blk_count);       
    366                                         spos = epos - lgth;
    367                                        
    368                                         blk_count = (lgth/BLOCK_SIZE)+1;
     363                                        lgth = epos + (BLOCK_SIZE - starts_rscanner.get_pos()) + (BLOCK_SIZE * (blk_count-1));
     364                                        // spos = (BLOCK_SIZE - (-1 * spos)) & (BLOCK_SIZE - 1);
     365
     366                                        // buffer_base -= (BLOCK_SIZE * blk_count);     
     367                                        //spos = epos - lgth;
     368                                        spos = starts_rscanner.get_pos();
     369
     370                                        buffer_base -= (BLOCK_SIZE * blk_count);
    369371                                        h0_base -= (h_block_size * blk_count);
    370372                                        h1_base -= (h_block_size * blk_count);
    371373                                        break;
    372374                    }
    373                     blk_count++;
    374 
    375        
    376 
    377375
    378376                }
    379377
    380                 gid = h_table.lookup_or_insert(buffer, spos, lgth, h0_base, h1_base, h_lgth, gid_factory, gid_data);
    381                 symbols.gids[blk_offset + spos] = gid;
     378                gid = h_table.lookup_or_insert(buffer_base, spos, lgth, h0_base, h1_base, h_lgth, gid_factory, gid_data); // WARNING: spos must be >= 0
     379                symbols.gids[blk_offset + epos - lgth] = gid;
    382380
    383381                #ifdef ID_SYMBOL_TABLE_TEMPLATE_HPP_DEBUG
    384                         print_symbol_debug(gid, buffer, spos, epos, lgth);
     382                        //print_symbol_debug(gid, buffer, spos, epos, lgth);
     383                        print_symbol_debug(gid, buffer_base, spos, epos, lgth);
    385384                #endif
    386385
Note: See TracChangeset for help on using the changeset viewer.