ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-4/src/io/basic_ifstrstream.hpp
(Generate patch)

Comparing trunk/OOPSE-4/src/io/basic_ifstrstream.hpp (file contents):
Revision 1930 by gezelter, Wed Jan 12 22:41:40 2005 UTC vs.
Revision 2165 by tim, Mon Apr 11 21:58:05 2005 UTC

# Line 104 | Line 104 | class basic_ifstrstream : public std::basic_istream<_C
104          
105          /**  Constructs an object of class ifstream.  */
106          basic_ifstrstream()
107 <            : std::basic_ios<_CharT, _Traits>(),  std::basic_istream<_CharT, _Traits>(0),
108 <              internalBuf_(NULL), isRead(false)  {
109 <
110 < #ifdef IS_MPI        
111 <            //in parallel mode, fall back to istringstream
112 <            std::basic_stringbuf<_CharT, _Traits, _Alloc>* stringBuffer = new  std::basic_stringbuf<_CharT, _Traits, _Alloc>();
113 <            internalBuf_ =  stringBuffer;
114 < #else
115 <            //in single version, fall back to ifstream
116 <            std::basic_filebuf<_CharT, _Traits>* fileBuffer = new  std::basic_filebuf<_CharT, _Traits>();
117 <            internalBuf_ =  fileBuffer;
118 < #endif            
119 <
120 <            this->init(internalBuf_);
121 <            isRead = false;
107 >            :  std::basic_istream<_CharT, _Traits>(0),
108 >              internalBuf_(), isRead(false)  {
109 >    
110 >            this->init(&internalBuf_);
111          }
112          
113          /**
# Line 128 | Line 117 | class basic_ifstrstream : public std::basic_istream<_C
117           * @checkFilename Flags indicating checking the file name in parallel
118           */
119          explicit basic_ifstrstream(const char* filename, std::ios_base::openmode mode = std::ios_base::in, bool checkFilename = false)
120 <            : std::basic_ios<_CharT, _Traits>(),  std::basic_istream<_CharT, _Traits>(0),
121 <              internalBuf_(NULL), isRead(false) {
120 >            :  std::basic_istream<_CharT, _Traits>(0),
121 >              internalBuf_(), isRead(false) {
122  
123 <           isRead =  internalOpen(filename,  mode | std::ios_base::in, checkFilename);
123 >             this->init(&internalBuf_);
124 >             isRead =  internalOpen(filename,  mode | std::ios_base::in, checkFilename);
125           }
126  
127          /**
# Line 139 | Line 129 | class basic_ifstrstream : public std::basic_istream<_C
129           */
130          ~basic_ifstrstream(){
131              close();
142            delete internalBuf_;
143            internalBuf_ = NULL;
132          }
133  
134          /**
# Line 168 | Line 156 | class basic_ifstrstream : public std::basic_istream<_C
156              return isRead;
157   #else
158              //single version fall back to ifstream
159 <            return this->rdbuf()->is_open();
159 >            return internalBuf_.is_open();
160   #endif
161          }
162  
# Line 179 | Line 167 | class basic_ifstrstream : public std::basic_istream<_C
167          void close() {
168   #ifndef IS_MPI            
169              //single version fall back to ifstream
170 <            if (!this->rdbuf()->close())
170 >            if (!internalBuf_.close())
171                  this->setstate(std::ios_base::failbit);
172   #endif            
173  
# Line 192 | Line 180 | class basic_ifstrstream : public std::basic_istream<_C
180           * parallel mode) associated with the stream.
181           */
182          _Buf* rdbuf() const{
183 <            return static_cast<_Buf*>(internalBuf_);
183 >            return static_cast<_Buf*>(&internalBuf_);
184          }
185  
186      private:
# Line 238 | Line 226 | class basic_ifstrstream : public std::basic_istream<_C
226                  }
227                  
228                  std::ifstream fin(filename, mode);
241                std::basic_stringbuf<_CharT, _Traits, _Alloc>* sbuf;
229  
230                  if (fin.is_open()) {
231                      
# Line 270 | Line 257 | class basic_ifstrstream : public std::basic_istream<_C
257                      fbuf[fileSize] = '\0';
258                      commStatus = MPI_Bcast(fbuf, fileSize + 1, MPI_CHAR, masterNode, MPI_COMM_WORLD);
259  
273                    //it is safe to delete null pointer
274                    delete internalBuf_;
275
276                    //initilaize istream
277                    internalBuf_  = new std::basic_stringbuf<_CharT, _Traits, _Alloc>(fbuf, mode);
278                    assert(internalBuf_);
279                    this->init(internalBuf_);
280
260                      //close the file and delete the buffer
261 <                    fin.close();                    
261 >                    fin.close();      
262 >                    internalBuf_.str(fbuf);
263                      delete fbuf;
264                  }else{
265                      fileSize = FileNotExists;
# Line 318 | Line 298 | class basic_ifstrstream : public std::basic_istream<_C
298                          //receive file content
299                          commStatus = MPI_Bcast(fbuf, fileSize + 1, MPI_CHAR, masterNode, MPI_COMM_WORLD);
300  
301 <                        //it is safe to delete null pointer
322 <                        delete internalBuf_;
323 <
324 <                        //initilaize istream                        
325 <                        internalBuf_  = new std::basic_stringbuf<_CharT, _Traits, _Alloc>(fbuf, mode);
326 <                        assert(internalBuf_);
327 <                        this->init(internalBuf_);
328 <
301 >                        internalBuf_.str(fbuf);
302                          delete fbuf;
303  
304                      } else if (fileSize == FileNotExists ) {
# Line 338 | Line 311 | class basic_ifstrstream : public std::basic_istream<_C
311  
312   #else
313              //in single version, fall back to ifstream
314 <            std::basic_filebuf<_CharT, _Traits>* fileBuffer = new  std::basic_filebuf<_CharT, _Traits>();
342 <
343 <            //it is safe to delete null pointer
344 <            delete internalBuf_;
345 <            internalBuf_ =  fileBuffer;
346 <
347 <            this->init(internalBuf_);
348 <            if (!fileBuffer->open(filename, mode)) {
314 >            if (!internalBuf_.open(filename, mode)) {
315                  this->setstate(std::ios_base::failbit);
316                  return false;
317              }    
318  
319   #endif
320 <
320 >            this->clear();
321              return true;
322          }
323          
324 <        std::basic_streambuf<_CharT, _Traits>*  internalBuf_; /** internal stream buffer */        
324 >        _Buf  internalBuf_; /** internal stream buffer */        
325          bool isRead;                                                                    /** file opened flag */
326   };
327  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines