⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 multistream.h

📁 Amis - A maximum entropy estimator 一个最大熵模型统计工具
💻 H
字号:
////////////////////////////////////////////////////////////////////////////  Copyright (c) 2000, Yusuke Miyao///  You may distribute under the terms of the Artistic License.//////  <id>$Id: MultiStream.h,v 1.5 2003/05/16 12:10:44 yusuke Exp $</id>///  <collection>Maximum Entropy Estimator</collection>///  <name>MultiStream.h</name>///  <overview>A stream with multiple files</overview>/////////////////////////////////////////////////////////////////////////#ifndef Amis_MultiStream_h_#define Amis_MultiStream_h_#include <amis/configure.h>#include <amis/ErrorBase.h>#include <fstream>#include <vector>AMIS_NAMESPACE_BEGIN/// <classdef>/// <name>multi_filebuf</name>/// <overview>Input buffer from multiple files</overview>/// <desc>An input buffer from multiple files extended from `filebuf'</desc>/// <body>class multi_filebuf : public std::filebuf {private:  size_t pointer;  std::vector< std::string > file_names;public:    multi_filebuf( const std::vector< std::string >& names ) : std::filebuf() {    pointer = 0;    file_names = names;    if ( pointer < file_names.size() ) {      std::filebuf::open( file_names[ pointer ].c_str(), std::ios::in );    }  }  int uflow( void ) {     int ret = std::filebuf::uflow();     if ( ret == EOF ) {       ++pointer;       if ( pointer < file_names.size() ) {         std::filebuf::close();         std::filebuf::open( file_names[ pointer ].c_str(), std::ios::in );       } else {         return EOF;       }       ret = std::filebuf::uflow();     }     return ret;  }      int underflow( void ) {    int ret = std::filebuf::underflow();    if ( ret == EOF ) {      ++pointer;      if ( pointer < file_names.size() ) {        std::filebuf::close();        std::filebuf::open( file_names[ pointer ].c_str(), std::ios::in );      } else {        return EOF;      }      ret = std::filebuf::underflow();    }    return ret;  }};/// </body>/// </classdef>/// <classdef>/// <name>MultiIFStream</name>/// <overview>Input stream from multiple files</overview>/// <desc>An input stream from multiple files</desc>/// <body>class MultiIFStream : public std::istream {public:  MultiIFStream( const std::vector< std::string >& names )    : std::istream( NULL ) {    multi_filebuf* buf = new multi_filebuf( names );    if ( buf->is_open() ) {      init( buf );    } else {      delete buf;      init( NULL );    }  }  virtual ~MultiIFStream() {    if ( rdbuf() != NULL ) {      delete rdbuf();    }  }};/// </body>/// </classdef>AMIS_NAMESPACE_END#endif // MultiStream_h_// end of MultiStream.h

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -