language/duchain
delayedtype.h
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef DELAYEDTYPE_H
00022 #define DELAYEDTYPE_H
00023
00024 #include "abstracttype.h"
00025 #include "../identifier.h"
00026
00027 namespace KDevelop
00028 {
00029 class DelayedTypeData;
00030
00039 class KDEVPLATFORMLANGUAGE_EXPORT DelayedType : public KDevelop::AbstractType
00040 {
00041 public:
00042 typedef TypePtr<DelayedType> Ptr;
00043
00045 enum Kind {
00046 Delayed ,
00047 Unresolved
00048 };
00049
00051 DelayedType();
00053 DelayedType(const DelayedType& rhs);
00055 DelayedType(DelayedTypeData& data);
00057 virtual ~DelayedType();
00058
00064 KDevelop::IndexedTypeIdentifier identifier() const;
00065
00071 void setIdentifier(const KDevelop::IndexedTypeIdentifier& identifier);
00072
00073 virtual QString toString() const;
00074
00075 virtual AbstractType* clone() const;
00076
00077 virtual bool equals(const AbstractType* rhs) const;
00078
00079 Kind kind() const;
00080 void setKind(Kind kind);
00081
00082 virtual uint hash() const;
00083
00084 virtual WhichType whichType() const;
00085
00086 enum {
00087 Identity = 8
00088 };
00089
00090 typedef DelayedTypeData Data;
00091
00092 protected:
00093 virtual void accept0 (KDevelop::TypeVisitor *v) const ;
00094 TYPE_DECLARE_DATA(DelayedType)
00095 };
00096
00097 template<>
00098 inline DelayedType* fastCast<DelayedType*>(AbstractType* from) {
00099 if(!from || from->whichType() != AbstractType::TypeDelayed)
00100 return 0;
00101 else
00102 return static_cast<DelayedType*>(from);
00103 }
00104
00105 }
00106
00107 #endif
00108
00109