Blame src/classlist.cpp

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