aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHugo Hörnquist <hugo@lysator.liu.se>2019-02-26 16:08:27 +0100
committerHugo Hörnquist <hugo@lysator.liu.se>2019-02-26 16:08:27 +0100
commit709b1e168cdb21db23ad4d1c80c69d0a66135bde (patch)
tree2fcb799b20d5d946fb38f73945be6899504ed530
parentFix KEYS(TRIE(T)). (diff)
downloadcalp-709b1e168cdb21db23ad4d1c80c69d0a66135bde.tar.gz
calp-709b1e168cdb21db23ad4d1c80c69d0a66135bde.tar.xz
Fix DEEP_COPY(TRIE(T)).
-rw-r--r--trie.inc.h21
1 files changed, 11 insertions, 10 deletions
diff --git a/trie.inc.h b/trie.inc.h
index 92bfb0f9..20cc93b5 100644
--- a/trie.inc.h
+++ b/trie.inc.h
@@ -171,20 +171,21 @@ FMT_F(TRIE(TYPE)) {
}
int DEEP_COPY(TRIE_NODE(TYPE)) (TRIE_NODE(TYPE)* dest, TRIE_NODE(TYPE)* src) {
- if (dest == NULL) return 1;
- if (dest->value != NULL) {
- RENEW(TYPE, src->value);
- DEEP_COPY(TYPE)(src->value, dest->value);
+ dest->c = src->c;
+
+ if (src->value != NULL) {
+ RENEW(TYPE, dest->value);
+ DEEP_COPY(TYPE)(dest->value, src->value);
}
- if (dest->next != NULL) {
- RENEW(TRIE_NODE(TYPE), src->next, dest->c);
- DEEP_COPY(TRIE_NODE(TYPE))(src->next, dest->next);
+ if (src->next != NULL) {
+ RENEW(TRIE_NODE(TYPE), dest->next, '\0');
+ DEEP_COPY(TRIE_NODE(TYPE))(dest->next, src->next);
}
- if (dest->child != NULL) {
- RENEW(TRIE_NODE(TYPE), src->child, dest->c);
- DEEP_COPY(TRIE_NODE(TYPE))(src->child, dest->child);
+ if (src->child != NULL) {
+ RENEW(TRIE_NODE(TYPE), dest->child, '\0');
+ DEEP_COPY(TRIE_NODE(TYPE))(dest->child, src->child);
}
return 0;