/** -*- C++ -*- ** ** KAI C++ Compiler ** ** Copyright (C) 1996-2001 Intel Corp. All rights reserved. **/ #ifndef __KAI_IOMANIP #define __KAI_IOMANIP // This is a total rewrite of the Modena code. The original // code was rather bloated and took >400 lines to express what is // expressed in about 90 lines. -- dcn #include #include #include namespace __kai { // forward declare the implementation classes. template class smanip_gen; template class omanip_setfill; } namespace std { // // Manipulator Magic // template inline basic_ostream& operator<<(basic_ostream& os, const __kai::smanip_gen& m) { (*m.fct)(os, m.val); return os; } template inline basic_istream& operator>>(basic_istream& is, const __kai::smanip_gen& m) { (*m.fct)(is, m.val); return is; } template inline basic_ostream& operator<<(basic_ostream& os, const __kai::omanip_setfill& m) { os.fill(m.val); // set fill character return os; } // // Standard Manipulators // __kai::smanip_gen resetiosflags(ios_base::fmtflags mask); __kai::smanip_gen setiosflags(ios_base::fmtflags mask); __kai::smanip_gen setbase(int base); template __kai::omanip_setfill setfill(charT c) { return __kai::omanip_setfill(c); } __kai::smanip_gen setprecision(streamsize n); __kai::smanip_gen setw(streamsize n); } // namespace std namespace __kai { template class smanip_gen { typedef ios_base& (*pmf)(ios_base&,T); pmf fct; T val; public: smanip_gen(pmf f, T v) : fct(f),val(v) { } template friend std::basic_ostream& std::operator<<(std::basic_ostream& os, const smanip_gen& m); template friend std::basic_istream& std::operator>>(std::basic_istream& is, const smanip_gen& m); }; template class omanip_setfill { charT val; public: omanip_setfill(charT v) : val(v) { } template friend std::basic_ostream& std::operator<<(std::basic_ostream& os, const omanip_setfill& m); }; } // namespace __kai #endif /* __KAI_IOMANIP */