comparison mac/dw.m @ 1100:13ea7575d9e8

Fixed a problem with dw_tree_item_delete() due to earlier tree data storage changes. Also fixed a problem with dw_tree_insert_after() not inserting at the correct point. That change required additional bounds checks.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Mon, 25 Jul 2011 23:22:04 +0000
parents d1cea9be1436
children d7eafaa054ab
comparison
equal deleted inserted replaced
1099:d1cea9be1436 1100:13ea7575d9e8
1612 return nil; 1612 return nil;
1613 } 1613 }
1614 -(void)dealloc { UserData *root = userdata; _remove_userdata(&root, NULL, TRUE); [super dealloc]; } 1614 -(void)dealloc { UserData *root = userdata; _remove_userdata(&root, NULL, TRUE); [super dealloc]; }
1615 @end 1615 @end
1616 1616
1617 /* Dive into the tree showing all nodes */ 1617 /* Dive into the tree freeing all desired child nodes */
1618 void _free_tree_recurse(NSMutableArray *node, NSMutableArray *item) 1618 void _free_tree_recurse(NSMutableArray *node, NSMutableArray *item)
1619 { 1619 {
1620 if(node && ([node isMemberOfClass:[NSMutableArray class]])) 1620 if(node && ([node isKindOfClass:[NSArray class]]))
1621 { 1621 {
1622 int count = (int)[node count]; 1622 int count = (int)[node count];
1623 NSInteger index = -1;
1623 int z; 1624 int z;
1625
1626 if(item)
1627 index = [node indexOfObject:item];
1624 1628
1625 for(z=0;z<count;z++) 1629 for(z=0;z<count;z++)
1626 { 1630 {
1627 NSMutableArray *pnt = [node objectAtIndex:z]; 1631 NSMutableArray *pnt = [node objectAtIndex:z];
1628 NSMutableArray *children = nil; 1632 NSMutableArray *children = nil;
1629 1633
1630 if(pnt && [pnt isMemberOfClass:[NSMutableArray class]]) 1634 if(pnt && [pnt isKindOfClass:[NSArray class]])
1631 { 1635 {
1632 children = (NSMutableArray *)[pnt objectAtIndex:3]; 1636 children = (NSMutableArray *)[pnt objectAtIndex:3];
1633 } 1637 }
1634 1638
1635 if(item == pnt) 1639 if(z == index)
1636 { 1640 {
1637 _free_tree_recurse(children, NULL); 1641 _free_tree_recurse(children, NULL);
1638 [node removeObjectAtIndex:z]; 1642 [node removeObjectAtIndex:z];
1639 count = (int)[node count]; 1643 count = (int)[node count];
1644 index = -1;
1640 z--; 1645 z--;
1641 } 1646 }
1642 else if(item == NULL) 1647 else if(item == NULL)
1643 { 1648 {
1644 NSString *oldstr = [pnt objectAtIndex:1]; 1649 NSString *oldstr = [pnt objectAtIndex:1];
1788 } 1793 }
1789 } 1794 }
1790 if(after) 1795 if(after)
1791 { 1796 {
1792 NSInteger index = [children indexOfObject:after]; 1797 NSInteger index = [children indexOfObject:after];
1793 [children insertObject:item atIndex:index]; 1798 int count = (int)[children count];
1799 if(index != NSNotFound && (index+1) < count)
1800 [children insertObject:item atIndex:(index+1)];
1801 else
1802 [children addObject:item];
1794 } 1803 }
1795 else 1804 else
1796 { 1805 {
1797 [children addObject:item]; 1806 [children addObject:item];
1798 } 1807 }