Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Examples  

statistics.h

Go to the documentation of this file.
00001 
00002 //
00003 // YASA statistic declarations
00004 //
00005 // Project: Yasa 2
00006 // Author : Jan Blumenthal
00007 // Start  : 2002/03/18
00008 // $Header: /sources/yasa/yasagui/statistics.h,v 1.4 2003/01/24 15:47:43 bj Exp $
00009 //
00011 //
00012 // This program is free software; you can redistribute it and/or modify
00013 // it under the terms of the GNU General Public License as published by
00014 // the Free Software Foundation; either version 2 of the License, or
00015 // (at your option) any later version.
00016 //
00017 // This program is distributed in the hope that it will be useful,
00018 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00019 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00020 // GNU General Public License for more details.
00021 //
00022 // You should have received a copy of the GNU General Public License
00023 // along with this program (See the included file COPYING);
00024 // if not, write to the Free Software Foundation, Inc.,
00025 // 675 Mass Ave, Cambridge, MA 02139, USA.
00026 //
00028 #ifndef YASAGUI_STATISTICS_INCLUDE
00029 #define YASAGUI_STATISTICS_INCLUDE
00030 
00031 
00033 #include <qtable.h>
00034 #include <qvbox.h>
00035 #include <qlabel.h>
00036 #include <yasagui/yasagui.h>
00037 #include <qstringlist.h>
00038 #include <qfont.h>
00039 #include <qfontmetrics.h>
00040 #include "datatypes.h"
00041 #include "environment.h"
00042 #include "project.h"
00043 #include "statistichandler.h"
00044 
00045 
00047 class YLogAction;
00048 class YStatistics;
00049 
00050 
00052 class YStatisticTableItem : public QTableItem
00053 {public:                YStatisticTableItem(QTable *table, const QString &text=YStatisticBaseEntry::GetUnknownString() ) :
00054                         QTableItem(table, QTableItem::Never, text )
00055                         {}
00056     virtual int         alignment() const                               {   return AlignVCenter | AlignRight;                       }
00057 };
00058 
00060 class YStatisticLogFileTableItem : public YStatisticTableItem
00061 {   const YStatisticBaseEntry   &statisticentry;
00062 public:                 YStatisticLogFileTableItem(QTable *table, const YStatisticBaseEntry &sbe) :
00063                         YStatisticTableItem(table, sbe.GetVisibleString() ),
00064                         statisticentry(sbe)
00065                         {}
00066     virtual QString     key() const                                     {   return statisticentry.GetKey();         }
00067 };
00068 
00069 
00071 #define MIN_COLUMN_WIDTH                    85
00072 #define COLUMN_WIDTH_OFFSET                 5           // offset added after calculating max width
00073 #define ROW_HEIGHT_OFFSET                   7           // offset added after calculating max width
00074 #define MIN_HORIZONTAL_HEADER_WIDTH         85
00075 #define STATISTICTABLE_XOFFSET              4           // used to add width of lines in header
00076 #define STATISTICTABLE_YOFFSET              4
00077 
00080 class YStatisticTable : public QTable
00081 {   Q_OBJECT
00082     YStatisticHandler   *statistichandler;
00083     int                 horizontalheaderwidth;
00084     int                 columnwidth;
00085     bool                drawinglocked;
00086     bool                sortdirection;  // true=lower text is left
00087 protected:
00088 public:                 YStatisticTable(int r, int c, QWidget *parent, YStatisticHandler *handler) :
00089                         QTable(r, c, parent),
00090                         statistichandler(handler),
00091                         horizontalheaderwidth(0),
00092                         columnwidth(0),
00093                         drawinglocked(false),
00094                         sortdirection(true)
00095                         {
00096                             connect( verticalHeader(), SIGNAL( clicked(int) ), this, SLOT( rowClicked(int) ) );
00097                             setSorting(true);
00098                         }
00099     YStatisticHandler*  GetStatisticHandler() const                 {   return statistichandler;        }
00100     virtual void        drawContents(QPainter * p, int cx, int cy, int cw, int ch )
00101                         {
00102                             if ( ! drawinglocked )
00103                                 QTable::drawContents(p,cx,cy,cw,ch);
00104                         }
00105     virtual void        sortColumn ( int col, bool ascending = TRUE, bool wholeRows = FALSE )
00106                         {
00107                             QTable::sortColumn(col, ascending, true);
00108                             clearSelection( true );
00109                             Q_UNUSED(wholeRows);
00110                         }
00111     virtual void        swapRows( int row1, int row2 )
00112                         {
00113                             QTable::swapRows(row1, row2);
00114                             QString str=verticalHeader()->label(row1);
00115                             int     w=verticalHeader()->sectionSize(row1);
00116                             verticalHeader()->setLabel(row1, verticalHeader()->label(row2) );
00117                             verticalHeader()->resizeSection(row1, verticalHeader()->sectionSize(row2) );
00118                             verticalHeader()->setLabel(row2, str );
00119                             verticalHeader()->resizeSection(row2, w);
00120                         }
00121     virtual void        swapColumns( int col1, int col2 )
00122                         {
00123                             QTable::swapColumns(col1, col2);
00124                             QString str=horizontalHeader()->label(col1);
00125                             int     w=horizontalHeader()->sectionSize(col1);
00126                             horizontalHeader()->setLabel(col1, horizontalHeader()->label(col2) );
00127                             horizontalHeader()->resizeSection(col1, horizontalHeader()->sectionSize(col2) );
00128                             horizontalHeader()->setLabel(col2, str );
00129                             horizontalHeader()->resizeSection(col2, w);
00130                         }
00131     void                SetVerticalNames(const QStringList &list)
00132                         {
00133                             for ( unsigned int i=0 ; i<list.count(); i++ )
00134                                 verticalHeader()->setLabel(i, list[i] );
00135                         }
00136     void                SetHorizontalNames(const QStringList &list)
00137                         {
00138                             for ( unsigned int i=0 ; i<list.count(); i++ )
00139                                 horizontalHeader()->setLabel(i, list[i] );
00140                         }
00142     void                EnlargeTable()
00143                         {
00144                             int             i,j,k;
00145                             QFont           font;
00146                             QFontMetrics    fontmetrics(font);
00147                             font.setBold(true);
00148                             QFontMetrics    fontmetricsbold(font);
00149 
00150                             // determine min. width of all items in the current table, adjustColumn() will not work here
00151                             columnwidth=MIN_COLUMN_WIDTH;
00152                             for ( i=0; i<numCols(); i++)
00153                             {
00154                                 k=STATISTICTABLE_XOFFSET + fontmetricsbold.width( horizontalHeader()->label(i) );
00155                                 if ( k > columnwidth )
00156                                     columnwidth=k;
00157                                 for ( j=0; j<numRows(); j++)
00158                                 {
00159                                     k=fontmetrics.width( text(j,i) );
00160                                     if ( k > columnwidth )
00161                                         columnwidth=k;
00162                                 }
00163                             }
00164                             columnwidth+=COLUMN_WIDTH_OFFSET;
00165                             for ( i=0; i<numCols(); i++)            // adjust all columns to the same size
00166                             {
00167                                 horizontalHeader()->resizeSection( i, columnwidth );
00168                             }
00169                             /* does not work here
00170                             for ( i=0; i<numRows(); i++)
00171                             {
00172                                 adjustRow(i);
00173                             }*/
00174                             // resize vertical header
00175                             for ( horizontalheaderwidth=MIN_HORIZONTAL_HEADER_WIDTH, i=0; i<numRows(); i++)
00176                             {
00177                                 k=fontmetricsbold.width( verticalHeader()->label(i) );
00178                                 if ( horizontalheaderwidth < k )
00179                                     horizontalheaderwidth=k;
00180                             }
00181                             setLeftMargin(horizontalheaderwidth);
00182                             // adjust horizontal header
00183                             j=horizontalHeader()->height()+STATISTICTABLE_YOFFSET;  // width of horizontal header
00184                             for ( i=0; i<numRows(); i++)
00185                             {
00186                                 j += rowHeight(i);
00187                                 //j += rowHeight(i) > fontmetricsbold.height()+ROW_HEIGHT_OFFSET ? rowHeight(i) : fontmetricsbold.height()+ROW_HEIGHT_OFFSET ;
00188                             }
00189                             setMinimumHeight(j);
00190                             setMaximumHeight(j);
00191 
00192                             // calculate minimum table size
00193                             //j=verticalHeader()->width()+STATISTICTABLE_XOFFSET;       // width of vertical header
00194                             j=0;
00195                             for ( i=0; i<numCols(); i++)
00196                             {
00197                                 //setColumnStretchable(i,true);
00198                                 j += columnWidth(i);
00199                             }
00200                             setMinimumWidth( j+STATISTICTABLE_XOFFSET );
00201                             resize( width(), height() );
00202                         }
00203     int                 GetMaxVerticalHeaderWidth() const               {   return horizontalheaderwidth;   }
00204     int                 GetMaxColumnWidth() const                       {   return columnwidth;             }
00205     void                SetVerticalHeaderWidth(int w)
00206                         {
00207                             if ( w )
00208                                 setLeftMargin(w);
00209                             setMinimumWidth( width() + (w-horizontalheaderwidth+w) );
00210                             resize( width(), height() );
00211                         }
00212     void                SetColumnWidth(int w)
00213                         {
00214                             for ( int i=0; i<numCols(); i++)            // adjust all columns to the same size
00215                             {
00216                                 horizontalHeader()->resizeSection(i,w);
00217                             }
00218                             setMinimumWidth( width() + (w-columnwidth)*numCols() );
00219                             resize( width(), height() );
00220                         }
00221 public slots:
00222     virtual void        rowClicked ( int row )
00223                         {
00224                             QTableItem  *item1,*item2;
00225                             QString     str1, str2;
00226 
00227                             bool    repeat=true;
00228                             if ( numCols() >1 )
00229                             {
00230                                 drawinglocked=true;
00231                                 horizontalHeader()->setUpdatesEnabled( FALSE );
00232                                 while (repeat)
00233                                 {
00234                                     repeat=false;
00235                                     for ( int i=0; i<numCols()-1; i++)
00236                                     {
00237                                         item1=item( row, i );
00238                                         str1=str2=QString::null;
00239                                         if ( item1 )
00240                                             str1=item1->key();
00241                                         item2=item( row, i+1 );
00242                                         if ( item2 )
00243                                             str2=item2->key();
00244                                         //repeat=str1>str2;
00245                                         if ( sortdirection&&(str1>str2) || (!sortdirection&&(str1<str2)) )
00246                                         {
00247                                             swapColumns(i, i+1);
00248                                             repeat=true;
00249                                             break;
00250                                         }
00251                                     }
00252                                 };
00253                                 drawinglocked=false;
00254                                 horizontalHeader()->setUpdatesEnabled(TRUE);
00255                             }
00256 
00257                             // refresh all contents. update() / repaint() does not work :-( Here is the hack :-)
00258                             for ( int i=0; i<numCols(); i++ )
00259                             {
00260                                 for ( int j=0; j<numRows(); j++ )
00261                                 {
00262                                     updateCell( j,i );
00263                                 }
00264                             }
00265                             clearSelection( true );
00266                             horizontalHeader()->update();
00267                             sortdirection=!sortdirection;
00268                         }
00269 /*public slots:
00270     virtual void        NewStatisticInserted(YStatistics *st);
00271 */
00272 };
00273 
00274 
00278 class YStatistics
00279 {   QVBox               *vbox;
00280     QLabel              *label;
00281     YStatisticTable     *table;
00282 public:                 YStatistics() : vbox(0), label(0), table(0)
00283                         {}
00284     virtual             ~YStatistics()                      {                                                   }
00285     YStatisticTable *   GetTable() const                    {   return table;                                   }
00286     QLabel *            GetLabel() const                    {   return label;                                   }
00287     QWidget *           GetMainWidget()                     {   return vbox;                                    }
00288     virtual int         InitInstance(YStatisticHandler *handler, QWidget *p);
00289     void                FillTable();
00291     virtual void        PostCreate()                        {   table->EnlargeTable();                          }
00293     virtual unsigned int GetMaxEntries() const=0;
00295     virtual unsigned int GetMaxProperties() const=0;
00297     virtual QStringList GetPropertyNames() const=0;
00299     virtual QStringList GetEntryNames() const=0;
00301     virtual QString     GetTableTitle() const=0;
00303     virtual YLogFileStatistics* GetEntryLogFileStatistics(int number) =0;
00304 };
00305 
00306 
00309 class YEnvironmentStatistics : public YStatistics
00310 {protected:
00311     YEnvironmentLogFileSet &environmentlogfile;
00312 public:                 YEnvironmentStatistics(YEnvironmentLogFileSet &e) : environmentlogfile(e)           { }
00314     virtual QString     GetTableTitle() const
00315                         {
00316                             QString str=MSGP_SR_TITLE_ENVIRONMENT;
00317                             return str  .arg( environmentlogfile.GetParent()->GetSet()->GetParent()->GetName() )
00318                                         .arg( environmentlogfile.GetParent()->GetName() )
00319                                         .arg( GetSubTitleType() );
00320                         }
00322     virtual QString     GetSubTitleType() const=0;
00323 };
00324 
00325 
00337 class YTaskEnvironmentStatistics : public YEnvironmentStatistics
00338 {public:                YTaskEnvironmentStatistics(YEnvironmentLogFileSet &e) : YEnvironmentStatistics(e)           { }
00340     virtual QStringList GetPropertyNames() const            {   return YTaskLogFileStatistics::CreatePropertyNames();}
00342     virtual unsigned int GetMaxProperties() const           {   return YTaskLogFileStatistics::GetMaxProperties();  }
00344     virtual unsigned int GetMaxEntries() const              {   return environmentlogfile.GetTaskSet().GetCount();  }
00346     virtual QString     GetSubTitleType() const             {   return MSGP_TI_SUBTITLE_TASK;                       }
00348     virtual QStringList GetEntryNames() const
00349                         {   QStringList list;
00350                             for ( unsigned int i=0; i<GetMaxEntries() ; i++ )
00351                                 list.append( environmentlogfile.GetTaskSet().At(i)->GetName() );
00352                             return list;
00353                         }
00355     virtual YLogFileStatistics* GetEntryLogFileStatistics(int number)   {   return &((YLogFileTask*)(environmentlogfile.GetTaskSet().At(number)))->GetStatistics(); }
00356 };
00357 
00358 
00368 class YMutexEnvironmentStatistics : public YEnvironmentStatistics
00369 {public:                YMutexEnvironmentStatistics(YEnvironmentLogFileSet &e) : YEnvironmentStatistics(e)              { }
00371     virtual QStringList GetPropertyNames() const            {   return YMutexLogFileStatistics::CreatePropertyNames();}
00373     virtual unsigned int GetMaxProperties() const           {   return YMutexLogFileStatistics::GetMaxProperties(); }
00375     virtual unsigned int GetMaxEntries() const              {   return environmentlogfile.GetMutexSet().GetCount();     }
00377     virtual QString     GetSubTitleType() const             {   return MSGP_TI_SUBTITLE_MUTEX;                      }
00379     virtual QStringList GetEntryNames() const
00380                         {   QStringList list;
00381                             for ( unsigned int i=0; i<GetMaxEntries(); i++ )
00382                                 list.append( environmentlogfile.GetMutexSet().At(i)->GetName() );
00383                             return list;
00384                         }
00386     virtual YLogFileStatistics* GetEntryLogFileStatistics(int number)   {   return &((YLogFileMutex*)(environmentlogfile.GetMutexSet().At(number)))->GetStatistics();   }
00387 };
00388 
00389 
00399 class YCPUEnvironmentStatistics : public YEnvironmentStatistics
00400 { public:               YCPUEnvironmentStatistics(YEnvironmentLogFileSet &e) : YEnvironmentStatistics(e)                    { }
00402     virtual QStringList GetPropertyNames() const            {   return YCPULogFileStatistics::CreatePropertyNames();}
00404     virtual unsigned int GetMaxProperties() const           {   return YCPULogFileStatistics::GetMaxProperties();   }
00406     virtual unsigned int GetMaxEntries() const              {   return environmentlogfile.GetCount();               }
00408     virtual QString     GetSubTitleType() const             {   return MSGP_TI_SUBTITLE_CPU;                        }
00410     virtual QStringList GetEntryNames() const
00411                         {   QStringList list;
00412                             for ( unsigned int i=0; i<GetMaxEntries(); i++ )
00413                                 list.append( environmentlogfile.At(i)->GetName() );
00414                             return list;
00415                         }
00417     virtual YLogFileStatistics* GetEntryLogFileStatistics(int number)   {   return &((YCPULogFile*)(environmentlogfile.At(number)))->GetStatistics();   }
00418 };
00419 
00420 
00428 class YSummaryEnvironmentStatistics : public YEnvironmentStatistics
00429 {public:                YSummaryEnvironmentStatistics(YEnvironmentLogFileSet &e) : YEnvironmentStatistics(e)        { }
00431     virtual QStringList GetPropertyNames() const                    {   return YEnvironmentLogFileStatistics::CreatePropertyNames();}
00433     virtual unsigned int GetMaxProperties() const                   {   return YEnvironmentLogFileStatistics::GetMaxProperties();   }
00435     virtual unsigned int GetMaxEntries() const                      {   return 1;                                   }
00437     virtual QStringList GetEntryNames() const                       {   return QStringList( ((YEnvironment*)environmentlogfile.GetParent())->GetName() );   }
00439     virtual QString     GetTableTitle() const
00440                         {   QString str=MSGP_SR_TITLE_SUMMARY;
00441                             return str.arg( ((YEnvironment*)environmentlogfile.GetParent())->GetProject()->GetName() );
00442                         }
00444     virtual QString     GetSubTitleName() const                     {   return QString("Global");                   }
00446     virtual QString     GetSubTitleType() const                     {   return MSGP_TI_SUBTITLE_ENVIRONMENT;        }
00448     virtual YLogFileStatistics* GetEntryLogFileStatistics(int)
00449     {
00450         return &environmentlogfile.GetStatistics();
00451     }
00452 };
00453 
00454 
00455 
00456 
00457 
00458 
00459 
00460 
00461 
00462 
00463 
00464 
00465 
00466 
00467 
00470 class YProjectStatistics : public YStatistics
00471 {   protected:
00472     YProjectLogFile&    projectlogfile;
00473 public:                 YProjectStatistics(YProjectLogFile &lfs) : projectlogfile(lfs)      { }
00475     virtual QString     GetTableTitle() const
00476                         {
00477                             QString str=MSGP_SR_TITLE_PROJECT;
00478                             return str  .arg( GetSubTitleType() )
00479                                         .arg( GetSubTitleName() )
00480                                         .arg( projectlogfile.GetProject()->GetName() );
00481                         }
00483     virtual QString     GetSubTitleName() const =0;
00485     virtual QString     GetSubTitleType() const =0;
00487     virtual unsigned int GetMaxEntries() const                      {   return projectlogfile.GetMaxEntries();      }
00489     virtual QStringList GetEntryNames() const                   {   return projectlogfile.GetEnvironmentNames();}
00490 };
00491 
00492 
00502 class YTaskProjectStatistics : public YProjectStatistics
00503 {   int                 taskid;
00504     QString             taskname;
00505 public:                 YTaskProjectStatistics(const QString &tname, int id, YProjectLogFile &p) :
00506                         YProjectStatistics(p), taskid(id), taskname(tname)                                          { }
00508     virtual QStringList GetPropertyNames() const                    {   return YTaskLogFileStatistics::CreatePropertyNames();}
00510     virtual unsigned int GetMaxProperties() const                   {   return YTaskLogFileStatistics::GetMaxProperties();  }
00512     virtual QString     GetSubTitleName() const                     {   return taskname;                            }
00514     virtual QString     GetSubTitleType() const                     {   return MSGP_TI_SUBTITLE_TASK;               }
00515     int                 GetTaskID() const                           {   return taskid;                              }
00517     virtual YLogFileStatistics* GetEntryLogFileStatistics(int number)
00518     {
00519         YLogFileTaskSet &taskset=((YEnvironment*)projectlogfile.GetProject()->GetEnvironmentSet().At(number) )
00520                 ->GetEnvironmentLogFileSet().GetTaskSet();
00521         for (unsigned int i=0; i<taskset.GetCount(); i++)
00522         {
00523             if ( ((YLogFileTask*)taskset.At(i))->GetId() == taskid )
00524             {
00525                 return &((YLogFileTask*)taskset.At(i))->GetStatistics();
00526             }
00527         }
00528         return 0;
00529     }
00530 };
00531 
00532 
00540 class YMutexProjectStatistics : public YProjectStatistics
00541 {   int                 mutexid;
00542     QString             mutexname;
00543 public:                 YMutexProjectStatistics(const QString &mname, int id, YProjectLogFile &p) : YProjectStatistics(p),
00544                         mutexid(id), mutexname(mname)                                                               { }
00546     virtual QStringList GetPropertyNames() const                    {   return YMutexLogFileStatistics::CreatePropertyNames();}
00548     virtual unsigned int GetMaxProperties() const                   {   return YMutexLogFileStatistics::GetMaxProperties(); }
00550     virtual QString     GetSubTitleName() const                     {   return mutexname;                           }
00552     virtual QString     GetSubTitleType() const                     {   return MSGP_TI_SUBTITLE_MUTEX;              }
00553     int                 GetMutexID() const                          {   return mutexid;                             }
00555     virtual YLogFileStatistics* GetEntryLogFileStatistics(int number)
00556     {
00557         YLogFileMutexSet    &mutexset=((YEnvironment*)projectlogfile.GetProject()->GetEnvironmentSet().At(number) )
00558                 ->GetEnvironmentLogFileSet().GetMutexSet();
00559         for (unsigned int i=0; i<mutexset.GetCount(); i++)
00560         {
00561             if ( ((YLogFileMutex*)mutexset.At(i))->GetId() == mutexid )
00562             {
00563                 return &((YLogFileMutex*)mutexset.At(i))->GetStatistics();
00564             }
00565         }
00566         return 0;
00567     }
00568 };
00569 
00570 
00580 class YCPUProjectStatistics : public YProjectStatistics
00581 {   int                 cpu;
00582 public:                 YCPUProjectStatistics(int c, YProjectLogFile &p) : YProjectStatistics(p), cpu (c)           { }
00584     virtual QStringList GetPropertyNames() const                    {   return YCPULogFileStatistics::CreatePropertyNames();}
00586     virtual unsigned int GetMaxProperties() const                   {   return YCPULogFileStatistics::GetMaxProperties();   }
00588     virtual QString     GetSubTitleName() const                     {   return QString::number(cpu);                }
00590     virtual QString     GetSubTitleType() const                     {   return MSGP_TI_SUBTITLE_CPU;                }
00591     unsigned int        GetCPU() const                              {   return cpu;                                 }
00593     virtual YLogFileStatistics* GetEntryLogFileStatistics(int number)
00594     {
00595         YEnvironmentLogFileSet  &envlogfile=((YEnvironment*)projectlogfile.GetProject()->GetEnvironmentSet().At(number) )->GetEnvironmentLogFileSet();
00596 
00597         //YEnvironmentLogFileSet    *environmentlogfile;
00598         for (unsigned int i=0 ; i<envlogfile.GetCount() ; i++)
00599         {
00600             if ( ((YCPULogFile*)envlogfile.At(i))->GetCPU() == cpu )
00601             {
00602                 return &((YCPULogFile*)envlogfile.At(i))->GetStatistics();
00603             }
00604         }
00605         return 0;
00606     }
00607 };
00608 
00609 
00617 class YSummaryProjectStatistics : public YProjectStatistics
00618 {public:                YSummaryProjectStatistics(YProjectLogFile &p) : YProjectStatistics(p)                   { }
00620     virtual QStringList GetPropertyNames() const                    {   return YEnvironmentLogFileStatistics::CreatePropertyNames();}
00622     virtual unsigned int GetMaxProperties() const                   {   return YEnvironmentLogFileStatistics::GetMaxProperties();   }
00624     virtual QString     GetTableTitle() const
00625                         {   QString str=MSGP_SR_TITLE_SUMMARY;
00626                             return str.arg( projectlogfile.GetProject()->GetName() );
00627                         }
00629     virtual QString     GetSubTitleName() const                     {   return QString("Global");                   }
00631     virtual QString     GetSubTitleType() const                     {   return MSGP_TI_SUBTITLE_ENVIRONMENT;        }
00633     virtual YLogFileStatistics* GetEntryLogFileStatistics(int number)
00634     {
00635         if ( number < (int)projectlogfile.GetProject()->GetEnvironmentSet().GetCount() )
00636             return & ((YEnvironment*)projectlogfile.GetProject()->GetEnvironmentSet().At(number) )->GetEnvironmentLogFileSet().GetStatistics();
00637         return 0;
00638     }
00639 };
00640 
00641 
00642 
00643 
00644 
00645 
00646 
00647 
00648 
00649 
00650 
00651 
00653 #endif                                                                          // ifndef YASAGUI_STATISTICS_INCLUDE

Generated on Thu Feb 13 23:43:56 2003 for Yasa by doxygen1.3-rc3