URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
[/] [openrisc/] [trunk/] [rtos/] [ecos-3.0/] [packages/] [language/] [cxx/] [ustl/] [current/] [include/] [ustl/] [uiosfunc.h] - Rev 786
Compare with Previous | Blame | View Log
// This file is part of the uSTL library, an STL implementation. // // Copyright (c) 2005-2009 by Mike Sharov <msharov@users.sourceforge.net> // This file is free software, distributed under the MIT License. #ifndef UIOSFUNC_H_730C16E316F7650E3A02E1C6611B789A #define UIOSFUNC_H_730C16E316F7650E3A02E1C6611B789A #include "sostream.h" namespace ustl { class ios : public ios_base { public: /// \class align uiosfunc.h ustl.h /// \ingroup StreamFunctors /// \brief Stream functor to allow inline align() calls. /// /// Example: os << ios::align(sizeof(uint16_t)); /// class align { public: inline explicit align (size_t grain = c_DefaultAlignment) : m_Grain(grain) {} inline istream& apply (istream& is) const { is.align (m_Grain); return (is); } inline ostream& apply (ostream& os) const { os.align (m_Grain); return (os); } inline void read (istream& is) const { apply (is); } inline void write (ostream& os) const { apply (os); } inline size_t stream_size (void) const { return (m_Grain - 1); } private: const size_t m_Grain; }; /// \class talign uiosfunc.h ustl.h /// \ingroup StreamFunctors /// \brief Stream functor to allow type-based alignment. template <typename T> class talign : public align { public: inline explicit talign (void) : align (alignof (NullValue<T>())) {} }; /// \class skip uiosfunc.h ustl.h /// \ingroup StreamFunctors /// \brief Stream functor to allow inline skip() calls. /// /// Example: os << ios::skip(sizeof(uint16_t)); /// class skip { public: inline explicit skip (size_t nBytes) : m_nBytes(nBytes) {} inline istream& apply (istream& is) const { is.skip (m_nBytes); return (is); } inline ostream& apply (ostream& os) const { os.skip (m_nBytes); return (os); } inline void read (istream& is) const { apply (is); } inline void write (ostream& os) const { apply (os); } inline size_t stream_size (void) const { return (m_nBytes); } private: const size_t m_nBytes; }; /// \class width uiosfunc.h ustl.h /// \ingroup StreamFunctors /// \brief Stream functor to allow inline set_width() calls. /// /// Example: os << ios::width(15); /// class width { public: inline explicit width (size_t nBytes) : m_nBytes(nBytes) {} inline ostringstream& apply (ostringstream& os) const { os.set_width (m_nBytes); return (os); } inline void text_write (ostringstream& os) const { apply (os); } private: const size_t m_nBytes; }; /// \class base uiosfunc.h ustl.h /// \ingroup StreamFunctors /// \brief Stream functor to allow inline set_base() calls. /// /// Example: os << ios::base(15); /// class base { public: inline explicit base (size_t n) : m_Base(n) {} inline ostringstream& apply (ostringstream& os) const { os.set_base (m_Base); return (os); } inline void text_write (ostringstream& os) const { apply (os); } private: const size_t m_Base; }; }; } // namespace ustl CAST_STREAMABLE(ustl::ios::fmtflags, uint32_t) NUMERIC_LIMITS(ustl::ios::fmtflags, ustl::ios::boolalpha, ustl::ios::floatfield, false, true, true) #endif