languages/cpp/cpp_tags.h
Go to the documentation of this file.00001 // 00002 // 00003 // C++ Interface: cpp_tags 00004 // 00005 // Description: 00006 // 00007 // 00008 // Author: KDevelop Authors <kdevelop-devel@kdevelop.org>, (C) 2003 00009 // 00010 // Copyright: See COPYING file that comes with this distribution 00011 // 00012 // 00013 #ifndef CPP_TAGS_H 00014 #define CPP_TAGS_H 00015 00016 #include <qstring.h> 00017 #include <qstringlist.h> 00018 00019 template <class Tag> 00020 class CppBaseClass 00021 { 00022 public: 00023 CppBaseClass( Tag& tag ) 00024 : m_tag( tag ) { m_info.flags = tag.flags(); } 00025 00026 operator Tag& () { return asTag(); } 00027 Tag& asTag() { return m_tag; } 00028 00029 operator const Tag& () const { return asTag(); } 00030 const Tag& asTag() const { return m_tag; } 00031 00032 static QString format( const Tag& tag ) { return QString::null; } 00033 00034 int access() const 00035 { 00036 return m_info.data.access; 00037 } 00038 00039 void setAccess( int access ) 00040 { 00041 m_info.data.access = access; 00042 m_tag.setFlags( m_info.flags ); 00043 } 00044 00045 bool isVirtual() const 00046 { 00047 return m_info.data.isVirtual; 00048 } 00049 00050 void setVirtual( bool b ) 00051 { 00052 m_info.data.isVirtual = b; 00053 m_tag.setFlags( m_info.flags ); 00054 } 00055 00056 QString name() const 00057 { 00058 return m_tag.name(); 00059 } 00060 00061 void setName( const QString& name ) 00062 { 00063 m_tag.setName( name ); 00064 } 00065 00066 QString baseClass() const 00067 { 00068 return m_tag.attribute( "b" ).toString(); 00069 } 00070 00071 void setBaseClass( const QString& baseClass ) 00072 { 00073 m_tag.setAttribute( "b", baseClass ); 00074 } 00075 00076 private: 00077 Tag& m_tag; 00078 union 00079 { 00080 unsigned long flags; 00081 struct 00082 { 00083 unsigned long access: 3; 00084 unsigned long isVirtual: 1; 00085 } data; 00086 } m_info; 00087 }; 00088 00089 template <class Tag> 00090 class CppVariable 00091 { 00092 public: 00093 CppVariable( Tag& tag ) 00094 : m_tag( tag ) { m_info.flags = tag.flags(); } 00095 00096 operator Tag& () { return asTag(); } 00097 Tag& asTag() { return m_tag; } 00098 00099 operator const Tag& () const { return asTag(); } 00100 const Tag& asTag() const { return m_tag; } 00101 00102 static QString format( const Tag& tag ) { return QString::null; } 00103 00104 int access() const 00105 { 00106 return m_info.data.access; 00107 } 00108 00109 void setAccess( int access ) 00110 { 00111 m_info.data.access = access; 00112 m_tag.setFlags( m_info.flags ); 00113 } 00114 00115 bool isFriend() const 00116 { 00117 return m_info.data.isFriend; 00118 } 00119 00120 void setFriend( bool b ) 00121 { 00122 m_info.data.isFriend = b; 00123 m_tag.setFlags( m_info.flags ); 00124 } 00125 00126 bool isStatic() const 00127 { 00128 return m_info.data.isStatic; 00129 } 00130 00131 void setStatic( bool b ) 00132 { 00133 m_info.data.isStatic = b; 00134 m_tag.setFlags( m_info.flags ); 00135 } 00136 00137 QString type() const 00138 { 00139 return m_tag.attribute( "t" ).toString(); 00140 } 00141 00142 void setType( const QString& type ) 00143 { 00144 m_tag.setAttribute( "t", type ); 00145 } 00146 00147 QString name() const 00148 { 00149 return m_tag.name(); 00150 } 00151 00152 void setName( const QString& name ) 00153 { 00154 m_tag.setName( name ); 00155 } 00156 00157 private: 00158 Tag& m_tag; 00159 union 00160 { 00161 unsigned long flags; 00162 struct 00163 { 00164 unsigned long access: 3; 00165 unsigned long isStatic: 1; 00166 unsigned long isFriend: 1; 00167 } data; 00168 } m_info; 00169 }; 00170 00171 template <class Tag> 00172 class CppFunction 00173 { 00174 public: 00175 CppFunction( Tag& tag ) 00176 : m_tag( tag ) { m_info.flags = tag.flags(); } 00177 00178 operator Tag& () { return asTag(); } 00179 Tag& asTag() { return m_tag; } 00180 00181 operator const Tag& () const { return asTag(); } 00182 const Tag& asTag() const { return m_tag; } 00183 00184 static QString format( const Tag& tag ) { return QString::null; } 00185 00186 int access() const 00187 { 00188 return m_info.data.access; 00189 } 00190 00191 void setAccess( int access ) 00192 { 00193 m_info.data.access = access; 00194 m_tag.setFlags( m_info.flags ); 00195 } 00196 00197 bool isSignal() const 00198 { 00199 return bool( m_info.data.isSignal ); 00200 } 00201 00202 void setSignal( bool isSignal ) 00203 { 00204 m_info.data.isSignal = isSignal; 00205 m_tag.setFlags( m_info.flags ); 00206 } 00207 00208 bool isSlot() const 00209 { 00210 return bool( m_info.data.isSlot ); 00211 } 00212 00213 void setSlot( bool isSlot ) 00214 { 00215 m_info.data.isSlot = isSlot; 00216 m_tag.setFlags( m_info.flags ); 00217 } 00218 00219 bool isInline() const 00220 { 00221 return m_info.data.isInline; 00222 } 00223 00224 void setInline( bool b ) 00225 { 00226 m_info.data.isInline = b; 00227 m_tag.setFlags( m_info.flags ); 00228 } 00229 00230 bool isPure() const 00231 { 00232 return m_info.data.isPure; 00233 } 00234 00235 void setPure( bool b ) 00236 { 00237 m_info.data.isPure = b; 00238 m_tag.setFlags( m_info.flags ); 00239 } 00240 00241 bool isFriend() const 00242 { 00243 return m_info.data.isFriend; 00244 } 00245 00246 void setFriend( bool b ) 00247 { 00248 m_info.data.isFriend = b; 00249 m_tag.setFlags( m_info.flags ); 00250 } 00251 00252 bool isConst() const 00253 { 00254 return m_info.data.isConst; 00255 } 00256 00257 void setConst( bool b ) 00258 { 00259 m_info.data.isConst = b; 00260 m_tag.setFlags( m_info.flags ); 00261 } 00262 00263 bool isVolatile() const 00264 { 00265 return m_info.data.isVolatile; 00266 } 00267 00268 void setVolatile( bool b ) 00269 { 00270 m_info.data.isVolatile = b; 00271 m_tag.setFlags( m_info.flags ); 00272 } 00273 00274 bool isVirtual() const 00275 { 00276 return m_info.data.isVirtual; 00277 } 00278 00279 void setVirtual( bool b ) 00280 { 00281 m_info.data.isVirtual = b; 00282 m_tag.setFlags( m_info.flags ); 00283 } 00284 00285 bool isStatic() const 00286 { 00287 return m_info.data.isStatic; 00288 } 00289 00290 void setStatic( bool b ) 00291 { 00292 m_info.data.isStatic = b; 00293 m_tag.setFlags( m_info.flags ); 00294 } 00295 00296 00297 QString type() const 00298 { 00299 return m_tag.attribute( "t" ).toString(); 00300 } 00301 00302 void setType( const QString& type ) 00303 { 00304 m_tag.setAttribute( "t", type ); 00305 } 00306 00307 QString name() const 00308 { 00309 return m_tag.name(); 00310 } 00311 00312 void setName( const QString& name ) 00313 { 00314 m_tag.setName( name ); 00315 } 00316 00317 QStringList arguments() const 00318 { 00319 return m_tag.attribute( "a" ).toStringList(); 00320 } 00321 00322 void setArguments( const QStringList args ) 00323 { 00324 m_tag.setAttribute( "a", args ); 00325 } 00326 00327 QStringList argumentNames() const 00328 { 00329 return m_tag.attribute( "an" ).toStringList(); 00330 } 00331 00332 void setArgumentNames( const QStringList args ) 00333 { 00334 m_tag.setAttribute( "an", args ); 00335 } 00336 00337 private: 00338 Tag& m_tag; 00339 union 00340 { 00341 unsigned long flags; 00342 struct 00343 { 00344 unsigned long access: 3; 00345 unsigned long isInline: 1; 00346 unsigned long isVirtual: 1; 00347 unsigned long isStatic: 1; 00348 unsigned long isPure: 1; 00349 unsigned long isFriend: 1; 00350 unsigned long isConst: 1; 00351 unsigned long isValile: 1; 00352 unsigned long isSlot: 1; 00353 unsigned long isSignal: 1; 00354 } data; 00355 } m_info; 00356 }; 00357 00358 #endif