KDevelop API Documentation

lib/catalog/tag.h

Go to the documentation of this file.
00001 /* This file is part of KDevelop 00002 Copyright (C) 2003 Roberto Raggi <roberto@kdevelop.org> 00003 00004 This library is free software; you can redistribute it and/or 00005 modify it under the terms of the GNU Library General Public 00006 License as published by the Free Software Foundation; either 00007 version 2 of the License, or (at your option) any later version. 00008 00009 This library is distributed in the hope that it will be useful, 00010 but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00012 Library General Public License for more details. 00013 00014 You should have received a copy of the GNU Library General Public License 00015 along with this library; see the file COPYING.LIB. If not, write to 00016 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 00017 Boston, MA 02111-1307, USA. 00018 */ 00019 00020 #ifndef TAG_H 00021 #define TAG_H 00022 00023 #include <qmap.h> 00024 #include <qvariant.h> 00025 #include <qshared.h> 00026 00027 class QDataStream; 00028 00029 class Tag 00030 { 00031 public: 00032 enum Kind 00033 { 00034 Kind_Unknown, 00035 00036 Kind_Typedef = 1000, 00037 Kind_Namespace, 00038 Kind_UsingDirective, 00039 Kind_Base_class, 00040 Kind_Enum, 00041 Kind_Enumerator, 00042 Kind_Class, 00043 Kind_Struct, 00044 Kind_Union, 00045 Kind_VariableDeclaration, 00046 Kind_Variable, 00047 Kind_FunctionDeclaration, 00048 Kind_Function, 00049 // ... 00050 00051 Kind_Custom = 2000 00052 }; 00053 00054 public: 00055 Tag(); 00056 Tag( const Tag& source ); 00057 ~Tag(); 00058 00059 Tag& operator = ( const Tag& source ); 00060 00061 QCString id() const 00062 { 00063 return data->id; 00064 } 00065 00066 void setId( const QCString& id ) 00067 { 00068 detach(); 00069 data->id = id; 00070 } 00071 00072 int kind() const 00073 { 00074 return data->kind; 00075 } 00076 00077 void setKind( int kind ) 00078 { 00079 detach(); 00080 data->kind = kind; 00081 } 00082 00083 unsigned long flags() const 00084 { 00085 return data->flags; 00086 } 00087 00088 void setFlags( unsigned long flags ) 00089 { 00090 detach(); 00091 data->flags = flags; 00092 } 00093 00094 QString fileName() const 00095 { 00096 return data->fileName; 00097 } 00098 00099 void setFileName( const QString& fileName ) 00100 { 00101 detach(); 00102 data->fileName = fileName; 00103 } 00104 00105 QString path( const QString& sep = QString::fromLatin1("::") ) const 00106 { 00107 QString s = scope().join( sep ); 00108 if( s.isNull() ) 00109 return name(); 00110 return s + sep + name(); 00111 } 00112 00113 QString name() const 00114 { 00115 return data->name; 00116 } 00117 00118 void setName( const QString& name ) 00119 { 00120 detach(); 00121 data->name = name; 00122 } 00123 00124 QStringList scope() const 00125 { 00126 return data->scope; 00127 } 00128 00129 void setScope( const QStringList& scope ) 00130 { 00131 detach(); 00132 data->scope = scope; 00133 } 00134 00135 void getStartPosition( int* line, int* column ) const 00136 { 00137 if( line ) *line = data->startLine; 00138 if( column ) *column = data->startColumn; 00139 } 00140 00141 void setStartPosition( int line, int column ) 00142 { 00143 detach(); 00144 data->startLine = line; 00145 data->startColumn = column; 00146 } 00147 00148 void getEndPosition( int* line, int* column ) const 00149 { 00150 if( line ) *line = data->endLine; 00151 if( column ) *column = data->endColumn; 00152 } 00153 00154 void setEndPosition( int line, int column ) 00155 { 00156 detach(); 00157 data->endLine = line; 00158 data->endColumn = column; 00159 } 00160 00161 bool hasAttribute( const QCString& name ) const 00162 { 00163 if( name == "kind" || 00164 name == "name" || 00165 name == "scope" || 00166 name == "fileName" || 00167 name == "startLine" || 00168 name == "startColumn" || 00169 name == "endLine" || 00170 name == "endColumn" ) 00171 return true; 00172 return data->attributes.contains( name ); 00173 } 00174 00175 QVariant attribute( const QCString& name ) const 00176 { 00177 if( name == "id" ) 00178 return data->id; 00179 else if( name == "kind" ) 00180 return data->kind; 00181 else if( name == "name" ) 00182 return data->name; 00183 else if( name == "scope" ) 00184 return data->scope; 00185 else if( name == "fileName" ) 00186 return data->fileName; 00187 else if( name == "startLine" ) 00188 return data->startLine; 00189 else if( name == "startColumn" ) 00190 return data->startColumn; 00191 else if( name == "endLine" ) 00192 return data->endLine; 00193 else if( name == "endColumn" ) 00194 return data->endColumn; 00195 else if( name == "prefix" ) 00196 return data->name.left( 2 ); 00197 return data->attributes[ name ]; 00198 } 00199 00200 void setAttribute( const QCString& name, const QVariant& value ) 00201 { 00202 detach(); 00203 if( name == "id" ) 00204 data->id = value.toCString(); 00205 else if( name == "kind" ) 00206 data->kind = value.toInt(); 00207 else if( name == "name" ) 00208 data->name = value.toString(); 00209 else if( name == "scope" ) 00210 data->scope = value.toStringList(); 00211 else if( name == "fileName" ) 00212 data->fileName = value.toString(); 00213 else if( name == "startLine" ) 00214 data->startLine = value.toInt(); 00215 else if( name == "startColumn" ) 00216 data->startColumn = value.toInt(); 00217 else if( name == "endLine" ) 00218 data->endLine = value.toInt(); 00219 else if( name == "endColumn" ) 00220 data->endColumn = value.toInt(); 00221 else 00222 data->attributes[ name ] = value; 00223 } 00224 00225 void load( QDataStream& stream ); 00226 void store( QDataStream& stream ) const; 00227 00228 private: 00229 Tag copy(); 00230 void detach(); 00231 00232 private: 00233 struct TagData: public QShared 00234 { 00235 QCString id; 00236 int kind; 00237 unsigned long flags; 00238 QString name; 00239 QStringList scope; 00240 QString fileName; 00241 int startLine, startColumn; 00242 int endLine, endColumn; 00243 QMap<QCString, QVariant> attributes; 00244 } *data; 00245 }; 00246 00247 QDataStream& operator << ( QDataStream&, const Tag& ); 00248 QDataStream& operator >> ( QDataStream&, Tag& ); 00249 00250 #endif
KDE Logo
This file is part of the documentation for KDevelop Version 3.0.4.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Tue Oct 19 08:01:47 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003