Chameleon

Chameleon Svn Source Tree

Root/branches/xZenu/src/util/doxygen/src/filename.cpp

Source at commit 1322 created 12 years 8 months ago.
By meklort, Add doxygen to utils folder
1/******************************************************************************
2 *
3 * $Id: filename.cpp,v 1.18 2001/03/19 19:27:40 root Exp $
4 *
5 * Copyright (C) 1997-2011 by Dimitri van Heesch.
6 *
7 * Permission to use, copy, modify, and distribute this software and its
8 * documentation under the terms of the GNU General Public License is hereby
9 * granted. No representations are made about the suitability of this software
10 * for any purpose. It is provided "as is" without express or implied warranty.
11 * See the GNU General Public License for more details.
12 *
13 * Documents produced by Doxygen are derivative works derived from the
14 * input used in their production; they are not affected by this license.
15 *
16 */
17
18#include "filename.h"
19#include "util.h"
20
21FileName::FileName(const char *fn,const char *n) : FileList()
22{
23 setAutoDelete(TRUE);
24 fName=fn;
25 name=n;
26}
27
28FileName::~FileName()
29{
30}
31
32
33void FileName::generateDiskNames()
34{
35 //QCString commonPrefix;
36 FileDef *fd=first();
37 int count=0;
38 while (fd)
39 {
40 if (!fd->isReference()) count++;
41 fd=next();
42 }
43 if (count==1)
44 {
45 fd=first();
46 // skip references
47 while (fd && fd->isReference()) fd=next();
48 // name if unique, so diskname is simply the name
49 //printf("!!!!!!!! Unique disk name=%s for fd=%s\n",name.data(),fd->diskname.data());
50 fd->diskname=name.copy();
51 }
52 else if (count>1) // multiple occurrences of the same file name
53 {
54 //printf("Multiple occurrences of %s\n",name.data());
55 int i=0,j=0;
56 bool found=FALSE;
57 while (!found) // search for the common prefix of all paths
58 {
59 fd=first();
60 while (fd && fd->isReference()) fd=next();
61 char c=fd->path.at(i);
62 if (c=='/') j=i; // remember last position of dirname
63 fd=next();
64 while (fd && !found)
65 {
66 if (!fd->isReference())
67 {
68 //printf("i=%d j=%d fd->path=`%s' fd->name=`%s'\n",i,j,fd->path.left(i).data(),fd->name().data());
69 if (i==(int)fd->path.length())
70 {
71 //warning("Warning: Input file %s found multiple times!\n"
72 // " The generated documentation for this file may not be correct!\n",fd->absFilePath().data());
73 found=TRUE;
74 }
75 else if (fd->path[i]!=c)
76 {
77 found=TRUE;
78 }
79 }
80 fd=next();
81 }
82 i++;
83 }
84 fd=first();
85 while (fd)
86 {
87 //printf("fd->setName(%s)\n",(fd->path.right(fd->path.length()-j-1)+name).data());
88 if (!fd->isReference())
89 {
90 QCString prefix = fd->path.right(fd->path.length()-j-1);
91 fd->setName(prefix+name);
92 //printf("!!!!!!!! non unique disk name=%s for fd=%s\n",(prefix+name).data(),fd->diskname.data());
93 fd->diskname=prefix+name;
94 }
95 fd=next();
96 }
97 }
98}
99
100int FileName::compareItems(GCI item1, GCI item2)
101{
102 FileName *f1=(FileName *)item1;
103 FileName *f2=(FileName *)item2;
104 return stricmp(f1->fileName(),f2->fileName());
105}
106
107FileNameIterator::FileNameIterator(const FileName &fname) :
108 QListIterator<FileDef>(fname)
109{
110}
111
112FileNameList::FileNameList() : QList<FileName>()
113{
114}
115
116FileNameList::~FileNameList()
117{
118}
119
120void FileNameList::generateDiskNames()
121{
122 FileName *fn=first();
123 while (fn)
124 {
125 fn->generateDiskNames();
126 fn=next();
127 }
128}
129
130int FileNameList::compareItems(GCI item1, GCI item2)
131{
132 FileName *f1=(FileName *)item1;
133 FileName *f2=(FileName *)item2;
134 //printf("FileNameList::compareItems `%s'<->`%s'\n",
135 // f1->fileName(),f2->fileName());
136 return Config_getBool("FULL_PATH_NAMES") ?
137 stricmp(f1->fullName(),f2->fullName()) :
138 stricmp(f1->fileName(),f2->fileName());
139}
140
141FileNameListIterator::FileNameListIterator(const FileNameList &fnlist) :
142 QListIterator<FileName>(fnlist)
143{
144}
145

Archive Download this file

Revision: 1322