Revisão | ecdfc31b43580b7ecba270a10e36ce8c4f1f19ac (tree) |
---|---|
Hora | 2018-05-13 22:53:14 |
Autor | dhrname <dhrname@user...> |
Commiter | dhrname |
Add the ST_copyNode function
@@ -34,3 +34,8 @@ ST_Node ST_getLastChild(ST_Node); | ||
34 | 34 | /*ST_getPreviewNode 関数 |
35 | 35 | * 引数で指定されたノードにとって、前隣りのノードを取得*/ |
36 | 36 | ST_Node ST_getPreviewNode(ST_Node); |
37 | + | |
38 | +/*ST_copyNode 関数 | |
39 | + * 引数で指定されたノードのコピーを作成 | |
40 | + * 子ノードも含めてコピーする*/ | |
41 | +ST_Node ST_copyNode(ST_Node); |
@@ -963,3 +963,15 @@ ST_Node ST_getPreviewNode(ST_Node node) | ||
963 | 963 | { |
964 | 964 | return ST_getSecondTree(node); |
965 | 965 | } |
966 | + | |
967 | +/*ST_copyNode 関数 | |
968 | + * 引数で指定されたノードのコピーを作成 | |
969 | + * 子ノードも含めてコピーする*/ | |
970 | +ST_Node ST_copyNode(ST_Node node) | |
971 | +{ | |
972 | + if (ST_isEmpty(node)) | |
973 | + { | |
974 | + return ST_EMPTY; | |
975 | + } | |
976 | + return ST_createNode(ST_getNodeValue(node), ST_getLastChild(node), ST_getPreviewNode(node)); | |
977 | +} |
@@ -677,10 +677,18 @@ int main(int argc, char **argv) | ||
677 | 677 | assert( ST_getLastChild(node4) == node2); |
678 | 678 | assert( ST_getLastChild(node4) != node3); |
679 | 679 | assert( ST_getPreviewNode(node4) == node3); |
680 | + ST_Node node5 = ST_copyNode(node4); | |
681 | + assert( ST_isEmpty(ST_copyNode(ST_EMPTY)) ); | |
682 | + assert( ST_getNodeValue(node5) == node); | |
683 | + assert( ST_getNodeValue(node5) != node2); | |
684 | + assert( ST_getLastChild(node5) == node2); | |
685 | + assert( ST_getLastChild(node5) != node3); | |
686 | + assert( ST_getPreviewNode(node5) == node3); | |
680 | 687 | ST_freetree(node); |
681 | 688 | ST_freetree(node2); |
682 | 689 | ST_freetree(node3); |
683 | 690 | ST_freetree(node4); |
691 | + ST_freetree(node5); | |
684 | 692 | |
685 | 693 | errno = 0; |
686 | 694 | eprint_log("Error!\n"); |
@@ -752,6 +760,14 @@ int tests_invalid() { | ||
752 | 760 | assert(ST_isEmpty(ST_reverse(NULL))); |
753 | 761 | assert(ST_isEmpty(ST_reverse(ST_EMPTY))); |
754 | 762 | |
763 | + ST_createNode(NULL, ST_EMPTY, ST_EMPTY); | |
764 | + ST_createNode(ST_EMPTY, NULL, ST_EMPTY); | |
765 | + ST_createNode(ST_EMPTY, ST_EMPTY, NULL); | |
766 | + | |
767 | + assert( ST_isEmpty(ST_getNodeValue(NULL)) ); | |
768 | + assert( ST_isEmpty(ST_getLastChild(NULL)) ); | |
769 | + assert( ST_isEmpty(ST_getPreviewNode(NULL)) ); | |
770 | + | |
755 | 771 | printf("ended error test...\n"); |
756 | 772 | |
757 | 773 | return 0; |