source: to-imperative/trunk/runtime/rf_table.hh @ 2040

Last change on this file since 2040 was 2040, checked in by orlov, 14 years ago
  • New RTS option -break -- for breaking in functions compiled with -dbg.
  • Table support for Values and Entries new library functions.
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 1.8 KB
Line 
1#ifndef __rf_table_hh__
2#define __rf_table_hh__
3
4#include "rf_object.hh"
5#include "rf_expr.hh"
6#include "rf_types.hh"
7
8namespace rftype
9{
10
11using namespace rfrt; 
12 
13class TableNode;
14
15class Table :
16    public Object
17{
18  private :
19 
20  static ObjectRegister reg;
21  TableNode* root;    // root of RB-tree
22  static size_t count; 
23
24  void insert_node (TableNode*);
25  void insert_node_RB (TableNode*);
26  void left_rotate_RB (TableNode*);
27  void right_rotate_RB (TableNode*);
28  TableNode* search_node (Expr const&);
29  void delete_fixup_RB (TableNode*);
30  TableNode* delete_node_RB (TableNode*);
31
32  public :
33
34  inline Table ();
35  inline Table (Table const&);
36  inline ~Table();
37  inline void unbind (Expr& _key);
38  inline bool lookup (Expr const& _key, Expr& _val);
39  inline bool in_table (Expr const& _key);
40  inline Expr domain () const;
41  inline Expr values () const;
42  inline Expr entries () const;
43  inline void replace_table (Table const& _tab);
44  inline void bind (Expr const& _key, Expr const& _val);
45  inline unsigned get_type () const;
46  inline uint32_t hash () const;
47  inline bool operator == (Object const&) const; 
48  inline pxx::WString to_string () const;
49};
50 
51class TableNode 
52{
53  friend class Table;
54
55  private: 
56       
57  int hash_key;
58  enum {BLACK, RED} color;
59  Expr key;       // key-expression
60  Expr val;       // value-expression
61  TableNode* left;    // left child
62  TableNode* right;   // right child
63  TableNode* p;       // parent   
64
65  static TableNode* nil;   
66
67  friend void list_node (TableNode const&, Expr&) ;
68  friend void list_values (TableNode const&, Expr&) ;
69  friend void list_entries (TableNode const&, Expr&) ;
70  friend void copy_tree (TableNode const&, TableNode&) ;
71  friend void delete_tree (TableNode*) ;
72  friend bool table_equal (TableNode const&, TableNode const&) ;
73};
74
75}
76
77
78#endif      //__rf_table_hh__
Note: See TracBrowser for help on using the repository browser.