lib/catalog/tag.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
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
This file is part of the documentation for KDevelop Version 3.0.4.