コード例 #1
0
ファイル: tree.c プロジェクト: Falheim/lagerhantering20
treenode_t* inorder_successor(treenode_t *treenode, char *name){
  treenode_t *current  = find_node(treenode, name);
  if (current == NULL){
    return NULL;
      }
  
  //case 1: node has right subtree//
  if ((current->right) != NULL){
    return minimum_Node(current->right);
  }

// case 2: no right subtree //
     else {
      treenode_t *successor = NULL;
      treenode_t *ancestor = treenode;
     while(ancestor != current){
       if (strcmp ((itemname(current->item)), (itemname(ancestor->item))) < 0){
       successor = ancestor;
       ancestor = ancestor->left;
     }
       else ancestor = ancestor->right;
     }
   return successor;
     }
}
コード例 #2
0
ファイル: tree.c プロジェクト: Falheim/lagerhantering20
treenode_t* find_node(treenode_t *treenode, char *name){
  if(treenode == NULL){
    return NULL;
  }
  else if (strcmp(name, itemname(treenode->item)) == 0){
    return treenode;
  }
  else if(strcmp(name, itemname(treenode->item)) > 0){
    return find_node(treenode->right, name);
      }
  else{
    return find_node(treenode->left, name);
      }
}
コード例 #3
0
ファイル: ExpressionItem.cpp プロジェクト: wangli1426/Claims
bool ExpressionItem::setTimeValue(const char * time_str) {
    this->type=const_type;
    this->return_type=t_time;
    this->_time=*(time_duration*)time_str;
    string itemname(time_str);
    this->item_name=itemname;
    return true;
}
コード例 #4
0
ファイル: tree.c プロジェクト: Falheim/lagerhantering20
treenode_t* tree_insert(treenode_t **treenode, item_t *item){
  if (treenode == NULL){
    (*treenode) = create_treenode(item);
    return 0; // Not sure it should return 0..
             //(just so it compiles for now) 
  }
  else if(strcmp(itemname(item), itemname((*treenode)->item)) < 0)
    (*treenode)->left= tree_insert(&(*treenode)->left , item);

  else if(strcmp(itemname(item), itemname((*treenode)->item)) == 0)
    (*treenode)->left= tree_insert(&(*treenode)->left , item);

    
    else (*treenode)->right = tree_insert(&(*treenode)->right, item);
  
  return *treenode;
}
コード例 #5
0
ファイル: ExpressionItem.cpp プロジェクト: wangli1426/Claims
bool ExpressionItem::setIntValue(const char* int_str) {
    this->type=const_type;
    this->return_type=t_int;
    this->content.data.value._int=atoi(int_str);
    string itemname(int_str);
    this->item_name=itemname;
    return true;
}
コード例 #6
0
ファイル: ExpressionItem.cpp プロジェクト: wangli1426/Claims
bool ExpressionItem::setDatetimeValue(const char * datetime_str) {
    this->type=const_type;
    this->return_type=t_datetime;
    this->_datetime=*(ptime*)datetime_str;
    string itemname(datetime_str);
    this->item_name=itemname;
    return true;
}
コード例 #7
0
ファイル: ExpressionItem.cpp プロジェクト: wangli1426/Claims
bool ExpressionItem::setULongValue(const char* u_long_str) {
    this->type=const_type;
    this->return_type=t_u_long;
    this->content.data.value._ulong=atol(u_long_str);
    string itemname(u_long_str);
    this->item_name=itemname;
    return true;
}
コード例 #8
0
ファイル: ExpressionItem.cpp プロジェクト: wangli1426/Claims
bool ExpressionItem::setDoubleValue(const char* double_str) {
    this->type=const_type;
    this->return_type=t_double;
    this->content.data.value._double=atof(double_str);
    string itemname(double_str);
    this->item_name=itemname;
    return true;
}
コード例 #9
0
ファイル: ExpressionItem.cpp プロジェクト: wangli1426/Claims
bool ExpressionItem::setFloatValue(const char* float_str) {
    this->type=const_type;
    this->return_type=t_float;
    this->content.data.value._float=atof(float_str);
    string itemname(float_str);
    this->item_name=itemname;
    return true;
}
コード例 #10
0
ファイル: tree.c プロジェクト: Falheim/lagerhantering20
void ordered_print(treenode_t *treenode){
  if(treenode == NULL){
    puts("No more items to print");
    return;
  }
  ordered_print(treenode->left);
  printf("%s", itemname(treenode->item));
  ordered_print(treenode->right);
}
コード例 #11
0
ファイル: ExpressionItem.cpp プロジェクト: wangli1426/Claims
bool ExpressionItem::setDecimalValue(const char * decimal_str) {
    this->type=const_type;
    this->return_type=t_decimal;
    NValue nvalue=*(NValue*)decimal_str;
    this->_decimal=nvalue;
    string itemname(decimal_str);
    this->item_name=itemname;
    return true;
}
コード例 #12
0
ファイル: tree.c プロジェクト: Falheim/lagerhantering20
treenode_t* tree_remove(treenode_t **treenode, char *name){


   if (*treenode == NULL){ 
    return *treenode;
  }
  
  if(strcmp(name, itemname((*treenode)->item)) < 0){
      (*treenode)->left = tree_remove(&(*treenode)->left, name);

  }
  
  if (strcmp(name, itemname((*treenode)->item)) > 0){
    (*treenode)->right = tree_remove(&(*treenode)->right, name);
  }
  
  
  else if ((*treenode)->left == NULL && (*treenode)->right == NULL){
	free(treenode);
      }

  /// Node has 1 child (right)
  
      else if ((*treenode)->left == NULL) {
	treenode_t *temp = (*treenode)->right;
	free(*treenode);
	return temp;
    }
  /// Node has 1 child (left)
  
      else if ((*treenode)->right == NULL){
	treenode_t*temp = (*treenode) ->left;
	free(*treenode);
	return temp;	
      }
  // Find inorder successor
  treenode_t *temp = inorder_successor((*treenode)->right, name);
  //store inorder successor in node
  (*treenode)->item = temp->item;
  //delete the inorder successor
  (*treenode)->right = tree_remove(&(*treenode)->right, itemname(temp->item));
  
  return *treenode;
      }