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

4.104.11
Last change on this file since 9a12c7e5 was 9a12c7e5, checked in by Joel Sherrill <joel.sherrill@…>, on May 4, 2009 at 2:04:42 AM

2009-05-03 Joel Sherrill <joel.sherrill@…>

  • ndstool/include/banner.h, ndstool/include/header.h, ndstool/include/ndstree.h, ndstool/source/banner.cpp, ndstool/source/header.cpp, ndstool/source/ndscreate.cpp, ndstool/source/ndstool.cpp, ndstool/source/passme.cpp: Remove warnings for deprecated character conversions.
  • Property mode set to 100644
File size: 1.4 KB
Line 
1inline int cmp(const char *a, bool a_isdir, const char *b, bool b_isdir)
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
12        const char *name;               // file or directory name
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        }
23       
24        // new entry in same directory
25        TreeNode *New(const char *name, bool isdir)
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.