Changeset d91b329 in mainline for uspace/lib/cpp/include/impl/istream.hpp
- Timestamp:
- 2018-07-05T21:41:19Z (7 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- af8bda0
- Parents:
- c1e11d32
- git-author:
- Dzejrou <dzejrou@…> (2017-12-18 12:26:42)
- git-committer:
- Dzejrou <dzejrou@…> (2018-07-05 21:41:19)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/cpp/include/impl/istream.hpp
rc1e11d32 rd91b329 358 358 basic_istream<Char, Traits>& operator>>(basic_streambuf<Char, Traits>* sb) 359 359 { 360 // TODO: implement 360 if (!sb) 361 { 362 this->setstate(ios_base::failbit); 363 return *this; 364 } 365 366 gcount_ = 0; 367 sentry sen{*this, false}; 368 369 if (sen) 370 { 371 while (true) 372 { 373 auto ic = this->rdbuf()->sgetc(); 374 if (traits_type::eq_int_type(ic, traits_type::eof())) 375 { 376 this->setstate(ios_base::eofbit); 377 break; 378 } 379 380 auto res = sb->sputc(traits_type::to_char_type(ic)); 381 if (traits_type::eq_int_type(res, traits_type::eof())) 382 break; 383 384 ++gcount_; 385 this->rdbuf()->sbumpc(); 386 } 387 } 388 389 return *this; 361 390 } 362 391 … … 751 780 Char& c) 752 781 { 753 // TODO: implement 782 typename basic_istream<Char, Traits>::sentry sen{is, false}; 783 784 if (sen) 785 { 786 auto ic = is.rdbuf()->sgetc(); 787 if (Traits::eq_int_type(ic, Traits::eof())) 788 { 789 is.setstate(ios_base::failbit | ios_base::eofbit); 790 return is; 791 } 792 793 c = Traits::to_char_type(is.rdbuf()->sbumpc()); 794 } 795 796 return is; 754 797 } 755 798 … … 758 801 unsigned char& c) 759 802 { 760 // TODO: implement803 return is >> static_cast<char&>(c); 761 804 } 762 805 … … 765 808 signed char& c) 766 809 { 767 // TODO: implement810 return is >> static_cast<char&>(c); 768 811 } 769 812 770 813 template<class Char, class Traits> 771 814 basic_istream<Char, Traits>& operator>>(basic_istream<Char, Traits>& is, 772 Char* c)815 Char* str) 773 816 { 774 // TODO: implement 817 typename basic_istream<Char, Traits>::sentry sen{is, false}; 818 819 if (sen) 820 { 821 const auto& ct = use_facet<ctype<Char>>(is.getloc()); 822 823 size_t n{}; 824 if (is.width() > 0) 825 n = static_cast<size_t>(is.width()); 826 else 827 n = (numeric_limits<size_t>::max() / sizeof(Char)) - sizeof(Char); 828 829 size_t i{}; 830 for (; i < n - 1; ++i) 831 { 832 auto ic = is.rdbuf()->sgetc(); 833 if (Traits::eq_int_type(ic, Traits::eof())) 834 break; 835 836 auto c = Traits::to_char_type(ic); 837 if (ct.is(ctype_base::space, c)) 838 break; 839 840 str[i] = c; 841 is.rdbuf()->sbumpc(); 842 } 843 844 str[i] = Char{}; 845 if (i == 0) 846 is.setstate(ios_base::failbit); 847 } 848 849 return is; 775 850 } 776 851 777 852 template<class Char, class Traits> 778 853 basic_istream<Char, Traits>& operator>>(basic_istream<Char, Traits>& is, 779 unsigned char* c)854 unsigned char* str) 780 855 { 781 // TODO: implement856 return is >> static_cast<char*>(str); 782 857 } 783 858 784 859 template<class Char, class Traits> 785 860 basic_istream<Char, Traits>& operator>>(basic_istream<Char, Traits>& is, 786 signed char* c)861 signed char* str) 787 862 { 788 // TODO: implement863 return is >> static_cast<char*>(str); 789 864 } 790 865
Note:
See TracChangeset
for help on using the changeset viewer.