File: pdbClass.h
/*************************************************************************/
/* DUCTAPE Version 2.0 */
/* Copyright (C) 2001 */
/* Forschungszentrum Juelich, Zentralinstitut fuer Angewandte Mathematik */
/*************************************************************************/
#ifndef __PDB_CLASS_H__
#define __PDB_CLASS_H__
#include "pdbGroup.h"
#include "pdbCRoutine.h"
/** \brief A class to define a super class.
*
* pdbBase describes a base class (super class) of a pdbClass. It provides
* methods to ask for the base class, its access mode (e.g., public or
* private), and whether the derivation was virtual.
**/
class pdbBase : public pdbLoc {
public:
/** A constructor with no arguments **/
pdbBase();
/** A constructor
*
* \param v the virtual type of this class.
* \param a the access type of this class.
* \param *base a pointer to the base class.
* \param *file a pointer to the source file.
* \param line the line number where this class begans.
* \param col the column number where this class begans.
**/
pdbBase(pdbItem::virt_t v, pdbItem::access_t a, const pdbClass *base,
pdbFile *file, int line, int col);
/** the virtual type of this class **/
pdbItem::virt_t virtuality() const;
/** the access type of this class **/
pdbItem::access_t access() const;
/** a pointer to the base class **/
const pdbClass *base() const;
/** is this class derivation virtual? **/
bool isVirtual() const;
void virtuality(pdbItem::virt_t v);
void access(pdbItem::access_t a);
void base(const pdbClass* base);
private:
pdbItem::virt_t virt;
pdbItem::access_t acs;
const pdbClass *bptr;
};
class pdbFriendFunc : public pdbLoc {
public:
pdbFriendFunc();
pdbFriendFunc(const pdbCRoutine *f, pdbFile *file, int line, int col);
const pdbCRoutine *friendFunc() const;
void friendFunc(const pdbCRoutine* f);
private:
const pdbCRoutine *fuptr;
};
class pdbFriendClass : public pdbLoc {
public:
pdbFriendClass();
pdbFriendClass(const pdbClass *c, pdbFile *file, int line, int col);
const pdbClass *friendClass() const;
void friendClass(const pdbClass* c);
private:
const pdbClass *cptr;
};
class pdbMethod : public pdbLoc {
public:
pdbMethod();
pdbMethod(const pdbCRoutine *f, pdbFile *file, int line, int col);
const pdbCRoutine *func() const;
void func(const pdbCRoutine* f);
private:
const pdbCRoutine *fptr;
};
ostream& operator<<(ostream& ostr, const pdbBase& b);
ostream& operator<<(ostream& ostr, const pdbFriendFunc& f);
ostream& operator<<(ostream& ostr, const pdbFriendClass& c);
ostream& operator<<(ostream& ostr, const pdbMethod& f);
/** \brief This class defines the attributes for a class.
*
* This class defines the genric class within a class hierarchy, and its associated
* friend classes.
**/
class pdbClass : public pdbGroup {
public:
pdbClass(int id);
pdbClass(const string& name, int id);
virtual ~pdbClass();
virtual ostream& print(ostream& ostr) const;
virtual void adjustPtrs(PDB* p);
virtual void process(PDB* p);
virtual dupl_t findDuplicate(pdbSimpleItem* r);
typedef vector<pdbBase *> basevec;
typedef vector<pdbClass *> classvec;
typedef vector<pdbMethod *> methodvec;
typedef vector<pdbFriendClass *> friendclassvec;
typedef vector<pdbFriendFunc *> friendfuncvec;
const basevec& baseClasses() const;
classvec& derivedClasses();
/** a vector listing the classes derived from this one. **/
const classvec& derivedClasses() const;
/** a vector of methods. **/
const methodvec& methods() const;
bool isABC() const;
/** a vector of friendly classes. **/
const friendclassvec& friendClasses() const;
/** a vector of friendly Routines. **/
const friendfuncvec& friendRoutines() const;
void addBaseClass(pdbItem::virt_t virt, pdbItem::access_t acs,
const pdbClass *bclass, pdbFile *file, int line, int col);
void addDerivedClass(pdbClass *dclass);
void addMethod(pdbCRoutine *func, pdbFile *file, int line, int col);
void addFriendClass(pdbClass *f, pdbFile *file, int line, int col);
void addFriendRoutine(pdbCRoutine *f, pdbFile *file, int line, int col);
private:
basevec base;
classvec drvd;
methodvec fmem;
bool abc;
friendclassvec fcl;
friendfuncvec fro;
};
#ifndef NO_INLINE
# include "pdbClass.inl"
#endif
#endif
Back to Index
Key to Colors and Styles