void pf_list_move_list(PF_List *lst1, PF_List *lst2) { Node *curr = lst1->tail->next; while(curr != lst1->head) { pf_list_remove(lst1, curr); //printf("current list\n"); //pf_list_print(lst1); //clone node //move next pointer //add clone to lst2 //destroy node in memory Node* copy = node_clone(curr); node_destroy(curr); curr = NULL; curr = copy->next; //check to see if there is a duplicate //if there is a duplicate then choose the node with the lowest fscore Node *existing = pf_list_remove(lst2, copy); if(existing != NULL) { if(copy->F < existing->F) { pf_list_add(lst2, copy); } else { pf_list_add(lst2, existing); } } else { pf_list_add(lst2, copy); } //printf("open list\n"); //pf_list_print(lst2); //TODO reference to tail points to lst2 after added } }
static HRESULT WINAPI unknode_cloneNode( IXMLDOMNode *iface, VARIANT_BOOL pbool, IXMLDOMNode** outNode) { unknode *This = unknode_from_IXMLDOMNode( iface ); return node_clone(&This->node, pbool, outNode ); }
static HRESULT WINAPI domtext_cloneNode( IXMLDOMText *iface, VARIANT_BOOL deep, IXMLDOMNode** outNode) { domtext *This = impl_from_IXMLDOMText( iface ); TRACE("(%p)->(%d %p)\n", This, deep, outNode); return node_clone( &This->node, deep, outNode ); }
static HRESULT WINAPI domcdata_cloneNode( IXMLDOMCDATASection *iface, VARIANT_BOOL deep, IXMLDOMNode** outNode) { domcdata *This = impl_from_IXMLDOMCDATASection( iface ); TRACE("(%p)->(%d %p)\n", This, deep, outNode); return node_clone( &This->node, deep, outNode ); }
static HRESULT WINAPI dom_pi_cloneNode( IXMLDOMProcessingInstruction *iface, VARIANT_BOOL deep, IXMLDOMNode** outNode) { dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface ); TRACE("(%p)->(%d %p)\n", This, deep, outNode); return node_clone( &This->node, deep, outNode ); }
static HRESULT WINAPI entityref_cloneNode( IXMLDOMEntityReference *iface, VARIANT_BOOL deep, IXMLDOMNode** outNode) { entityref *This = impl_from_IXMLDOMEntityReference( iface ); TRACE("(%p)->(%d %p)\n", This, deep, outNode); return node_clone( &This->node, deep, outNode ); }
static tree_node_base* node_clone(tree_node_base* node, tree_node_base* parent, size_t node_size, dict_key_datum_clone_func clone_func) { if (!node) return NULL; tree_node_base* clone = MALLOC(node_size); if (!clone) return NULL; memcpy(clone, node, node_size); if (clone_func) clone_func(&clone->key, &clone->datum); clone->parent = parent; clone->llink = node_clone(node->llink, clone, node_size, clone_func); clone->rlink = node_clone(node->rlink, clone, node_size, clone_func); return clone; }
void* tree_clone(void* tree, size_t tree_size, size_t node_size, dict_key_datum_clone_func clone_func) { ASSERT(tree_size >= sizeof(tree_base)); ASSERT(node_size >= sizeof(tree_node_base)); tree_base* clone = MALLOC(tree_size); if (clone) { memcpy(clone, tree, tree_size); clone->root = node_clone(((tree_base*)tree)->root, NULL, node_size, clone_func); } return clone; }