diff options
Diffstat (limited to 'gcc-4.9/libstdc++-v3/include/tr2/bool_set.tcc')
-rw-r--r-- | gcc-4.9/libstdc++-v3/include/tr2/bool_set.tcc | 277 |
1 files changed, 277 insertions, 0 deletions
diff --git a/gcc-4.9/libstdc++-v3/include/tr2/bool_set.tcc b/gcc-4.9/libstdc++-v3/include/tr2/bool_set.tcc new file mode 100644 index 0000000..7068e8f --- /dev/null +++ b/gcc-4.9/libstdc++-v3/include/tr2/bool_set.tcc @@ -0,0 +1,277 @@ +// TR2 <bool_set> support files -*- C++ -*- + +// Copyright (C) 2009-2014 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// <http://www.gnu.org/licenses/>. + +/** @file tr2/bool_set.tcc + * This is a TR2 C++ Library header. + */ + +#ifndef _GLIBCXX_TR2_BOOL_SET_TCC +#define _GLIBCXX_TR2_BOOL_SET_TCC 1 + +#pragma GCC system_header + +namespace std _GLIBCXX_VISIBILITY(default) +{ +namespace tr2 +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + bool_set::_Bool_set_val + bool_set::_S_not[4] = + { _S_true_, _S_false, _S_indet, _S_empty }; + + bool_set::_Bool_set_val + bool_set::_S_xor[4][4] = + { { _S_false, _S_true_, _S_indet, _S_empty }, + { _S_true_, _S_false, _S_indet, _S_empty }, + { _S_indet, _S_indet, _S_indet, _S_empty }, + { _S_empty, _S_empty, _S_empty, _S_empty } }; + + bool_set::_Bool_set_val + bool_set::_S_or[4][4] = + { { _S_false, _S_true_, _S_indet, _S_empty }, + { _S_true_, _S_true_, _S_true_, _S_empty }, + { _S_indet, _S_true_, _S_indet, _S_empty }, + { _S_empty, _S_empty, _S_empty, _S_empty } }; + + bool_set::_Bool_set_val + bool_set::_S_and[4][4] = + { { _S_false, _S_false, _S_false, _S_empty }, + { _S_false, _S_true_, _S_indet, _S_empty }, + { _S_false, _S_indet, _S_indet, _S_empty }, + { _S_empty, _S_empty, _S_empty, _S_empty } }; + + bool_set::_Bool_set_val + bool_set::_S_eq[4][4] = + { { _S_true_, _S_false, _S_indet, _S_empty }, + { _S_false, _S_true_, _S_indet, _S_empty }, + { _S_indet, _S_indet, _S_indet, _S_empty }, + { _S_empty, _S_empty, _S_empty, _S_empty } }; + +_GLIBCXX_END_NAMESPACE_VERSION +} +} + +// I object to these things. +// The stuff in locale facets are for basic types. +// I think we could hack operator<< and operator>>. + + /** + * @brief Numeric parsing. + * + * Parses the input stream into the bool @a v. It does so by calling + * num_get::do_get(). + * + * If ios_base::boolalpha is set, attempts to read + * ctype<CharT>::truename() or ctype<CharT>::falsename(). Sets + * @a v to true or false if successful. Sets err to + * ios_base::failbit if reading the string fails. Sets err to + * ios_base::eofbit if the stream is emptied. + * + * If ios_base::boolalpha is not set, proceeds as with reading a long, + * except if the value is 1, sets @a v to true, if the value is 0, sets + * @a v to false, and otherwise set err to ios_base::failbit. + * + * @param in Start of input stream. + * @param end End of input stream. + * @param io Source of locale and flags. + * @param err Error flags to set. + * @param v Value to format and insert. + * @return Iterator after reading. + iter_type + get(iter_type __in, iter_type __end, ios_base& __io, + ios_base::iostate& __err, bool& __v) const + { return this->do_get(__in, __end, __io, __err, __v); } + */ +/* + template<typename _CharT, typename _InIter> + _InIter + num_get<_CharT, _InIter>:: + do_get(iter_type __beg, iter_type __end, ios_base& __io, + ios_base::iostate& __err, bool_set& __v) const + { + if (!(__io.flags() & ios_base::boolalpha)) + { + // Parse bool values as long. + // NB: We can't just call do_get(long) here, as it might + // refer to a derived class. + long __l = -1; + __beg = _M_extract_int(__beg, __end, __io, __err, __l); + if (__c >= _S_false && __c < _S_empty) + __b._M_b = static_cast<_Bool_set_val>(__c); + else + { + // What should we do here? + __v = true; + __err = ios_base::failbit; + if (__beg == __end) + __err |= ios_base::eofbit; + } + } + else + { + // Parse bool values as alphanumeric. + typedef __numpunct_cache<_CharT> __cache_type; + __use_cache<__cache_type> __uc; + const locale& __loc = __io._M_getloc(); + const __cache_type* __lc = __uc(__loc); + + bool __testf = true; + bool __testt = true; + bool __donef = __lc->_M_falsename_size == 0; + bool __donet = __lc->_M_truename_size == 0; + bool __testeof = false; + size_t __n = 0; + while (!__donef || !__donet) + { + if (__beg == __end) + { + __testeof = true; + break; + } + + const char_type __c = *__beg; + + if (!__donef) + __testf = __c == __lc->_M_falsename[__n]; + + if (!__testf && __donet) + break; + + if (!__donet) + __testt = __c == __lc->_M_truename[__n]; + + if (!__testt && __donef) + break; + + if (!__testt && !__testf) + break; + + ++__n; + ++__beg; + + __donef = !__testf || __n >= __lc->_M_falsename_size; + __donet = !__testt || __n >= __lc->_M_truename_size; + } + if (__testf && __n == __lc->_M_falsename_size && __n) + { + __v = false; + if (__testt && __n == __lc->_M_truename_size) + __err = ios_base::failbit; + else + __err = __testeof ? ios_base::eofbit : ios_base::goodbit; + } + else if (__testt && __n == __lc->_M_truename_size && __n) + { + __v = true; + __err = __testeof ? ios_base::eofbit : ios_base::goodbit; + } + else + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 23. Num_get overflow result. + __v = false; + __err = ios_base::failbit; + if (__testeof) + __err |= ios_base::eofbit; + } + } + return __beg; + } +*/ + + /** + * @brief Numeric formatting. + * + * Formats the boolean @a v and inserts it into a stream. It does so + * by calling num_put::do_put(). + * + * If ios_base::boolalpha is set, writes ctype<CharT>::truename() or + * ctype<CharT>::falsename(). Otherwise formats @a v as an int. + * + * @param s Stream to write to. + * @param io Source of locale and flags. + * @param fill Char_type to use for filling. + * @param v Value to format and insert. + * @return Iterator after writing. + iter_type + put(iter_type __s, ios_base& __f, char_type __fill, bool __v) const + { return this->do_put(__s, __f, __fill, __v); } + */ + +/* + template<typename _CharT, typename _OutIter> + _OutIter + num_put<_CharT, _OutIter>:: + do_put(iter_type __s, ios_base& __io, char_type __fill, bool_set __v) const + { + const ios_base::fmtflags __flags = __io.flags(); + if ((__flags & ios_base::boolalpha) == 0) + { + const long __l = __v; + __s = _M_insert_int(__s, __io, __fill, __l); + } + else + { + typedef __numpunct_cache<_CharT> __cache_type; + __use_cache<__cache_type> __uc; + const locale& __loc = __io._M_getloc(); + const __cache_type* __lc = __uc(__loc); + + const _CharT* __name = __v ? __lc->_M_truename + : __lc->_M_falsename; + int __len = __v ? __lc->_M_truename_size + : __lc->_M_falsename_size; + + const streamsize __w = __io.width(); + if (__w > static_cast<streamsize>(__len)) + { + const streamsize __plen = __w - __len; + _CharT* __ps + = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) + * __plen)); + + char_traits<_CharT>::assign(__ps, __plen, __fill); + __io.width(0); + + if ((__flags & ios_base::adjustfield) == ios_base::left) + { + __s = std::__write(__s, __name, __len); + __s = std::__write(__s, __ps, __plen); + } + else + { + __s = std::__write(__s, __ps, __plen); + __s = std::__write(__s, __name, __len); + } + return __s; + } + __io.width(0); + __s = std::__write(__s, __name, __len); + } + return __s; + } +*/ + +#endif // _GLIBCXX_TR2_BOOL_SET_TCC |