diff options
Diffstat (limited to 'src/filename.cpp')
-rw-r--r-- | src/filename.cpp | 144 |
1 files changed, 144 insertions, 0 deletions
diff --git a/src/filename.cpp b/src/filename.cpp new file mode 100644 index 0000000..260ef2b --- /dev/null +++ b/src/filename.cpp @@ -0,0 +1,144 @@ +/****************************************************************************** + * + * $Id: filename.cpp,v 1.18 2001/03/19 19:27:40 root Exp $ + * + * Copyright (C) 1997-2012 by Dimitri van Heesch. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation under the terms of the GNU General Public License is hereby + * granted. No representations are made about the suitability of this software + * for any purpose. It is provided "as is" without express or implied warranty. + * See the GNU General Public License for more details. + * + * Documents produced by Doxygen are derivative works derived from the + * input used in their production; they are not affected by this license. + * + */ + +#include "filename.h" +#include "util.h" + +FileName::FileName(const char *fn,const char *n) : FileList() +{ + setAutoDelete(TRUE); + fName=fn; + name=n; +} + +FileName::~FileName() +{ +} + + +void FileName::generateDiskNames() +{ + //QCString commonPrefix; + FileDef *fd=first(); + int count=0; + while (fd) + { + if (!fd->isReference()) count++; + fd=next(); + } + if (count==1) + { + fd=first(); + // skip references + while (fd && fd->isReference()) fd=next(); + // name if unique, so diskname is simply the name + //printf("!!!!!!!! Unique disk name=%s for fd=%s\n",name.data(),fd->diskname.data()); + fd->diskname=name.copy(); + } + else if (count>1) // multiple occurrences of the same file name + { + //printf("Multiple occurrences of %s\n",name.data()); + int i=0,j=0; + bool found=FALSE; + while (!found) // search for the common prefix of all paths + { + fd=first(); + while (fd && fd->isReference()) fd=next(); + char c=fd->path.at(i); + if (c=='/') j=i; // remember last position of dirname + fd=next(); + while (fd && !found) + { + if (!fd->isReference()) + { + //printf("i=%d j=%d fd->path=`%s' fd->name=`%s'\n",i,j,fd->path.left(i).data(),fd->name().data()); + if (i==(int)fd->path.length()) + { + //warning("Warning: Input file %s found multiple times!\n" + // " The generated documentation for this file may not be correct!\n",fd->absFilePath().data()); + found=TRUE; + } + else if (fd->path[i]!=c) + { + found=TRUE; + } + } + fd=next(); + } + i++; + } + fd=first(); + while (fd) + { + //printf("fd->setName(%s)\n",(fd->path.right(fd->path.length()-j-1)+name).data()); + if (!fd->isReference()) + { + QCString prefix = fd->path.right(fd->path.length()-j-1); + fd->setName(prefix+name); + //printf("!!!!!!!! non unique disk name=%s for fd=%s\n",(prefix+name).data(),fd->diskname.data()); + fd->diskname=prefix+name; + } + fd=next(); + } + } +} + +int FileName::compareItems(GCI item1, GCI item2) +{ + FileName *f1=(FileName *)item1; + FileName *f2=(FileName *)item2; + return stricmp(f1->fileName(),f2->fileName()); +} + +FileNameIterator::FileNameIterator(const FileName &fname) : + QListIterator<FileDef>(fname) +{ +} + +FileNameList::FileNameList() : QList<FileName>() +{ +} + +FileNameList::~FileNameList() +{ +} + +void FileNameList::generateDiskNames() +{ + FileName *fn=first(); + while (fn) + { + fn->generateDiskNames(); + fn=next(); + } +} + +int FileNameList::compareItems(GCI item1, GCI item2) +{ + FileName *f1=(FileName *)item1; + FileName *f2=(FileName *)item2; + //printf("FileNameList::compareItems `%s'<->`%s'\n", + // f1->fileName(),f2->fileName()); + return Config_getBool("FULL_PATH_NAMES") ? + stricmp(f1->fullName(),f2->fullName()) : + stricmp(f1->fileName(),f2->fileName()); +} + +FileNameListIterator::FileNameListIterator(const FileNameList &fnlist) : + QListIterator<FileName>(fnlist) +{ +} |