diff options
Diffstat (limited to 'src/outputlist.cpp')
-rw-r--r-- | src/outputlist.cpp | 239 |
1 files changed, 239 insertions, 0 deletions
diff --git a/src/outputlist.cpp b/src/outputlist.cpp new file mode 100644 index 0000000..daa83ed --- /dev/null +++ b/src/outputlist.cpp @@ -0,0 +1,239 @@ +/****************************************************************************** + * + * $Id$ + * + * Copyright (C) 1997-1999 by Dimitri van Heesch. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation under the terms of the GNU General Public License is hereby + * granted. No representations are made about the suitability of this software + * for any purpose. It is provided "as is" without express or implied warranty. + * See the GNU General Public License for more details. + * + * All output generated with Doxygen is not covered by this license. + * + */ + +/*! \file + * This class represents a list of output generators that work in "parallel". + * The class only knows about the abstract base class OutputGenerators. + * All output is produced by calling a method of this class, which forwards + * the call to all output generators. + */ + +#include "outputlist.h" +#include "outputgen.h" +#include "config.h" +#include "message.h" + +OutputList::OutputList(bool) +{ + //printf("OutputList::OutputList()\n"); + outputs = new QList<OutputGenerator>; + outputs->setAutoDelete(TRUE); +} + +OutputList::OutputList(const OutputList *olist) +{ + //printf("OutputList::OutputList() deep copy\n"); + outputs = new QList<OutputGenerator>; + outputs->setAutoDelete(TRUE); + + QList<OutputGenerator> *ol=olist->outputs; + OutputGenerator *og=ol->first(); + while (og) + { + OutputGenerator *ogc=og->copy(); + outputs->append(ogc); + if (og->isEnabled()) ogc->enable(); else ogc->disable(); + og=ol->next(); + } + //printf("OutputList::OutputList dst=%d res=%d\n",ol->count(),outputs->count()); +} + +OutputList::~OutputList() +{ + delete outputs; +} + +OutputList &OutputList::operator=(const OutputList &olist) +{ + if (this!=&olist) + { + QList<OutputGenerator> *ol=olist.outputs; + OutputGenerator *ogsrc=ol->first(); + OutputGenerator *ogdst=outputs->first(); + //printf("OutputList::operator= src=%d dst=%d\n",outputs->count(),ol->count()); + while (ogdst) + { + ogdst=ogsrc->copy(); + ogsrc=ol->next(); + ogdst=outputs->next(); + } + } + return *this; +} + +void OutputList::add(const OutputGenerator *og) +{ + if (og) outputs->append(og); +} + +//HtmlGenerator *OutputList::getHtmlGenerator() +//{ +// OutputGenerator *og=outputs->first(); +// while (og) +// { +// if (og->get(OutputGenerator::Html)) return (HtmlGenerator *)og; +// og=outputs->next(); +// } +// return 0; // should not happen! +//} + +void OutputList::disableAllBut(OutputGenerator::OutputType o) +{ + OutputGenerator *og=outputs->first(); + while (og) + { + og->disableIfNot(o); + og=outputs->next(); + } +} + +void OutputList::enableAll() +{ + OutputGenerator *og=outputs->first(); + while (og) + { + og->enable(); + og=outputs->next(); + } +} + +void OutputList::disable(OutputGenerator::OutputType o) +{ + OutputGenerator *og=outputs->first(); + while (og) + { + og->disableIf(o); + og=outputs->next(); + } +} + +void OutputList::enable(OutputGenerator::OutputType o) +{ + OutputGenerator *og=outputs->first(); + while (og) + { + og->enableIf(o); + og=outputs->next(); + } +} + +bool OutputList::isEnabled(OutputGenerator::OutputType o) +{ + bool result=FALSE; + OutputGenerator *og=outputs->first(); + while (og) + { + result=result || og->isEnabled(o); + og=outputs->next(); + } + return result; +} + +OutputList &OutputList::operator+=(const OutputList &outputList) +{ + OutputList *ol=(OutputList *)&outputList; + OutputGenerator *ogsrc=ol->outputs->first(); + OutputGenerator *ogdst=outputs->first(); + //printf("OutputList::operator+= src=%d dst=%d\n",outputs->count(),ol->outputs->count()); + while (ogdst && ogsrc) + { + ogdst->append(ogsrc); + ogsrc=ol->outputs->next(); + ogdst=outputs->next(); + } + return *this; +} + +//-------------------------------------------------------------------------- +// Create some overloaded definitions of the forall function. +// Using template functions here would have made it a little less +// portable (I guess). + +// zero arguments +void OutputList::forall(void (OutputGenerator::*func)()) +{ + OutputGenerator *og=outputs->first(); + while (og) + { + if (og->isEnabled()) (og->*func)(); + og=outputs->next(); + } +} + +// one argument +#define FORALL1(a1,p1) \ +void OutputList::forall(void (OutputGenerator::*func)(a1),a1) \ +{ \ + OutputGenerator *og=outputs->first(); \ + while (og) \ + { \ + if (og->isEnabled()) (og->*func)(p1); \ + og=outputs->next(); \ + } \ +} + +// two arguments +#define FORALL2(a1,a2,p1,p2) \ +void OutputList::forall(void (OutputGenerator::*func)(a1,a2),a1,a2) \ +{ \ + OutputGenerator *og=outputs->first(); \ + while (og) \ + { \ + if (og->isEnabled()) (og->*func)(p1,p2); \ + og=outputs->next(); \ + } \ +} + +// three arguments +#define FORALL3(a1,a2,a3,p1,p2,p3) \ +void OutputList::forall(void (OutputGenerator::*func)(a1,a2,a3),a1,a2,a3) \ +{ \ + OutputGenerator *og=outputs->first(); \ + while (og) \ + { \ + if (og->isEnabled()) (og->*func)(p1,p2,p3); \ + og=outputs->next(); \ + } \ +} + +// four arguments +#define FORALL4(a1,a2,a3,a4,p1,p2,p3,p4) \ +void OutputList::forall(void (OutputGenerator::*func)(a1,a2,a3,a4),a1,a2,a3,a4) \ +{ \ + OutputGenerator *og=outputs->first(); \ + while (og) \ + { \ + if (og->isEnabled()) (og->*func)(p1,p2,p3,p4); \ + og=outputs->next(); \ + } \ +} + +// now instantiate only the ones we need. + +FORALL1(const char *a1,a1) +FORALL1(char a1,a1) +FORALL1(int a1,a1) +FORALL1(IndexSections a1,a1) +FORALL2(const char *a1,const char *a2,a1,a2) +FORALL2(int a1,bool a2,a1,a2) +FORALL3(ClassDiagram &a1,const char *a2,const char *a3,a1,a2,a3) +FORALL3(const char *a1,const char *a2,const char *a3,a1,a2,a3) +FORALL3(const char *a1,const char *a2,bool a3,a1,a2,a3) +FORALL3(uchar a1,uchar a2,uchar a3,a1,a2,a3) +FORALL4(const char *a1,const char *a2,const char *a3,const char *a4,a1,a2,a3,a4) + + +//-------------------------------------------------------------------------- |