blob: 6153be5126bb362b95b42785c4a92105eb958433 [file] [log] [blame]
// This file is part of the ustl library, an STL implementation.
//
// Copyright (C) 2005 by Mike Sharov <msharov@users.sourceforge.net>
// This file is free software, distributed under the MIT License.
//
// uios.h
//
// Types used by the streams for option setting.
//
#ifndef UIOS_H_630C16E316F7650E3A02E1C6611B789A
#define UIOS_H_630C16E316F7650E3A02E1C6611B789A
#include "utypes.h"
namespace ustl {
class file_exception;
const char endl = '\n'; ///< End of line character.
const char ends = '\0'; ///< End of string character.
/// Defines types and constants used by all stream classes.
class ios_base {
public:
/// Used to set parameters for stringstreams
enum fmtflags {
boolalpha = (1 << 0), ///< Boolean values printed as text.
dec = (1 << 1), ///< Decimal number output.
fixed = (1 << 2), ///< Fixed-point float output.
hex = (1 << 3), ///< Hexadecimal number output.
internal = (1 << 4),
left = (1 << 5), ///< Left alignment.
oct = (1 << 6), ///< Octal number output.
right = (1 << 7), ///< Right alignment.
scientific = (1 << 8), ///< Scientific float format.
showbase = (1 << 9), ///< Add 0x or 0 prefixes on hex and octal numbers.
showpoint = (1 << 10), ///< Print decimal point.
showpos = (1 << 11),
skipws = (1 << 12), ///< Skip whitespace when reading.
unitbuf = (1 << 13),
uppercase = (1 << 14),
adjustfield = (1 << 15),
basefield = (1 << 16),
floatfield = (1 << 17)
};
/// For file-based streams, specifies fd mode.
enum openmode_bits {
in = (1 << 0),
out = (1 << 1),
app = (1 << 2),
ate = (1 << 3),
binary = (1 << 4),
trunc = (1 << 5),
#ifndef DOXYGEN_SHOULD_SKIP_THIS
nonblock= (1 << 6),
nocreate= (1 << 7),
noctty = (1 << 8),
nombits = 9
#endif
};
/// Seek directions, equivalent to SEEK_SET, SEEK_CUR, and SEEK_END.
enum seekdir {
beg,
cur,
end
};
/// I/O state bitmasks.
enum iostate_bits {
goodbit = 0,
badbit = (1 << 0),
eofbit = (1 << 1),
failbit = (1 << 2),
#ifndef DOXYGEN_SHOULD_SKIP_THIS
nbadbits = 3,
allbadbits = 0x7
#endif
};
typedef uint32_t openmode; ///< Holds openmode_bits.
typedef uint32_t iostate; ///< Holds iostate_bits for a file stream.
typedef file_exception failure; ///< Thrown by fstream on errors.
static const char c_DefaultDelimiters [16]; ///< Default word delimiters for stringstreams.
public:
inline ios_base (void) : m_State (goodbit), m_Exceptions (goodbit) {}
inline iostate rdstate (void) const { return (m_State); }
inline bool bad (void) const { return (rdstate() & badbit); }
inline bool good (void) const { return (rdstate() == goodbit); }
inline bool fail (void) const { return (rdstate() & (badbit | failbit)); }
inline bool eof (void) const { return (rdstate() & eofbit); }
inline bool operator! (void) const { return (fail()); }
inline void clear (iostate v = goodbit) { m_State = v; }
inline void setstate (iostate v) { m_State |= v; }
inline iostate exceptions (void) const { return (m_Exceptions); }
inline iostate exceptions (iostate v) { return (m_Exceptions = v); }
protected:
inline bool set_and_throw (iostate v) { setstate(v); return (exceptions() & v); }
private:
uint16_t m_State; ///< Open state, using ios::iostate_bits.
uint16_t m_Exceptions; ///< Exception flags, using ios::iostate_bits.
};
} // namespace ustl
#endif