Source Code (Use browser search to find items of interest.)

Class Index

kdevelop'CParsedClassContainer (./kdevelop/kdevelop/classparser/ParsedClassContainer.h:30)

class CParsedClassContainer : public CParsedContainer
{

public: // Constructor & Destructor

  CParsedClassContainer();
  ~CParsedClassContainer();

protected: // Private attributes

  /** All parsed classes. */
  QDict<CParsedClass> classes;

public: // Public attributes

  /** Iterator for the classes */
  QDictIterator<CParsedClass> classIterator;

public: // Public queries

  /** Returns the number of parsed classes. */
  int classCount() { return classIterator.count(); }

  /** Tells if a class exists in the store. 
   * @param aName Classname to check if it exists.
   */
  bool hasClass( const char *aName );

  /** Fetches a class from the store by using its' name. 
   * @param aName Name of the class to fetch.
   * @return A pointer to the class(not to be deleted) or
   *  NULL if the class wasn't found.
   */
  CParsedClass *getClassByName( const char *aName );

  /** Get all classes in sorted order. 
   * @return A list of all classes in alpabetical order. 
   */
  QList<CParsedClass> *getSortedClassList();

  /** Get all classes referencing(==declared in) a certain file. 
   * @param aFile File to look for.
   * @returns A list of classnames. 
   */
  QList<CParsedClass> *getClassesReferencingFile( const char *aFile );

  /** Get all classnames in sorted order.
   * @return A list of all classnames in sorted order.
   */
  QStrList *getSortedClassNameList();

public: // Public Methods

  /** Remove all items in the store with references to the file. 
   * @param aFile The file to check references to.
   */
  void removeWithReferences( const char *aFile );

  /** Add a classdefintion. 
   * @param aClass Class to add.
   */
  void addClass( CParsedClass *aClass );

  /** Store a subclass pointer using its' hierarchy as the key.
   * @param key The hierarchy.
   * @param aClass The childclass to store.
   */
  void addSubClass( const char *key, CParsedClass *aClass );

  /** Remove a class from the store. 
   * @param aName Name of the class to remove
   */
  void removeClass( const char *aName );

  /** Clear the internal state. */
  void clear();
};

#include "ParsedClass.h"

kdevelop'CParsedClassContainer::CParsedClassContainer() (./kdevelop/kdevelop/classparser/ParsedClassContainer.cc:36)

CParsedClassContainer::CParsedClassContainer()
  : classIterator( classes )
{
  classes.setAutoDelete( true );
}

/*------------------- CParsedClassContainer::~CParsedClassContainer()
 * ~CParsedClassContainer()
 *   Destructor.
 *
 * Parameters:
 *   -
 * Returns:
 *   -
 *-----------------------------------------------------------------*/

kdevelop'CParsedClassContainer::~CParsedClassContainer() (./kdevelop/kdevelop/classparser/ParsedClassContainer.cc:51)

CParsedClassContainer::~CParsedClassContainer()
{
}

/*********************************************************************
 *                                                                   *
 *                          PUBLIC METHODS                           *
 *                                                                   *
 ********************************************************************/

/*------------------------------------- CParsedClassContainer::clear()
 * clear()
 *   Clear the internal state.
 *
 * Parameters:
 *   -
 * Returns:
 *   -
 *-----------------------------------------------------------------*/

kdevelop'CParsedClassContainer::clear() (./kdevelop/kdevelop/classparser/ParsedClassContainer.cc:70)

void CParsedClassContainer::clear()
{
  CParsedContainer::clear();

  classes.clear();
}

/*--------------------------------- CParsedClassContainer::addClass()
 * addClass()
 *   Add a class to the store.
 *
 * Parameters:
 *   aClass        The class to add.
 *
 * Returns:
 *   -
 *-----------------------------------------------------------------*/

kdevelop'CParsedClassContainer::addClass() (./kdevelop/kdevelop/classparser/ParsedClassContainer.cc:87)

void CParsedClassContainer::addClass( CParsedClass *aClass )
{
  assert( aClass != NULL );
  assert( !aClass->name.isEmpty() );
  assert( !hasClass( aClass->name ) );

  classes.insert( aClass->name, aClass );
}

/*------------------------------- CParsedClassContainer::addSubClass()
 * addSubClass()
 *   Store a subclass pointer using its' hierarchy as the key.
 *
 * Parameters:
 *   key           The hierarchy.
 *   aClass        The subclass to store.
 *
 * Returns:
 *   -
 *-----------------------------------------------------------------*/

kdevelop'CParsedClassContainer::addSubClass() (./kdevelop/kdevelop/classparser/ParsedClassContainer.cc:107)

void CParsedClassContainer::addSubClass( const char *key, 
                                         CParsedClass *aClass )
{
  assert( aClass != NULL );
  assert( !aClass->name.isEmpty() );
  assert( key != NULL );

  classes.insert( key, aClass );
}

/*------------------------------ CParsedClassContainer::removeClass()
 * removeClass()
 *   Remove a class from the store.
 *
 * Parameters:
 *   aName        Name of the class to remove
 *
 * Returns:
 *   -
 *-----------------------------------------------------------------*/

