File: pdbItem.h


/*************************************************************************/
/* DUCTAPE Version 2.0                                                   */
/* Copyright (C) 2001                                                    */
/* Forschungszentrum Juelich, Zentralinstitut fuer Angewandte Mathematik */
/*************************************************************************/

#ifndef __PDB_ITEM_H__
#define __PDB_ITEM_H__

#include "pdb.h"
#include "pdbSimpleItem.h"
#include "pdbFile.h"  /*???*/

class pdbItem : public pdbSimpleItem {
public:
  enum access_t { AC_NA, AC_PRIV, AC_PROT, AC_PUB };
  enum routine_t { RO_NA, RO_ASM, RO_AUTO, RO_EXT, RO_STAT, RO_TPROTO,
                   RO_FEXT, RO_FPROG, RO_FBLDAT, RO_FINTRIN, RO_FINT,
                   RO_FSTFN, RO_FMPROC, RO_FUNSPEC, RO_FALIAS };
  enum rspec_t { RS_NA, RS_CONV, RS_CTOR, RS_DTOR, RS_OP };
  enum virt_t { VI_NO, VI_PURE, VI_VIRT };
  enum macro_t { MA_NA, MA_DEF, MA_UNDEF };
  enum templ_t { TE_NA, TE_CLASS, TE_FUNC, TE_MEMCLASS, TE_MEMFUNC,
                 TE_STATMEM, TE_TPARAM };
  enum float_t { FL_NA, FL_FLOAT, FL_DBL, FL_LONGDBL };
  enum int_t { I_NA, I_CHAR, I_SCHAR, I_UCHAR, I_SHORT, I_USHORT, I_INT,
               I_UINT, I_LONG, I_ULONG, I_LONGLONG, I_ULONGLONG, I_WCHAR };
  enum type_t { TY_NA = 0,
	  TY_BOOL  =0x0001, TY_ENUM =0x0002, TY_ERR  =0x0004, TY_FUNC  =0x0008,
	  TY_VOID  =0x0010, TY_INT  =0x0020, TY_FLOAT=0x0040, TY_PTR   =0x0080,
	  TY_REF   =0x0100, TY_ARRAY=0x0200, TY_TREF =0x0400, TY_PTRMEM=0x0800,
	  TY_TPARAM=0x1000, TY_WCHAR=0x2000,
	        TY_C_TYPE=0xffff,
          TY_FERR  =0x00010000, TY_FVOID =0x00020000, TY_FINT  =0x00040000,
	  TY_FLOGIC=0x00080000, TY_FFLOAT=0x00100000, TY_FFUNC =0x00200000,
	  TY_FCHAR =0x00400000, TY_FARRAY=0x00800000, TY_FCMPLX=0x01000000,
	  TY_FUNSPECFUNC=0x02000000,
	  TY_FBLDAT=0x04000000, TY_FMOD  =0x08000000, TY_FPTR  =0x10000000,
	        TY_F_TYPE=0x7fff0000,
          TY_GROUP=0x70007000
  };
  enum group_t { GR_NA, GR_CLASS, GR_STRUCT, GR_UNION, GR_TPROTO,
	         GR_FDERIVED, GR_FMODULE };
  enum link_t { LK_NA, LK_INTERNAL, LK_CXX, LK_C, LK_FINT, LK_F90 };
  enum mem_t { M_NA, M_TYPE, M_STATVAR, M_VAR, M_TEMPL };
  enum shape_t { SH_NA, SH_EXPLICIT, SH_ASIZE, SH_ASHAPE, SH_DEFERRED };
  enum qual_t { QL_NA, QL_CONST, QL_VOLATILE, QL_RESTRICT };
  
  pdbItem(int id);
  pdbItem(const string& name, int id);
  virtual ~pdbItem();

  const string& fullName() const;
  access_t access() const;
  const pdbGroup* parentGroup() const;
  pdbLoc& location();
  const pdbLoc& location() const;
  const pdbNamespace* parentNSpace() const;

  void fullName(const string& name);
  void access(access_t attr);
  void parentGroup(const pdbGroup* pgroup);
  void location(const pdbLoc& loc);
  void parentNSpace(const pdbNamespace* nspace);
  
  virtual ostream& print(ostream& ostr) const;
  virtual void adjustPtrs(PDB*);
  virtual void process(PDB*);
  virtual dupl_t findDuplicate(pdbSimpleItem* r);

  static const char *toName(access_t v);
  static const char *toName(routine_t v);
  static const char *toName(rspec_t v);
  static const char *toName(virt_t v);
  static const char *toName(macro_t v);
  static const char *toName(templ_t v);
  static const char *toName(float_t v);
  static const char *toName(int_t v);
  static const char *toName(type_t v);
  static const char *toName(qual_t v);
  static const char *toName(group_t v);
  static const char *toName(link_t v);
  static const char *toName(mem_t v);
  static const char *toName(shape_t v);

  static access_t  toAccess(const char *v);
  static routine_t toRoutine(const char *v);
  static rspec_t   toRSpecial(const char *v);
  static virt_t    toVirt(const char *v);
  static macro_t   toMacro(const char *v);
  static templ_t   toTempl(const char *v);
  static float_t   toFloat(const char* v);
  static int_t     toInt(const char* v);
  static type_t    toType(const char* v);
  static qual_t    toQual(const char* v);
  static group_t   toGroup(const char* v);
  static link_t    toLink(const char* v);
  static mem_t     toMem(const char* v);
  static shape_t   toShape(const char* v);

private:
  pdbLoc              lc;
  access_t            acs;
  const pdbGroup     *gptr;
  const pdbNamespace *nptr;
  string              full;
};

#ifndef NO_INLINE
#  include "pdbItem.inl"
#endif
#endif

Back to Index
Key to Colors and Styles