159 lines
4.1 KiB
C
159 lines
4.1 KiB
C
|
/**
|
||
|
* Copyright (c) 2011-2018 Bill Greiman
|
||
|
* This file is part of the SdFat library for SD memory cards.
|
||
|
*
|
||
|
* MIT License
|
||
|
*
|
||
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
||
|
* copy of this software and associated documentation files (the "Software"),
|
||
|
* to deal in the Software without restriction, including without limitation
|
||
|
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||
|
* and/or sell copies of the Software, and to permit persons to whom the
|
||
|
* Software is furnished to do so, subject to the following conditions:
|
||
|
*
|
||
|
* The above copyright notice and this permission notice shall be included
|
||
|
* in all copies or substantial portions of the Software.
|
||
|
*
|
||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||
|
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||
|
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||
|
* DEALINGS IN THE SOFTWARE.
|
||
|
*/
|
||
|
#ifndef iostream_h
|
||
|
#define iostream_h
|
||
|
/**
|
||
|
* \file
|
||
|
* \brief \ref iostream class
|
||
|
*/
|
||
|
#include "istream.h"
|
||
|
#include "ostream.h"
|
||
|
/** Skip white space
|
||
|
* \param[in] is the Stream
|
||
|
* \return The stream
|
||
|
*/
|
||
|
inline istream& ws(istream& is) {
|
||
|
is.skipWhite();
|
||
|
return is;
|
||
|
}
|
||
|
/** insert endline
|
||
|
* \param[in] os The Stream
|
||
|
* \return The stream
|
||
|
*/
|
||
|
inline ostream& endl(ostream& os) {
|
||
|
os.put('\n');
|
||
|
#if ENDL_CALLS_FLUSH
|
||
|
os.flush();
|
||
|
#endif // ENDL_CALLS_FLUSH
|
||
|
return os;
|
||
|
}
|
||
|
/** flush manipulator
|
||
|
* \param[in] os The stream
|
||
|
* \return The stream
|
||
|
*/
|
||
|
inline ostream& flush(ostream& os) {
|
||
|
os.flush();
|
||
|
return os;
|
||
|
}
|
||
|
/**
|
||
|
* \struct setfill
|
||
|
* \brief type for setfill manipulator
|
||
|
*/
|
||
|
struct setfill {
|
||
|
/** fill character */
|
||
|
char c;
|
||
|
/** constructor
|
||
|
*
|
||
|
* \param[in] arg new fill character
|
||
|
*/
|
||
|
explicit setfill(char arg) : c(arg) {}
|
||
|
};
|
||
|
/** setfill manipulator
|
||
|
* \param[in] os the stream
|
||
|
* \param[in] arg set setfill object
|
||
|
* \return the stream
|
||
|
*/
|
||
|
inline ostream &operator<< (ostream &os, const setfill &arg) {
|
||
|
os.fill(arg.c);
|
||
|
return os;
|
||
|
}
|
||
|
/** setfill manipulator
|
||
|
* \param[in] obj the stream
|
||
|
* \param[in] arg set setfill object
|
||
|
* \return the stream
|
||
|
*/
|
||
|
inline istream &operator>>(istream &obj, const setfill &arg) {
|
||
|
obj.fill(arg.c);
|
||
|
return obj;
|
||
|
}
|
||
|
//------------------------------------------------------------------------------
|
||
|
/** \struct setprecision
|
||
|
* \brief type for setprecision manipulator
|
||
|
*/
|
||
|
struct setprecision {
|
||
|
/** precision */
|
||
|
unsigned int p;
|
||
|
/** constructor
|
||
|
* \param[in] arg new precision
|
||
|
*/
|
||
|
explicit setprecision(unsigned int arg) : p(arg) {}
|
||
|
};
|
||
|
/** setprecision manipulator
|
||
|
* \param[in] os the stream
|
||
|
* \param[in] arg set setprecision object
|
||
|
* \return the stream
|
||
|
*/
|
||
|
inline ostream &operator<< (ostream &os, const setprecision &arg) {
|
||
|
os.precision(arg.p);
|
||
|
return os;
|
||
|
}
|
||
|
/** setprecision manipulator
|
||
|
* \param[in] is the stream
|
||
|
* \param[in] arg set setprecision object
|
||
|
* \return the stream
|
||
|
*/
|
||
|
inline istream &operator>>(istream &is, const setprecision &arg) {
|
||
|
is.precision(arg.p);
|
||
|
return is;
|
||
|
}
|
||
|
//------------------------------------------------------------------------------
|
||
|
/** \struct setw
|
||
|
* \brief type for setw manipulator
|
||
|
*/
|
||
|
struct setw {
|
||
|
/** width */
|
||
|
unsigned w;
|
||
|
/** constructor
|
||
|
* \param[in] arg new width
|
||
|
*/
|
||
|
explicit setw(unsigned arg) : w(arg) {}
|
||
|
};
|
||
|
/** setw manipulator
|
||
|
* \param[in] os the stream
|
||
|
* \param[in] arg set setw object
|
||
|
* \return the stream
|
||
|
*/
|
||
|
inline ostream &operator<< (ostream &os, const setw &arg) {
|
||
|
os.width(arg.w);
|
||
|
return os;
|
||
|
}
|
||
|
/** setw manipulator
|
||
|
* \param[in] is the stream
|
||
|
* \param[in] arg set setw object
|
||
|
* \return the stream
|
||
|
*/
|
||
|
inline istream &operator>>(istream &is, const setw &arg) {
|
||
|
is.width(arg.w);
|
||
|
return is;
|
||
|
}
|
||
|
//==============================================================================
|
||
|
/**
|
||
|
* \class iostream
|
||
|
* \brief Input/Output stream
|
||
|
*/
|
||
|
class iostream : public istream, public ostream {
|
||
|
};
|
||
|
#endif // iostream_h
|