00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00033 #ifndef __vtkStatisticsAlgorithmPrivate_h
00034 #define __vtkStatisticsAlgorithmPrivate_h
00035
00036 #include "vtkStdString.h"
00037
00038 #include <vtksys/stl/set>
00039
00040 class vtkStatisticsAlgorithmPrivate
00041 {
00042 public:
00043 vtkStatisticsAlgorithmPrivate()
00044 {
00045 }
00046 ~vtkStatisticsAlgorithmPrivate()
00047 {
00048 }
00049 int SetBufferColumnStatus( const char* colName, int status )
00050 {
00051 if ( status )
00052 {
00053 return this->Buffer.insert( colName ).second ? 1 : 0;
00054 }
00055 else
00056 {
00057 return this->Buffer.erase( colName ) ? 1 : 0;
00058 }
00059 }
00060 int AddBufferToRequests()
00061 {
00062 bool result = false;
00063
00064 if ( ! this->Buffer.empty() )
00065 {
00066 result = this->Requests.insert( this->Buffer ).second;
00067 }
00068 return result ? 1 : 0;
00069 }
00070 int AddBufferEntriesToRequests()
00071 {
00072 int count = 0;
00073 vtksys_stl::set<vtkStdString>::iterator it;
00074 for ( it = this->Buffer.begin(); it != this->Buffer.end(); ++ it )
00075 {
00076 vtksys_stl::set<vtkStdString> tmp;
00077 tmp.insert( *it );
00078 if ( this->Requests.insert( tmp ).second )
00079 {
00080 ++ count;
00081 }
00082 }
00083 return count;
00084 }
00085 int AddBufferEntryPairsToRequests()
00086 {
00087 int count = 0;
00088 vtksys_stl::pair<vtksys_stl::set<vtksys_stl::set<vtkStdString> >::iterator,bool> result;
00089 vtksys_stl::set<vtkStdString>::iterator it;
00090 for ( it = this->Buffer.begin(); it != this->Buffer.end(); ++ it )
00091 {
00092 vtksys_stl::set<vtkStdString>::iterator it2 = it;
00093 for ( ++ it2; it2 != this->Buffer.end(); ++ it2 )
00094 {
00095 vtksys_stl::set<vtkStdString> tmp;
00096 tmp.insert( *it );
00097 tmp.insert( *it2 );
00098 if ( this->Requests.insert( tmp ).second )
00099 {
00100 ++ count;
00101 }
00102 }
00103 }
00104 return count;
00105 }
00107 int AddColumnPairToRequests( const char* cola, const char* colb )
00108 {
00109 if ( cola && colb && strlen( cola ) && strlen( colb ) )
00110 {
00111 vtksys_stl::set<vtkStdString> tmp;
00112 tmp.insert( cola );
00113 tmp.insert( colb );
00114 if ( this->Requests.insert( tmp ).second )
00115 {
00116 return 1;
00117 }
00118 }
00119 return 0;
00120 }
00121 void ResetRequests()
00122 {
00123 this->Requests.clear();
00124 }
00125 int ResetBuffer()
00126 {
00127 int rval = this->Buffer.empty() ? 0 : 1;
00128 this->Buffer.clear();
00129 return rval;
00130 }
00132 vtkIdType GetNumberOfRequests()
00133 {
00134 return static_cast<vtkIdType>( this->Requests.size() );
00135 }
00137 vtkIdType GetNumberOfColumnsForRequest( vtkIdType r )
00138 {
00139 if ( r < 0 || r > static_cast<vtkIdType>( this->Requests.size() ) )
00140 {
00141 return 0;
00142 }
00143 vtksys_stl::set<vtksys_stl::set<vtkStdString> >::iterator it = this->Requests.begin();
00144 for ( vtkIdType i = 0; i < r; ++ i )
00145 {
00146 ++ it;
00147 }
00148 return it->size();
00149 }
00153 bool GetColumnForRequest( vtkIdType r, vtkIdType c, vtkStdString& columnName )
00154 {
00155 if ( r < 0 || r > static_cast<vtkIdType>( this->Requests.size() ) || c < 0 )
00156 {
00157 return false;
00158 }
00159 vtksys_stl::set<vtksys_stl::set<vtkStdString> >::const_iterator it = this->Requests.begin();
00160 for ( vtkIdType i = 0; i < r; ++ i )
00161 {
00162 ++ it;
00163 }
00164 if ( c > static_cast<vtkIdType>( it->size() ) )
00165 {
00166 return false;
00167 }
00168 vtksys_stl::set<vtkStdString>::const_iterator cit = it->begin();
00169 for ( vtkIdType j = 0; j < c; ++ j )
00170 {
00171 ++ cit;
00172 }
00173 columnName = *cit;
00174 return true;
00175 }
00176
00177 vtksys_stl::set<vtksys_stl::set<vtkStdString> > Requests;
00178 vtksys_stl::set<vtkStdString> Buffer;
00179 };
00180
00181 #endif // __vtkStatisticsAlgorithmPrivate_h
00182