Ignore:
Timestamp:
Oct 28, 2008, 8:32:47 PM (12 years ago)
Author:
orlov
Message:
  • No hash-code for Expr-s in table.
  • Domain, Values and Entries return table contents in sorted order.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • to-imperative/trunk/c++/runtime/rf_table.cc

    r2752 r4007  
    2222  while (x != TableNode::nil) {
    2323    y=x;
    24     if ((_node->hash_key) == (x->hash_key)) {
    25       flag = Expr::compare(_node->key, x->key);
    26       if (!flag) {                      //   case 0 :  ==
    27         return;
    28       } else
    29         if (flag < 0) {            //   case < 0 : <
    30           x = x->left;
    31         } else {
    32           x = x->right;
    33           }
    34     } else 
    35       if ((_node->hash_key) < (x->hash_key)) {
    36         x = x->left;
    37       } else {
    38         x = x->right;
    39       }
     24    flag = Expr::compare(_node->key, x->key);
     25    if (!flag) {
     26      return;
     27    } else if (flag < 0) {
     28      x = x->left;
     29    } else {
     30      x = x->right;
     31    }
    4032  }
    4133  _node->p = y;
    4234  if (y == TableNode::nil) {
    4335    root = _node;
    44   } else {
    45     if ((_node->hash_key) == (y->hash_key)) {
    46       if (flag < 0) {
    47         y->left = _node;
    48       } else {
    49         y->right = _node;
    50       }
    51     } else {
    52       if ((_node->hash_key) < (y->hash_key)) {
    53         y->left = _node;
    54       } else {
    55         y->right = _node;
    56       }
    57     }
     36  } else if (flag < 0) {
     37    y->left = _node;
     38  } else {
     39    y->right = _node;
    5840  }
    5941}
     
    193175  }
    194176  if (y != _z) {
    195     _z->hash_key = y->hash_key;
    196177    _z->val = y->val;
    197178    _z->key = y->key;
     
    264245
    265246  TableNode* node;
    266   int hash, flag;
    267 
    268   hash = expr_hash(_key);
     247  int flag;
     248
    269249  node = root; 
    270250  while (node != TableNode::nil) {
    271     if (node->hash_key != hash) {
    272       if (hash < node->hash_key) {
    273         node = node->left;
    274       } else {
    275         node = node->right;
    276       }
    277     } else {
    278       flag = Expr::compare(_key, node->key);
    279       if (!flag) {            //   case 0 : ==
    280         return (node);
    281       }
    282       if (flag < 0) {         //   case < 0 : <
    283         node = node->left;
    284       } else {
    285         node = node->right;
    286       }   
    287     }
     251    flag = Expr::compare(_key, node->key);
     252    if (!flag) {            //   case 0 : ==
     253      return (node);
     254    }
     255    if (flag < 0) {         //   case < 0 : <
     256      node = node->left;
     257    } else {
     258      node = node->right;
     259    }   
    288260  }
    289261  return TableNode::nil;
     
    294266{   
    295267  TableNode* child;   
    296   _copy.hash_key = _tab.hash_key;
    297268  _copy.key = _tab.key;
    298269  _copy.val = _tab.val;
     
    328299      return false;
    329300    }
    330     if ( (_tab1.hash_key == _tab2.hash_key) &&
     301    if (
    331302      (_tab1.color == _tab2.color) &&
    332303      (_tab1.key == _tab2.key) &&
     
    359330    list_node( * _node.left, _res);
    360331  }
     332  _res = _res + (_node.key)();
    361333  if (_node.right != TableNode::nil) {
    362334    list_node( * _node.right, _res);
    363335  }
    364   _res = _res + (_node.key)();
    365336}
    366337
     
    370341    list_values( * _node.left, _res);
    371342  }
     343  _res = _res + _node.val();
    372344  if (_node.right != TableNode::nil) {
    373345    list_values( * _node.right, _res);
    374346  }
    375   _res = _res + _node.val();
    376347}
    377348
     
    381352    list_entries( * _node.left, _res);
    382353  }
     354  _res = _res + (_node.key() + _node.val())();
    383355  if (_node.right != TableNode::nil) {
    384356    list_entries( * _node.right, _res);
    385357  }
    386   _res = _res + (_node.key() + _node.val())();
    387 }
    388 
    389 
    390 }
     358}
     359
     360
     361}
Note: See TracChangeset for help on using the changeset viewer.