source: trunk/symtab/ls_symbol_table_vectors.h @ 1776

Last change on this file since 1776 was 1229, checked in by vla24, 8 years ago

Reorganized SymbolTable? library

File size: 4.0 KB
Line 
1/*
2 * lgthsymtab.h
3 *
4 *  Created on: 21-Sep-2009
5 *  Author: ksherdy
6 *  Description: Length Sorted Symbol Table (Key Sorted)
7 */
8
9// Define exactly one of USE_FUNCTION_TEMPLATES and USE_FUNCTION_OBJECTS.
10
11//#define USE_FUNCTION_OBJECTS
12#define USE_FUNCTION_TEMPLATES
13
14#include <vector>
15using namespace std;
16
17#include "ls_symbol_table_compare.h"
18#include "stringpool.h"
19
20#ifndef LSYMTAB_H_
21#define LSYMTAB_H_
22
23class LSSymbolTable {
24       
25public: 
26       
27        LSSymbolTable();
28        ~LSSymbolTable();
29       
30        // Adds a new symbol value.
31        void put(unsigned char * code_unit_ptr, const uint32_t lgth);
32       
33        // Binds a unique global numeric identifier with each unique symbol.
34        void bind();   
35       
36        // Builds symbol table arrays and destroys temporary internal data structures.
37        void finalize();
38       
39        // TODO - Make a decision to include this function in the public symbol table interface.
40        // Flattens 2D length sorted, unique symbol values into a 1D gid indexed array.
41        void flatten_unique_symbol_values();
42       
43        // Flatten 3D length, key, indexed data structure into a 1D globally occurence indexed 1D array of gids.
44        void flatten_gids();
45       
46        /*
47        // Lookup symbol gid by document symbol index.
48        size_t lookup_gid();
49       
50        // Lookup symbol value by gid.
51        unsigned char * lookup_value(size_t gid);
52       
53        // Lookup symbol length by gid.
54        size_t lookup_length(size_t gid);
55        */
56       
57        // Clear symbol table contents.
58        void clear();
59       
60        // Debug.
61        void display_lgth_dist() const;
62       
63        void display_lgth_sorted_symbol_values_gids() const;
64       
65        void display_lgth_key_sorted_doc_idxs() const;
66       
67        // Display symbol values by length and key index.
68        void display_symbol_values(size_t lgth, size_t key_val_index) const;
69       
70        void display_flattened_symbol_values() const;
71       
72        void display_flattened_gids() const;   
73       
74private:
75       
76#ifdef USE_FUNCTION_OBJECTS
77        template<size_t L, class Compare>
78        inline void bind(const Compare & compare);
79#endif 
80       
81#ifdef USE_FUNCTION_TEMPLATES
82        template<size_t L>
83        inline void bind();
84#endif
85
86        inline void bind_gt_32();
87
88        static const unsigned short LGTH_BINS_ = 33;                                    // initial number of length bins 0,1,...
89        size_t crt_symbol_index_;                                                       // current symbol index, 0,1,...
90       
91                                                                                        // IMPORTANT: gid is overloaded as both a unique symbol identifier
92                                                                                        //            AND an as index into the gid_idx_key_vals_ and gid_idx_key_lgths_ arrays,
93                                                                                        //                        this allows lookup of key value and key length by gid
94                                                                                                                                               
95        size_t  crt_symbol_gid_;                                                        // current gid, 0,1,...
96       
97        //length indexed vectors
98                                                                                        // parallel arrays, symbol indices and symbol value pointers,
99        vector< vector<size_t> > symbol_index_;                                         // symbol index provides a global ordering/indexing
100        vector< vector<unsigned char *> > symbol_value_ptr;                             
101                                                                                       
102                                                                                        // parallel arrays, symbol values and global symbol identifiers,
103        vector< vector<unsigned char*> > uniq_symbol_value_ptrs_;                       
104        vector< vector<size_t> > uniq_symbol_gids_;                                             
105       
106        vector< vector< vector <size_t> > > symbol_indices_;                            // length indexed, key indexed, symbol indices,
107                                                                                        // where lgth_key_num[l][k][i] returns the ith symbol occurence, of the kth key, of symbol length l.                                   
108       
109        vector<unsigned char *> gid_idx_symbol_value_ptrs_;                             // gid indexed parallel arrays, symbol lengths and symbol values
110        vector<size_t> gid_idx_symbol_lengths_;                                                 
111       
112        //document indexed vectors
113        vector<size_t> doc_idx_gids_;                                                   // document indexed symbol gids
114       
115        StringPool<4096,100> symbol_value_pool_;
116       
117#ifdef USE_FUNCTION_OBJECTS
118
119        CmpS1 cmpS1;                                                                    // String comparison function objects
120        CmpS2 cmpS2;
121        CmpS3 cmpS3;
122        CmpS4 cmpS4;
123        CmpS5 cmpS5;
124        CmpS6 cmpS6;
125        CmpS7 cmpS7;
126        CmpS8 cmpS8;
127        CmpS9 cmpS9;
128
129        CmpS10 cmpS10;
130        CmpS11 cmpS11;
131        CmpS12 cmpS12;
132        CmpS13 cmpS13;
133        CmpS14 cmpS14;
134        CmpS15 cmpS15;
135
136        CmpS16 cmpS16;
137
138        CmpS17 cmpS17;
139        CmpS18 cmpS18;
140        CmpS19 cmpS19;
141       
142        CmpS20 cmpS20;
143        CmpS21 cmpS21;
144        CmpS22 cmpS22;
145        CmpS23 cmpS23;
146        CmpS24 cmpS24;
147        CmpS25 cmpS25;
148        CmpS26 cmpS26;
149        CmpS27 cmpS27;
150        CmpS28 cmpS28;
151        CmpS29 cmpS29;
152        CmpS30 cmpS30;
153       
154        CmpS31 cmpS31;
155        CmpS32 cmpS32;
156               
157#endif
158};
159
160#endif /* LSYMTAB_H_ */ 
161
162
163
164
165
Note: See TracBrowser for help on using the repository browser.