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

📄 filebuf_virtuals.cc

📁 俄罗斯高人Mamaich的Pocket gcc编译器(运行在PocketPC上)的全部源代码。
💻 CC
📖 第 1 页 / 共 2 页
字号:
  //beg  strmsz_1 = fb_03.in_avail();   pt_1 = fb_03.pubseekoff(2, std::ios_base::beg);  strmsz_2 = fb_03.in_avail();   off_1 = pt_1;  VERIFY( off_1 > 0 );  c1 = fb_03.snextc(); //current in pointer +1  VERIFY( c1 == '3' );  c2 = fb_03.sputc('\n');  //current in pointer +1  c3 = fb_03.sgetc();  VERIFY( c2 != c3 );   VERIFY( c3 == '4' );  fb_03.pubsync();   c1 = fb_03.sgetc();  VERIFY( c1 == c3 );  //cur  // 27filebuf-3.txt = bd2\n456789:;<=>?...  pt_2 = fb_03.pubseekoff(2, std::ios_base::cur);  off_2 = pt_2;  VERIFY( (off_2 == (off_1 + 2 + 1 + 1)) );  c1 = fb_03.snextc(); //current in pointer +1  VERIFY( c1 == '7' );  c2 = fb_03.sputc('x');  //test current out pointer  c3 = fb_03.sputc('\n');  c1 = fb_03.sgetc();  fb_03.pubsync();   c3 = fb_03.sgetc();  VERIFY( c1 == c3 );  //end  // 27filebuf-3.txt = "bd2\n456x\n9"   pt_2 = fb_03.pubseekoff(0, std::ios_base::end, 			  std::ios_base::in|std::ios_base::out);  off_1 = pt_2;  VERIFY( off_1 > off_2 ); //weak, but don't know exactly where it ends  c3 = fb_03.sputc('\n');  strmsz_1 = fb_03.sputn("because because because. . .", 28);    VERIFY( strmsz_1 == 28 );  c1 = fb_03.sungetc();  // Defect?  retval of sungetc is not necessarily the character ungotten.  // So re-get it.  c1 = fb_03.sgetc();  fb_03.pubsync();   c3 = fb_03.sgetc();  VERIFY( c1 == c3 );  // IN  // OUT  // seekpos  // pubseekpos(pos_type sp, ios_base::openmode)  // alters the stream position to sp  //IN|OUT  //beg  pt_1 = fb_03.pubseekoff(78, std::ios_base::beg);  off_1 = pt_1;  VERIFY( off_1 > 0 );  c1 = fb_03.snextc(); 		//current in pointer +1  VERIFY( c1 == ' ' );  c2 = fb_03.sputc('\n');  	//test current out pointer  c3 = fb_03.sgetc();  fb_03.pubsync(); 		//resets pointers  pt_2 = fb_03.pubseekpos(pt_1);  off_2 = pt_2;  VERIFY( off_1 == off_2 );  c3 = fb_03.snextc(); 		//current in pointer +1  VERIFY( c2 == c3 );  pt_1 = fb_03.pubseekoff(0, std::ios_base::end);  off_1 = pt_1;  VERIFY( off_1 > off_2 );  fb_03.sputn("\nof the wonderful things he does!!\nok", 37);  fb_03.pubsync();  // IN  // OUT  // VIRTUALS (indirectly tested)  // underflow  // if read position avail, returns *gptr()  // pbackfail(int_type c)  // put c back into input sequence  // overflow  // appends c to output seq  // NB Have to close these suckers. . .  // filebuf_type* close()  fb_01.close();  fb_02.close();  fb_03.close();  VERIFY( !fb_01.is_open() );  VERIFY( !fb_02.is_open() );  VERIFY( !fb_03.is_open() );}void test06(){  using namespace std;  typedef istream::int_type	int_type;  bool test = true;  ifstream ifs(name_02);  char buffer[] = "xxxxxxxxxx";  int_type len1 = ifs.rdbuf()->sgetn(buffer, sizeof(buffer));  VERIFY( len1 == sizeof(buffer) );  VERIFY( buffer[0] == 'a' );}// libstdc++/9322void test07(){  using std::locale;  bool test = true;  locale loc;  std::filebuf ob;  VERIFY( ob.getloc() == loc );  locale::global(locale("en_US"));  VERIFY( ob.getloc() == loc );  locale loc_de ("de_DE");  locale ret = ob.pubimbue(loc_de);  VERIFY( ob.getloc() == loc_de );  VERIFY( ret == loc );  locale::global(loc);  VERIFY( ob.getloc() == loc_de );}class MyTraits : public std::char_traits<char>{public:  static bool eq(char c1, char c2)  {    VERIFY( c1 != 'X' );    VERIFY( c2 != 'X' );    return std::char_traits<char>::eq(c1, c2);  }};class MyBuf : public std::basic_streambuf<char, MyTraits>{  char buffer[8];public:  MyBuf()  {    std::memset(buffer, 'X', sizeof(buffer));    std::memset(buffer + 2, 'f', 4);    setg(buffer + 2, buffer + 2, buffer + 6);  }};// libstdc++/9538void test08(){  bool test = true;  MyBuf mb;  mb.sputbackc('a');  }// libstdc++/9439, libstdc++/9425void test09(){  using namespace std;  bool test = true;  filebuf fbuf;  fbuf.open(name_01, ios_base::in);  filebuf::int_type r = fbuf.sputbackc('a');  fbuf.close();  VERIFY( r == filebuf::traits_type::eof() );}class Cvt_to_upper : public std::codecvt<char, char, mbstate_t>{  bool do_always_noconv() const throw()  {    return false;  }};// libstdc++/9169void test10(){  using namespace std;  bool test = true;  locale c_loc;  locale loc(c_loc, new Cvt_to_upper);  string str("abcdefghijklmnopqrstuvwxyz");  string tmp;  {    ofstream out;    out.imbue(loc);    out.open(name_04);    copy(str.begin(), str.end(),	 ostreambuf_iterator<char>(out));  }  {    ifstream in;    in.open(name_04);    copy(istreambuf_iterator<char>(in),	 istreambuf_iterator<char>(),	 back_inserter(tmp));  }  VERIFY( tmp.size() == str.size() );  VERIFY( tmp == str );}// libstdc++/9825void test11(){  using namespace std;  bool test = true;  filebuf fbuf;  fbuf.open(name_05, ios_base::in|ios_base::out|ios_base::trunc);  fbuf.sputn("crazy bees!", 11);  fbuf.pubseekoff(0, ios_base::beg);  fbuf.sbumpc();  fbuf.sputbackc('x');  filebuf::int_type c = fbuf.sbumpc();  VERIFY( c == 'x' );  c = fbuf.sbumpc();  VERIFY( c == 'r' );  c = fbuf.sbumpc();  VERIFY( c == 'a' );  fbuf.close();  }class errorcvt : public std::codecvt<char, char, mbstate_t>{protected:  std::codecvt_base::result  do_out(mbstate_t&, const char* from, const char*,	 const char*& from_next, char* to, char*,	 char*& to_next) const  {    from_next = from;    to_next = to;    return std::codecvt<char, char, mbstate_t>::error;  }    virtual bool do_always_noconv() const throw()  {    return false;  }};// libstdc++/9182void test12(){  using namespace std;  bool test = true;  locale loc;  loc = locale(loc, new errorcvt);    filebuf fbuf1;  fbuf1.pubimbue(loc);  fbuf1.open(name_06, ios_base::out | ios_base::trunc);  fbuf1.sputn("ison", 4);   int r = fbuf1.pubsync();  VERIFY( r == -1 );  fbuf1.close();}void test13(){  using namespace std;  bool test = true;    locale loc;  loc = locale(loc, new errorcvt);    filebuf fbuf1;  fbuf1.pubimbue(loc);  fbuf1.pubsetbuf(0, 0);  fbuf1.open(name_06, ios_base::out | ios_base::trunc);  streamsize n = fbuf1.sputn("onne", 4);  VERIFY( n == 0 );  fbuf1.close();}class OverBuf : public std::filebuf{public:  int_type pub_overflow(int_type c = traits_type::eof())  { return std::filebuf::overflow(c); }};// libstdc++/9988void test14(){  using namespace std;  bool test = true;    OverBuf fb;  fb.open(name_07, ios_base::out | ios_base::trunc);    fb.sputc('a');  fb.pub_overflow('b');  fb.pub_overflow();  fb.sputc('c');  fb.close();  filebuf fbin;  fbin.open(name_07, ios_base::in);  filebuf::int_type c;  c = fbin.sbumpc();  VERIFY( c == 'a' );  c = fbin.sbumpc();  VERIFY( c == 'b' );  c = fbin.sbumpc();  VERIFY( c == 'c' );  c = fbin.sbumpc();  VERIFY( c == filebuf::traits_type::eof() );  fbin.close();}class UnderBuf : public std::filebuf{public:  int_type  pub_underflow()  { return underflow(); }  std::streamsize  pub_showmanyc()  { return showmanyc(); }};// libstdc++/10097void test15(){  using namespace std;  bool test = true;  const char* name = "tmp_fifo1";    signal(SIGPIPE, SIG_IGN);  unlink(name);    if (0 != mkfifo(name, S_IRWXU))    {      VERIFY( false );    }    int fval = fork();  if (fval == -1)    {      unlink(name);      VERIFY( false );    }  else if (fval == 0)    {      filebuf fbout;      fbout.open(name, ios_base::out);      fbout.sputn("0123456789", 10);      fbout.pubsync();      sleep(2);      fbout.close();      exit(0);    }  UnderBuf fb;  fb.open(name, ios_base::in);  sleep(1);    fb.sgetc();  streamsize n = fb.pub_showmanyc();  while (n > 0)    {      --n;            UnderBuf::int_type c = fb.pub_underflow();      VERIFY( c != UnderBuf::traits_type::eof() );            fb.sbumpc();    }  fb.close();}main() {  test01();  test02();    test03();  test04();  test05();  test06();  test07();  test08();  test09();  test10();  test11();  test12();  test13();  test14();  test15();  return 0;}

⌨️ 快捷键说明

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