PATH:
usr
/
include
/
c++
/
11
/
bits
// Helpers for quoted stream manipulators -*- C++ -*- // Copyright (C) 2013-2021 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 bits/quoted_string.h * This is an internal header file, included by other library headers. * Do not attempt to use it directly. @headername{iomanip} */ #ifndef _GLIBCXX_QUOTED_STRING_H #define _GLIBCXX_QUOTED_STRING_H 1 #pragma GCC system_header #if __cplusplus < 201103L # include <bits/c++0x_warning.h> #else #include <sstream> namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION namespace __detail { /** * @brief Struct for delimited strings. */ template<typename _String, typename _CharT> struct _Quoted_string { static_assert(is_reference<_String>::value || is_pointer<_String>::value, "String type must be pointer or reference"); _Quoted_string(_String __str, _CharT __del, _CharT __esc) : _M_string(__str), _M_delim{__del}, _M_escape{__esc} { } _Quoted_string& operator=(_Quoted_string&) = delete; _String _M_string; _CharT _M_delim; _CharT _M_escape; }; #if __cplusplus >= 201703L template<typename _CharT, typename _Traits> struct _Quoted_string<basic_string_view<_CharT, _Traits>, _CharT> { _Quoted_string(basic_string_view<_CharT, _Traits> __str, _CharT __del, _CharT __esc) : _M_string(__str), _M_delim{__del}, _M_escape{__esc} { } _Quoted_string& operator=(_Quoted_string&) = delete; basic_string_view<_CharT, _Traits> _M_string; _CharT _M_delim; _CharT _M_escape; }; #endif // C++17 /** * @brief Inserter for quoted strings. * * _GLIBCXX_RESOLVE_LIB_DEFECTS * DR 2344 quoted()'s interaction with padding is unclear */ template<typename _CharT, typename _Traits> std::basic_ostream<_CharT, _Traits>& operator<<(std::basic_ostream<_CharT, _Traits>& __os, const _Quoted_string<const _CharT*, _CharT>& __str) { std::basic_ostringstream<_CharT, _Traits> __ostr; __ostr << __str._M_delim; for (const _CharT* __c = __str._M_string; *__c; ++__c) { if (*__c == __str._M_delim || *__c == __str._M_escape) __ostr << __str._M_escape; __ostr << *__c; } __ostr << __str._M_delim; return __os << __ostr.str(); } /** * @brief Inserter for quoted strings. * * _GLIBCXX_RESOLVE_LIB_DEFECTS * DR 2344 quoted()'s interaction with padding is unclear */ template<typename _CharT, typename _Traits, typename _String> std::basic_ostream<_CharT, _Traits>& operator<<(std::basic_ostream<_CharT, _Traits>& __os, const _Quoted_string<_String, _CharT>& __str) { std::basic_ostringstream<_CharT, _Traits> __ostr; __ostr << __str._M_delim; for (auto __c : __str._M_string) { if (__c == __str._M_delim || __c == __str._M_escape) __ostr << __str._M_escape; __ostr << __c; } __ostr << __str._M_delim; return __os << __ostr.str(); } /** * @brief Extractor for delimited strings. * The left and right delimiters can be different. */ template<typename _CharT, typename _Traits, typename _Alloc> std::basic_istream<_CharT, _Traits>& operator>>(std::basic_istream<_CharT, _Traits>& __is, const _Quoted_string<basic_string<_CharT, _Traits, _Alloc>&, _CharT>& __str) { _CharT __c; __is >> __c; if (!__is.good()) return __is; if (__c != __str._M_delim) { __is.unget(); __is >> __str._M_string; return __is; } __str._M_string.clear(); std::ios_base::fmtflags __flags = __is.flags(__is.flags() & ~std::ios_base::skipws); do { __is >> __c; if (!__is.good()) break; if (__c == __str._M_escape) { __is >> __c; if (!__is.good()) break; } else if (__c == __str._M_delim) break; __str._M_string += __c; } while (true); __is.setf(__flags); return __is; } } // namespace __detail _GLIBCXX_END_NAMESPACE_VERSION } // namespace std #endif // C++11 #endif /* _GLIBCXX_QUOTED_STRING_H */
[+]
..
[-] cxxabi_forced.h
[open]
[-] valarray_array.tcc
[open]
[-] regex.h
[open]
[-] stl_heap.h
[open]
[-] parse_numbers.h
[open]
[-] align.h
[open]
[-] random.h
[open]
[-] locale_facets.h
[open]
[-] streambuf_iterator.h
[open]
[-] stl_iterator_base_funcs.h
[open]
[-] predefined_ops.h
[open]
[-] list.tcc
[open]
[-] valarray_after.h
[open]
[-] stl_relops.h
[open]
[-] regex.tcc
[open]
[-] locale_facets_nonio.h
[open]
[-] valarray_before.h
[open]
[-] std_mutex.h
[open]
[-] allocator.h
[open]
[-] nested_exception.h
[open]
[-] atomic_lockfree_defines.h
[open]
[-] fs_ops.h
[open]
[-] forward_list.tcc
[open]
[-] exception_defines.h
[open]
[-] cxxabi_init_exception.h
[open]
[-] char_traits.h
[open]
[-] stream_iterator.h
[open]
[-] concept_check.h
[open]
[-] stl_multimap.h
[open]
[-] atomic_timed_wait.h
[open]
[-] charconv.h
[open]
[-] locale_conv.h
[open]
[-] postypes.h
[open]
[-] atomic_wait.h
[open]
[-] shared_ptr_atomic.h
[open]
[-] stl_raw_storage_iter.h
[open]
[-] ostream.tcc
[open]
[-] fs_path.h
[open]
[-] refwrap.h
[open]
[-] allocated_ptr.h
[open]
[-] regex_scanner.h
[open]
[-] std_abs.h
[open]
[-] gslice.h
[open]
[-] regex_executor.tcc
[open]
[-] alloc_traits.h
[open]
[-] regex_compiler.h
[open]
[-] stl_uninitialized.h
[open]
[-] basic_string.tcc
[open]
[-] codecvt.h
[open]
[-] ranges_util.h
[open]
[-] hash_bytes.h
[open]
[-] stl_stack.h
[open]
[-] exception_ptr.h
[open]
[-] gslice_array.h
[open]
[-] uniform_int_dist.h
[open]
[-] hashtable_policy.h
[open]
[-] invoke.h
[open]
[-] specfun.h
[open]
[-] basic_ios.tcc
[open]
[-] enable_special_members.h
[open]
[-] std_thread.h
[open]
[-] stl_deque.h
[open]
[-] fs_dir.h
[open]
[-] forward_list.h
[open]
[-] indirect_array.h
[open]
[-] stl_tree.h
[open]
[-] stl_algo.h
[open]
[-] hashtable.h
[open]
[-] uses_allocator.h
[open]
[-] uses_allocator_args.h
[open]
[-] mask_array.h
[open]
[-] stl_list.h
[open]
[-] fstream.tcc
[open]
[-] ranges_base.h
[open]
[-] basic_ios.h
[open]
[-] iterator_concepts.h
[open]
[-] shared_ptr_base.h
[open]
[-] stl_iterator.h
[open]
[-] atomic_futex.h
[open]
[-] locale_facets.tcc
[open]
[-] regex_error.h
[open]
[-] ios_base.h
[open]
[-] regex_executor.h
[open]
[-] istream.tcc
[open]
[-] regex_automaton.h
[open]
[-] locale_classes.tcc
[open]
[-] node_handle.h
[open]
[-] locale_classes.h
[open]
[-] streambuf.tcc
[open]
[-] vector.tcc
[open]
[-] functional_hash.h
[open]
[-] stl_pair.h
[open]
[-] localefwd.h
[open]
[-] ranges_uninitialized.h
[open]
[-] stringfwd.h
[open]
[-] regex_compiler.tcc
[open]
[-] algorithmfwd.h
[open]
[-] ranges_algo.h
[open]
[-] regex_automaton.tcc
[open]
[-] deque.tcc
[open]
[-] ptr_traits.h
[open]
[-] sstream.tcc
[open]
[-] regex_constants.h
[open]
[-] stl_set.h
[open]
[-] stl_queue.h
[open]
[-] unordered_map.h
[open]
[-] fs_fwd.h
[open]
[-] string_view.tcc
[open]
[-] erase_if.h
[open]
[-] functexcept.h
[open]
[-] unique_lock.h
[open]
[-] stl_algobase.h
[open]
[-] c++0x_warning.h
[open]
[-] move.h
[open]
[-] memoryfwd.h
[open]
[-] stl_iterator_base_types.h
[open]
[-] unique_ptr.h
[open]
[-] stl_function.h
[open]
[-] atomic_base.h
[open]
[-] ostream_insert.h
[open]
[-] boost_concept_check.h
[open]
[-] locale_facets_nonio.tcc
[open]
[-] max_size_type.h
[open]
[-] cpp_type_traits.h
[open]
[-] stl_map.h
[open]
[-] stl_numeric.h
[open]
[-] semaphore_base.h
[open]
[-] unordered_set.h
[open]
[-] ranges_cmp.h
[open]
[-] slice_array.h
[open]
[-] stl_tempbuf.h
[open]
[-] stl_construct.h
[open]
[-] basic_string.h
[open]
[-] regex_scanner.tcc
[open]
[-] random.tcc
[open]
[-] this_thread_sleep.h
[open]
[-] std_function.h
[open]
[-] ranges_algobase.h
[open]
[-] stl_vector.h
[open]
[-] range_access.h
[open]
[-] quoted_string.h
[open]
[-] stl_bvector.h
[open]
[-] shared_ptr.h
[open]
[-] exception.h
[open]
[-] valarray_array.h
[open]
[-] stl_multiset.h
[open]