00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef CPPWRITER_H
00021 #define CPPWRITER_H
00022
00023 #include "simplecodegenerator.h"
00024 #include "cppcodegenerationpolicy.h"
00025 #include "../umloperationlist.h"
00026 #include "../umlattributelist.h"
00027 #include "../umlassociationlist.h"
00028
00029 class QFile;
00030 class ClassifierInfo;
00031
00038 class CppWriter : public SimpleCodeGenerator {
00039 public:
00040
00044 CppWriter();
00045
00049 virtual ~CppWriter();
00050
00055 virtual void writeClass(UMLClassifier *c);
00056
00060 virtual Uml::Programming_Language getLanguage();
00061
00065 QStringList defaultDatatypes();
00066
00070 virtual const QStringList reservedKeywords() const;
00071
00072 private:
00073
00078 void writeClassDecl(UMLClassifier *c, QTextStream &cpp);
00079
00083 void writeConstructorDecls(QTextStream &h);
00084 void writeConstructorMethods(QTextStream &cpp);
00085
00090 void writeFieldDecl(UMLClassifier *c, Uml::Visibility permitScope, QTextStream &stream);
00091
00096 void writeAccessorMethodDecl(UMLClassifier *c, Uml::Visibility permitScope, QTextStream &stream);
00097
00105 void writeOperations(UMLClassifier *c, bool isHeaderMethod, Uml::Visibility permitScope, QTextStream &j);
00106
00113 void writeOperations(UMLOperationList &list, bool isHeaderMethod, QTextStream &j);
00114
00120 void writeAttributes(UMLClassifier *c, QTextStream &j);
00121
00128 void writeAttributeDecls (Uml::Visibility visibility, bool writeStatic, QTextStream &stream );
00129
00134 void writeHeaderFieldDecl(UMLClassifier *c, Uml::Visibility permitVisibility, QTextStream &stream);
00135
00136 void writeHeaderAttributeAccessorMethods (Uml::Visibility visibility, bool writeStatic, QTextStream &stream );
00137
00138 void writeHeaderAttributeAccessorMethodDecls(UMLClassifier *c, Uml::Visibility permitVisibility, QTextStream &stream);
00139 void writeHeaderAccessorMethodDecl(UMLClassifier *c, Uml::Visibility permitScope, QTextStream &stream);
00140
00141
00145 void writeAssociationDecls(UMLAssociationList associations, Uml::Visibility permit, Uml::IDType id, QTextStream &stream);
00146
00150 void writeAssociationRoleDecl(QString fieldClassName, QString roleName, QString multi,
00151 QString doc, QTextStream &stream);
00152
00156 void writeAttributeMethods(UMLAttributeList *attribs, Uml::Visibility visib, bool isHeaderMethod,
00157 bool isStatic,
00158 bool writeMethodBody, QTextStream &stream);
00159
00163 void writeAssociationMethods(UMLAssociationList associations, Uml::Visibility permitVisib,
00164 bool isHeaderMethod,
00165 bool writeMethodBody, bool writePointerVar, Uml::IDType id, QTextStream &stream);
00166
00172 void writeAssociationRoleMethod(const QString &fieldClassName, bool isHeaderMethod, bool writeMethodBody,
00173 const QString &roleName, const QString &multi,
00174 const QString &description, Uml::Changeability_Type change,
00175 QTextStream &stream);
00176
00180 void writeSingleAttributeAccessorMethods(
00181 const QString &fieldClassName, const QString &Name,
00182 const QString &fieldName, const QString &description,
00183 Uml::Changeability_Type change,
00184 bool isHeaderMethod,
00185 bool isStatic, bool writeMethodBody, QTextStream &cpp);
00186
00190 void writeVectorAttributeAccessorMethods(
00191 const QString &fieldClassName, const QString &fieldVarName,
00192 const QString &fieldName, const QString &description,
00193 Uml::Changeability_Type change,
00194 bool isHeaderMethod,
00195 bool writeMethodBody,
00196 QTextStream &cpp);
00197
00201 void writeComment(const QString &text, const QString &indent, QTextStream &cpp);
00202
00206 void writeDocumentation(QString header, QString body, QString end, QTextStream &cpp);
00207
00208
00212 void writeHeaderFile (UMLClassifier *c, QFile &file);
00213
00217 void writeSourceFile (UMLClassifier *c, QFile &file);
00218
00223 void printTextAsSeparateLinesWithIndent (const QString &text, const QString &indent,
00224 QTextStream &stream);
00225
00229 void printAssociationIncludeDecl (UMLAssociationList list, Uml::IDType this_id, QTextStream &stream);
00230
00234 void writeInitAttibuteMethod (QTextStream &stream);
00235
00239 void writeInitAttibuteDecl (QTextStream &stream);
00240
00244 QString getUMLObjectName(UMLObject *obj);
00245
00249 QString capitalizeFirstLetter(const QString &string);
00250
00254 QString fixTypeName(const QString &string);
00255
00259 QString fixInitialStringDeclValue(const QString &value, const QString &type);
00260
00264 QString getAttributeVariableName (UMLAttribute *at);
00265
00269 void writeBlankLine(QTextStream &stream);
00270
00274 CPPCodeGenerationPolicy *policyExt();
00275
00279 ClassifierInfo * m_classifierInfo;
00280
00281 QString VECTOR_METHOD_APPEND;
00282 QString VECTOR_METHOD_REMOVE;
00283 QString VECTOR_METHOD_INIT;
00284 QString OBJECT_METHOD_INIT;
00285
00289 bool INLINE_ASSOCIATION_METHODS;
00290
00291 QStringList ObjectFieldVariables;
00292 QStringList VectorFieldVariables;
00293
00294 };
00295
00296
00297
00298 #endif // CPPWRITER_H