source: rtems/c/src/lib/libbsp/arm/nds/tools/ndstool/include/ndstree.h @ 32b8506

4.104.115
Last change on this file since 32b8506 was 32b8506, checked in by Ralf Corsepius <ralf.corsepius@…>, on 11/29/09 at 14:53:02

Whitespace removal.

  • Property mode set to 100644
File size: 1.4 KB
RevLine 
[9a12c7e5]1inline int cmp(const char *a, bool a_isdir, const char *b, bool b_isdir)
[311dfa6]2{
3        // oh... directory sort doesn't matter since we write out dir- and filenames seperately
4        //if (a_isdir && !b_isdir) return -1;
5        //if (b_isdir && !a_isdir) return +1;
6        return strcmp(a, b);
7}
8
9struct TreeNode
10{
11        unsigned int dir_id;            // directory ID in case of directory entry
[9a12c7e5]12        const char *name;               // file or directory name
[311dfa6]13        TreeNode *directory;            // nonzero indicates directory. first directory node is a dummy
14        TreeNode *prev, *next;          // linked list
15
16        TreeNode()
17        {
18                dir_id = 0;
19                name = "";
20                directory = 0;
21                prev = next = 0;
22        }
[32b8506]23
[311dfa6]24        // new entry in same directory
[9a12c7e5]25        TreeNode *New(const char *name, bool isdir)
[311dfa6]26        {
27                TreeNode *newNode = new TreeNode();
28                newNode->name = strdup(name);
29
30                TreeNode *node = this;
31
32                if (cmp(name, isdir, node->name, node->dir_id) < 0)     // prev
33                {
34                        while (cmp(name, isdir, node->name, node->dir_id) < 0)
35                        {
36                                if (node->prev)
37                                        node = node->prev;
38                                else
39                                        break;          // insert after dummy node
40                        }
41                }
42                else
43                {
44                        while (node->next && (cmp(name, isdir, node->next->name, node->next->dir_id) >= 0))
45                        {
46                                node = node->next;
47                        }
48                }
49
50                // insert after current node
51                newNode->prev = node;
52                newNode->next = node->next;
53                if (node->next) node->next->prev = newNode;
54                node->next = newNode;
55
56                return newNode;
57        }
58};
59
60TreeNode *ReadDirectory(TreeNode *node, char *path);
Note: See TracBrowser for help on using the repository browser.