language/duchain
arraytype.h
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef ARRAYTYPE_H
00022 #define ARRAYTYPE_H
00023
00024 #include "abstracttype.h"
00025
00026 namespace KDevelop
00027 {
00028 class ArrayTypeData;
00029
00030 class KDEVPLATFORMLANGUAGE_EXPORT ArrayType : public AbstractType
00031 {
00032 public:
00033 typedef TypePtr<ArrayType> Ptr;
00034
00036 ArrayType();
00038 ArrayType(const ArrayType& rhs);
00040 ArrayType(ArrayTypeData& data);
00042 virtual ~ArrayType();
00043
00044 virtual AbstractType* clone() const;
00045
00046 virtual bool equals(const AbstractType* rhs) const;
00047
00054 int dimension () const;
00055
00061 void setDimension(int dimension);
00062
00068 AbstractType::Ptr elementType () const;
00069
00075 void setElementType(AbstractType::Ptr type);
00076
00077 virtual QString toString() const;
00078
00079 virtual uint hash() const;
00080
00081 virtual WhichType whichType() const;
00082
00083 virtual void exchangeTypes( TypeExchanger* exchanger );
00084
00085 enum {
00086 Identity = 7
00087 };
00088
00089 typedef ArrayTypeData Data;
00090
00091 protected:
00092 virtual void accept0 (TypeVisitor *v) const;
00093
00094 TYPE_DECLARE_DATA(ArrayType)
00095 };
00096
00097 template<>
00098 inline ArrayType* fastCast<ArrayType*>(AbstractType* from) {
00099 if(!from || from->whichType() != AbstractType::TypeArray)
00100 return 0;
00101 else
00102 return static_cast<ArrayType*>(from);
00103 }
00104
00105 }
00106
00107 #endif // TYPESYSTEM_H
00108
00109