kdevelop'CParsedClassContainer::removeClass() (./kdevelop/kdevelop/classparser/ParsedClassContainer.cc:127)

void CParsedClassContainer::removeClass( const char *aName )
{
  assert( aName != NULL );
  assert( strlen( aName ) > 0 );
  assert( hasClass( aName ) );

  classes.remove( aName );
}

/*---------------------- CParsedClassContainer::removeWithReferences()
 * removeWithReferences()
 *   Remove all items in the store with references to the file.
 *
 * Parameters:
 *   aFile          The file.
 *
 * Returns:
 *   -
 *-----------------------------------------------------------------*/

kdevelop'CParsedClassContainer::removeWithReferences() (./kdevelop/kdevelop/classparser/ParsedClassContainer.cc:146)

void CParsedClassContainer::removeWithReferences( const char *aFile )
{
  CParsedContainer::removeWithReferences( aFile );
}

/*********************************************************************
 *                                                                   *
 *                          PUBLIC QUERIES                           *
 *                                                                   *
 ********************************************************************/

/*--------------------------------- CParsedClassContainer::hasClass()
 * hasClass()
 *   Tells if a class exist in the store.
 *
 * Parameters:
 *   aName          Name of the class to check.
 *
 * Returns:
 *   bool           Result of the lookup.
 *-----------------------------------------------------------------*/

kdevelop'CParsedClassContainer::hasClass() (./kdevelop/kdevelop/classparser/ParsedClassContainer.cc:167)

bool CParsedClassContainer::hasClass( const char *aName )
{
  return classes.find( aName ) != NULL;
}

/*---------------------------- CParsedClassContainer::getClassByName()
 * getClassByName()
 *   Get a class or subclass from the container by using its' name.
 *
 * Parameters:
 *   aName          Name of the class to fetch.
 *
 * Returns:
 *   CParsedClass * The class we looked for.
 *   NULL           Otherwise.
 *-----------------------------------------------------------------*/

kdevelop'CParsedClassContainer::getClassByName() (./kdevelop/kdevelop/classparser/ParsedClassContainer.cc:183)

CParsedClass *CParsedClassContainer::getClassByName( const char *aName )
{
  assert( aName != NULL );

  CParsedClass *aClass;

  aClass = classes.find( aName );

  return aClass;
}

/*------------------------ CParsedClassContainer::getSortedClassList()
 * getSortedClassList()
 *   Get all classes in sorted order.
 *
 * Parameters:
 *   -
 * Returns:
 *   QList<CParsedClass> * The classes.
 *-----------------------------------------------------------------*/

kdevelop'CParsedClassContainer::getSortedClassList() (./kdevelop/kdevelop/classparser/ParsedClassContainer.cc:203)

QList<CParsedClass> *CParsedClassContainer::getSortedClassList()
{
  QList<CParsedClass> *retVal = new QList<CParsedClass>();
  QStrList srted;
  char *str;

  retVal->setAutoDelete( false );

  // Ok... This sucks. But I'm lazy.
  for( classIterator.toFirst();
       classIterator.current();
       ++classIterator )
  {
    // Only add non-subclasses.
    if( !classIterator.current()->isSubClass() )
      srted.inSort( classIterator.current()->name );
  }

  for( str = srted.first();
       str != NULL;
       str = srted.next() )
  {
    retVal->append( getClassByName( str ) );
  }

  return retVal;
}

/*-------------------- CParsedClassContainer::getSortedClassNameList()
 * getSortedClassNameList()
 *   Get all classnames in sorted order.
 *
 * Parameters:
 *   -
 * Returns:
 *   QStrList * The classnames.
 *-----------------------------------------------------------------*/

kdevelop'CParsedClassContainer::getSortedClassNameList() (./kdevelop/kdevelop/classparser/ParsedClassContainer.cc:240)

QStrList *CParsedClassContainer::getSortedClassNameList()
{
  QStrList * retVal = new QStrList();
  
  // Iterate over all classes in the store.
  for( classIterator.toFirst();
       classIterator.current();
       ++classIterator )
  {
    // Only add non-subclasses.
    if( !classIterator.current()->isSubClass() )
      retVal->inSort( classIterator.current()->name );
  }

  return retVal;
}

/*----------------- CParsedClassContainer::getClassesReferencingFile()
 * getClassesReferencingFile()
 *   Get all classes referencing(==declared in) a certain file. 
 *
 * Parameters:
 *   aFile                 File to look for.
 * Returns:
 *   QList<CParsedClass> * The classes.
 *-----------------------------------------------------------------*/

kdevelop'CParsedClassContainer::getClassesReferencingFile() (./kdevelop/kdevelop/classparser/ParsedClassContainer.cc:266)

QList<CParsedClass> *CParsedClassContainer::getClassesReferencingFile( const char *aFile )
{
  QList<CParsedClass> *retVal = new QList<CParsedClass>;

  retVal->setAutoDelete( false );

  // Iterate over all classes in the store.
  for( classIterator.toFirst();
       classIterator.current();
       ++classIterator )
  {
    if( classIterator.current()->isSubClass() &&
        classIterator.current()->declaredInFile == aFile )
      retVal->append( classIterator.current() );
  }

  return retVal;
}