|
Packit |
1c1d7e |
/******************************************************************************
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
* Copyright (C) 1997-2015 by Dimitri van Heesch.
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
* Permission to use, copy, modify, and distribute this software and its
|
|
Packit |
1c1d7e |
* documentation under the terms of the GNU General Public License is hereby
|
|
Packit |
1c1d7e |
* granted. No representations are made about the suitability of this software
|
|
Packit |
1c1d7e |
* for any purpose. It is provided "as is" without express or implied warranty.
|
|
Packit |
1c1d7e |
* See the GNU General Public License for more details.
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
* Documents produced by Doxygen are derivative works derived from the
|
|
Packit |
1c1d7e |
* input used in their production; they are not affected by this license.
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#include "classlist.h"
|
|
Packit |
1c1d7e |
#include "config.h"
|
|
Packit |
1c1d7e |
#include "util.h"
|
|
Packit |
1c1d7e |
#include "outputlist.h"
|
|
Packit |
1c1d7e |
#include "language.h"
|
|
Packit |
1c1d7e |
#include "doxygen.h"
|
|
Packit |
1c1d7e |
#include "vhdldocgen.h"
|
|
Packit |
1c1d7e |
#include "defargs.h"
|
|
Packit |
1c1d7e |
#include "arguments.h"
|
|
Packit |
1c1d7e |
#include "groupdef.h"
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
ClassList::ClassList() : QList<ClassDef>()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
ClassList::~ClassList()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
static int compItems(const ClassDef *c1,const ClassDef *c2)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
static bool b = Config_getBool(SORT_BY_SCOPE_NAME);
|
|
Packit |
1c1d7e |
if (b)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
return qstricmp(c1->name(), c2->name());
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
return qstricmp(c1->className(), c2->className());
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
int ClassList::compareValues(const ClassDef *item1, const ClassDef *item2) const
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
return compItems(item1,item2);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
int ClassSDict::compareValues(const ClassDef *item1, const ClassDef *item2) const
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
return compItems(item1,item2);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
ClassListIterator::ClassListIterator(const ClassList &cllist) :
|
|
Packit |
1c1d7e |
QListIterator<ClassDef>(cllist)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
bool ClassSDict::declVisible(const ClassDef::CompoundType *filter) const
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
static bool hideUndocClasses = Config_getBool(HIDE_UNDOC_CLASSES);
|
|
Packit |
1c1d7e |
static bool extractLocalClasses = Config_getBool(EXTRACT_LOCAL_CLASSES);
|
|
Packit |
1c1d7e |
if (count()>0)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ClassSDict::Iterator sdi(*this);
|
|
Packit |
1c1d7e |
ClassDef *cd=0;
|
|
Packit |
1c1d7e |
for (sdi.toFirst();(cd=sdi.current());++sdi)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (cd->name().find('@')==-1 &&
|
|
Packit |
1c1d7e |
(filter==0 || *filter==cd->compoundType())
|
|
Packit |
1c1d7e |
)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
bool isLink = cd->isLinkable();
|
|
Packit |
1c1d7e |
if (isLink ||
|
|
Packit |
1c1d7e |
(!hideUndocClasses &&
|
|
Packit |
1c1d7e |
(!cd->isLocal() || extractLocalClasses)
|
|
Packit |
1c1d7e |
)
|
|
Packit |
1c1d7e |
)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
return TRUE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
return FALSE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void ClassSDict::writeDeclaration(OutputList &ol,const ClassDef::CompoundType *filter,
|
|
Packit |
1c1d7e |
const char *header,bool localNames)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
static bool extractPrivate = Config_getBool(EXTRACT_PRIVATE);
|
|
Packit |
1c1d7e |
if (count()>0)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ClassSDict::Iterator sdi(*this);
|
|
Packit |
1c1d7e |
ClassDef *cd=0;
|
|
Packit |
1c1d7e |
bool found=FALSE;
|
|
Packit |
1c1d7e |
for (sdi.toFirst();(cd=sdi.current());++sdi)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//printf(" ClassSDict::writeDeclaration for %s\n",cd->name().data());
|
|
Packit |
1c1d7e |
if (cd->name().find('@')==-1 &&
|
|
Packit |
1c1d7e |
!cd->isExtension() &&
|
|
Packit |
1c1d7e |
(cd->protection()!=Private || extractPrivate) &&
|
|
Packit |
1c1d7e |
(filter==0 || *filter==cd->compoundType())
|
|
Packit |
1c1d7e |
)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
cd->writeDeclarationLink(ol,found,header,localNames);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
if (found) ol.endMemberList();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void ClassSDict::writeDocumentation(OutputList &ol,Definition * container)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
static bool fortranOpt = Config_getBool(OPTIMIZE_FOR_FORTRAN);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
static bool inlineGroupedClasses = Config_getBool(INLINE_GROUPED_CLASSES);
|
|
Packit |
1c1d7e |
static bool inlineSimpleClasses = Config_getBool(INLINE_SIMPLE_STRUCTS);
|
|
Packit |
1c1d7e |
if (!inlineGroupedClasses && !inlineSimpleClasses) return;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
if (count()>0)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
bool found=FALSE;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
ClassSDict::Iterator sdi(*this);
|
|
Packit |
1c1d7e |
ClassDef *cd=0;
|
|
Packit |
1c1d7e |
for (sdi.toFirst();(cd=sdi.current());++sdi)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//printf("%s:writeDocumentation() %p linkable=%d embedded=%d container=%p partOfGroups=%d\n",
|
|
Packit |
1c1d7e |
// cd->name().data(),cd->getOuterScope(),cd->isLinkableInProject(),cd->isEmbeddedInOuterScope(),
|
|
Packit |
1c1d7e |
// container,cd->partOfGroups() ? cd->partOfGroups()->count() : 0);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
if (cd->name().find('@')==-1 &&
|
|
Packit |
1c1d7e |
cd->isLinkableInProject() &&
|
|
Packit |
1c1d7e |
cd->isEmbeddedInOuterScope() &&
|
|
Packit |
1c1d7e |
(container==0 || cd->partOfGroups()==0) // if container==0 -> show as part of the group docs, otherwise only show if not part of a group
|
|
Packit |
1c1d7e |
)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//printf(" showing class %s\n",cd->name().data());
|
|
Packit |
1c1d7e |
if (!found)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ol.writeRuler();
|
|
Packit |
1c1d7e |
ol.startGroupHeader();
|
|
Packit |
1c1d7e |
ol.parseText(fortranOpt?theTranslator->trTypeDocumentation():
|
|
Packit |
1c1d7e |
theTranslator->trClassDocumentation());
|
|
Packit |
1c1d7e |
ol.endGroupHeader();
|
|
Packit |
1c1d7e |
found=TRUE;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
cd->writeInlineDocumentation(ol);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
//-------------------------------------------
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void GenericsSDict::insert(const QCString &key,ClassDef *cd)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
int i=key.find('<');
|
|
Packit |
1c1d7e |
if (i==-1) return;
|
|
Packit |
1c1d7e |
ArgumentList argList;
|
|
Packit |
1c1d7e |
stringToArgumentList(key.mid(i),&argList);
|
|
Packit |
1c1d7e |
int c = argList.count();
|
|
Packit |
1c1d7e |
if (c==0) return;
|
|
Packit |
1c1d7e |
GenericsCollection *collection = m_dict.find(key.left(i));
|
|
Packit |
1c1d7e |
if (collection==0) // new name
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
collection = new GenericsCollection;
|
|
Packit |
1c1d7e |
m_dict.append(key.left(i),collection);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
if (collection->find(c)==0) // should always be 0!
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
collection->insert(c,cd);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
ClassDef *GenericsSDict::find(const QCString &key)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
int i=key.find('<');
|
|
Packit |
1c1d7e |
if (i==-1)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
GenericsCollection *collection = m_dict.find(key);
|
|
Packit |
1c1d7e |
if (collection && collection->count()==1)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QIntDictIterator<ClassDef> it(*collection);
|
|
Packit |
1c1d7e |
return it.current();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
GenericsCollection *collection = m_dict.find(key.left(i));
|
|
Packit |
1c1d7e |
if (collection)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
ArgumentList argList;
|
|
Packit |
1c1d7e |
stringToArgumentList(key.mid(i),&argList);
|
|
Packit |
1c1d7e |
int c = argList.count();
|
|
Packit |
1c1d7e |
return collection->find(c);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
return 0;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|