Changeset 2064 for trunk


Ignore:
Timestamp:
Apr 28, 2012, 4:36:10 PM (7 years ago)
Author:
ksherdy
Message:

Added static is_delimeter routines.

File:
1 edited

Legend:

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

    r2063 r2064  
    314314};
    315315
     316///////////////////////////////////////////////////////////////////////////
     317// id
     318///////////////////////////////////////////////////////////////////////////
    316319template<uint32_t LGTH, class ALLOCATOR>
    317320class id_hash_table : public hash_table<LGTH, ALLOCATOR> {
     
    358361};
    359362
     363
     364///////////////////////////////////////////////////////////////////////////
     365// div2
     366///////////////////////////////////////////////////////////////////////////
     367
     368// TODO - delimeters at compile time
     369static char XMLdelimiters[] = {' ', '\0', '\0', ';', '\0', '=', '>', '/'};
     370static IDISA_ALWAYS_INLINE bool isXMLDelimiter(const char c) {
     371    return c == XMLdelimiters[(unsigned int) c & 0x7];
     372}
     373
     374static IDISA_ALWAYS_INLINE bool isGeneralDelimiter(const char c) {
     375    return !(('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z'));
     376}
     377
     378static IDISA_ALWAYS_INLINE bool isTestDelimiter(const char c) {
     379    return c == ',';
     380}
     381
     382
    360383template<uint32_t LGTH, class ALLOCATOR>
    361384class div2_hash_table : public hash_table<LGTH, ALLOCATOR> {
     
    392415        uint32_t lgth = raw_byte_lgth;
    393416
    394         uint32_t index_of_last = idx + lgth - 1;
     417
    395418
    396419        ///////////////////////////////////////////////////////////////////////////
     
    401424        } else {
    402425
    403                 if (!div2_hash_table::is_delimeter(raw_bytes, index_of_last)) {
    404 
    405                     this->pool_and_insert(bucket, raw_bytes, idx, lgth, h0, h1, gid_factory, gid_data, gid);
     426            if (!div2_hash_table::is_delimeter((char) *(raw_bytes + (idx + lgth - 1)))) {
     427
     428                this->pool_and_insert(bucket, raw_bytes, idx, lgth, h0, h1, gid_factory, gid_data, gid);
     429                return gid;
     430            } else {
     431
     432                    ///////////////////////////////////////////////////////////////////////////
     433                    // Odd
     434                    ///////////////////////////////////////////////////////////////////////////
     435                    if(this->hash_table_odd.lookup(bucket, raw_bytes, idx, lgth-1, h0, h1, gid)) {
     436                        return gid;
     437                    }
     438
     439                    hash_table_odd.pool_and_insert(bucket, raw_bytes, idx, lgth-1, h0, h1, gid_factory, gid_data, gid);
    406440                    return gid;
    407                 } else {
    408 
    409                         ///////////////////////////////////////////////////////////////////////////
    410                         // Odd
    411                         ///////////////////////////////////////////////////////////////////////////
    412                         if(this->hash_table_odd.lookup(bucket, raw_bytes, idx, lgth-1, h0, h1, gid)) {
    413                             return gid;
    414                         }
    415 
    416                         hash_table_odd.pool_and_insert(bucket, raw_bytes, idx, lgth-1, h0, h1, gid_factory, gid_data, gid);
    417                         return gid;
    418                 }
    419 
     441            }
    420442        }
    421443    }
     
    423445protected:
    424446
    425     // TODO - Compile in delimeter set.
    426     static IDISA_ALWAYS_INLINE bool is_delimeter(uint8_t * raw_bytes, const uint32_t idx) {
    427         bool has_delim = *(raw_bytes + idx) == ',';
    428         return has_delim;
     447    static IDISA_ALWAYS_INLINE bool is_delimeter(const char delim) {
     448        return ::isTestDelimiter(delim);
    429449    }
    430450
     
    432452};
    433453
     454///////////////////////////////////////////////////////////////////////////
     455// log2
     456///////////////////////////////////////////////////////////////////////////
    434457template<uint32_t LGTH, class ALLOCATOR>
    435458class log2_hash_table : public hash_table<LGTH, ALLOCATOR> {
Note: See TracChangeset for help on using the changeset viewer.