[723] | 1 | function tree = copy(tree,subuid,uid) |
---|
| 2 | % XMLTREE/COPY Copy Method (copy a subtree in another branch) |
---|
| 3 | % FORMAT tree = copy(tree,subuid,uid) |
---|
| 4 | % |
---|
| 5 | % tree - XMLTree object |
---|
| 6 | % subuid - UID of the subtree to copy |
---|
| 7 | % uid - UID of the element where the subtree must be duplicated |
---|
| 8 | %_______________________________________________________________________ |
---|
| 9 | % |
---|
| 10 | % Copy a subtree to another branch |
---|
| 11 | % The tree parameter must be in input AND in output |
---|
| 12 | %_______________________________________________________________________ |
---|
| 13 | % @(#)copy.m Guillaume Flandin 02/04/08 |
---|
| 14 | |
---|
| 15 | error(nargchk(2,3,nargin)); |
---|
| 16 | if nargin == 2 |
---|
| 17 | uid = parent(tree,subuid); |
---|
| 18 | end |
---|
| 19 | |
---|
| 20 | l = length(tree); |
---|
| 21 | tree = sub_copy(tree,subuid,uid); |
---|
| 22 | tree.tree{uid}.contents = [tree.tree{uid}.contents l+1]; |
---|
| 23 | |
---|
| 24 | % pour que la copie soit a cote de l'original et pas a la fin ? |
---|
| 25 | % contents = get(tree,parent,'contents'); |
---|
| 26 | % i = find(contents==uid); |
---|
| 27 | % tree = set(tree,parent,'contents',[contents(1:i) l+1 contents(i+1:end)]); |
---|
| 28 | |
---|
| 29 | %======================================================================= |
---|
| 30 | function tree = sub_copy(tree,uid,p) |
---|
| 31 | |
---|
| 32 | l = length(tree); |
---|
| 33 | tree.tree{l+1} = tree.tree{uid}; |
---|
| 34 | tree.tree{l+1}.uid = l+1; |
---|
| 35 | tree.tree{l+1}.parent = p; |
---|
| 36 | tree.tree{l+1}.contents = []; |
---|
| 37 | if isfield(tree.tree{uid},'contents') |
---|
| 38 | contents = get(tree,uid,'contents'); |
---|
| 39 | m = length(tree); |
---|
| 40 | for i=1:length(contents) |
---|
| 41 | tree.tree{l+1}.contents = [tree.tree{l+1}.contents m+1]; |
---|
| 42 | tree = sub_copy(tree,contents(i),l+1); |
---|
| 43 | m = length(tree); |
---|
| 44 | end |
---|
| 45 | end |
---|