00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #ifdef _MSC_VER
00014 # pragma warning(disable:4786) // >255 characters in debug information
00015 #endif
00016
00017 #include <iostream>
00018
00019 #include "SIO_streamManager.h"
00020 #include "SIO_stream.h"
00021 #include "SIO_functions.h"
00022
00023
00024
00025
00026 streamMap_c* SIO_streamManager::streamMap = NULL;
00027 SIO_verbosity SIO_streamManager::verbosity = SIO_ERRORS;
00028
00029
00030
00031
00032 SIO_stream* SIO_streamManager::add
00033 (
00034 const char* i_name
00035 )
00036 { return add( i_name, 4 * SIO_KBYTE ); }
00037
00038
00039
00040
00041 SIO_stream* SIO_streamManager::add
00042 (
00043 const char* i_name,
00044 unsigned int i_reserve
00045 )
00046 {
00047
00048
00049
00050
00051 std::pair< streamMap_i, bool >
00052 status;
00053
00054 std::string
00055 s_name = i_name;
00056
00057
00058
00059
00060 if( !SIO_functions::validateName( i_name ) )
00061 {
00062 if( verbosity >= SIO_ERRORS )
00063 {
00064 std::cout << "SIO: [Stream Manager] "
00065 << "Invalid stream name "
00066 << i_name
00067 << std::endl;
00068 }
00069 return( NULL );
00070 }
00071
00072
00073
00074
00075 if( i_reserve < 4 * SIO_KBYTE )
00076 i_reserve = 4 * SIO_KBYTE;
00077
00078
00079
00080
00081 if( streamMap == NULL )
00082 streamMap = new streamMap_c;
00083
00084
00085
00086
00087 std::pair< std::string const, SIO_stream* >
00088 entry( s_name, NULL );
00089
00090
00091
00092
00093
00094
00095 status = streamMap->insert( entry );
00096 if( !status.second )
00097 {
00098 if( verbosity >= SIO_ERRORS )
00099 {
00100 std::cout << "SIO: [Stream Manager] Stream "
00101 << i_name
00102 << " not added (already exists)"
00103 << std::endl;
00104 }
00105 return( NULL );
00106 }
00107
00108
00109
00110
00111 (status.first)->second = new SIO_stream( i_name, i_reserve, verbosity );
00112
00113 if( verbosity >= SIO_ALL )
00114 {
00115 std::cout << "SIO: [Stream Manager] Added stream "
00116 << i_name
00117 << std::endl;
00118 }
00119
00120
00121
00122
00123 return (status.first)->second;
00124 }
00125
00126
00127
00128
00129 SIO_stream* SIO_streamManager::get
00130 (
00131 const char* i_name
00132 )
00133 {
00134
00135
00136
00137
00138 if( streamMap != NULL )
00139 {
00140 streamMap_i
00141 iter;
00142
00143 std::string
00144 s_name = i_name;
00145
00146 if( (iter = streamMap->find( s_name )) != streamMap->end() )
00147 {
00148 if( verbosity >= SIO_ALL )
00149 {
00150 std::cout << "SIO: [Stream Manager] Stream "
00151 << i_name
00152 << " is defined (pointer returned)"
00153 << std::endl;
00154 }
00155 return( iter->second );
00156 }
00157 }
00158
00159 if( verbosity >= SIO_ERRORS )
00160 {
00161 std::cout << "SIO: [Stream Manager] Stream "
00162 << i_name
00163 << " has not been defined"
00164 << std::endl;
00165 }
00166
00167
00168
00169
00170 return( NULL );
00171 }
00172
00173
00174
00175
00176 SIO_verbosity SIO_streamManager::getVerbosity() { return( verbosity ); }
00177
00178
00179
00180
00181 unsigned int SIO_streamManager::remove
00182 (
00183 const char* i_name
00184 )
00185 {
00186
00187
00188
00189
00190 if( streamMap != NULL )
00191 {
00192 streamMap_i
00193 iter;
00194
00195 std::string
00196 s_name = i_name;
00197
00198 if( (iter = streamMap->find( s_name )) != streamMap->end() )
00199 {
00200 delete iter->second;
00201 streamMap->erase( iter );
00202
00203 if( verbosity >= SIO_ALL )
00204 {
00205 std::cout << "SIO: [Stream Manager] Removed stream "
00206 << i_name
00207 << std::endl;
00208 }
00209
00210 if( streamMap->size() == 0 )
00211 {
00212 delete streamMap;
00213 streamMap = NULL;
00214 }
00215 return( SIO_STREAM_SUCCESS );
00216 }
00217 }
00218
00219 if( verbosity >= SIO_ERRORS )
00220 {
00221 std::cout << "SIO: [Stream Manager] Cannot remove stream "
00222 << i_name
00223 << " (it was never added)"
00224 << std::endl;
00225 }
00226
00227
00228
00229
00230 return( SIO_STREAM_NOTFOUND );
00231 }
00232
00233
00234
00235
00236 unsigned int SIO_streamManager::remove
00237 (
00238 SIO_stream* record
00239 )
00240 { return( remove( record->getName()->c_str() ) ); }
00241
00242
00243
00244
00245 SIO_verbosity SIO_streamManager::setVerbosity
00246 (
00247 SIO_verbosity i_verb
00248 )
00249 { SIO_verbosity o_verb = verbosity; verbosity = i_verb; return( o_verb ); }
00250