__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
// Streams based on std::span -*- C++ -*-
// Copyright The GNU Toolchain Authors.
//
// 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 spanstream
* This is a Standard C++ Library header.
*/
#ifndef _GLIBCXX_SPANSTREAM
#define _GLIBCXX_SPANSTREAM 1
#pragma GCC system_header
#include <bits/requires_hosted.h> // iostreams
#define __glibcxx_want_spanstream
#include <bits/version.h>
#ifdef __cpp_lib_spanstream // C++ >= 23 && hosted && lib_span
#include <span>
#include <streambuf>
#include <istream>
#include <ostream>
#include <bits/ranges_base.h>
namespace std _GLIBCXX_VISIBILITY(default)
{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _CharT, typename _Traits>
class basic_spanbuf
: public basic_streambuf<_CharT, _Traits>
{
using __streambuf_type = basic_streambuf<_CharT, _Traits>;
public:
using char_type = _CharT;
using int_type = typename _Traits::int_type;
using pos_type = typename _Traits::pos_type;
using off_type = typename _Traits::off_type;
using traits_type = _Traits;
// [spanbuf.ctor], constructors
basic_spanbuf() : basic_spanbuf(ios_base::in | ios_base::out)
{ }
explicit
basic_spanbuf(ios_base::openmode __which)
: __streambuf_type(), _M_mode(__which)
{ }
explicit
basic_spanbuf(std::span<_CharT> __s,
ios_base::openmode __which = ios_base::in | ios_base::out)
: __streambuf_type(), _M_mode(__which)
{ span(__s); }
basic_spanbuf(const basic_spanbuf&) = delete;
/** Move constructor.
*
* Transfers the buffer and pointers into the get and put areas from
* `__rhs` to `*this`.
*
* In this implementation `rhs` is left unchanged,
* but that is not guaranteed by the standard.
*/
basic_spanbuf(basic_spanbuf&& __rhs)
: __streambuf_type(__rhs), _M_mode(__rhs._M_mode), _M_buf(__rhs._M_buf)
{ }
// [spanbuf.assign], assignment and swap
basic_spanbuf& operator=(const basic_spanbuf&) = delete;
basic_spanbuf&
operator=(basic_spanbuf&& __rhs)
{
basic_spanbuf(std::move(__rhs)).swap(*this);
return *this;
}
void
swap(basic_spanbuf& __rhs)
{
__streambuf_type::swap(__rhs);
std::swap(_M_mode, __rhs._M_mode);
std::swap(_M_buf, __rhs._M_buf);
}
// [spanbuf.members], member functions
std::span<_CharT>
span() const noexcept
{
if (_M_mode & ios_base::out)
return {this->pbase(), this->pptr()};
else
return _M_buf;
}
void
span(std::span<_CharT> __s) noexcept
{
_M_buf = __s;
if (_M_mode & ios_base::out)
{
this->setp(__s.data(), __s.data() + __s.size());
if (_M_mode & ios_base::ate)
this->pbump(__s.size());
}
if (_M_mode & ios_base::in)
this->setg(__s.data(), __s.data(), __s.data() + __s.size());
}
protected:
// [spanbuf.virtuals], overridden virtual functions
basic_streambuf<_CharT, _Traits>*
setbuf(_CharT* __s, streamsize __n) override
{
__glibcxx_assert(__n >= 0);
this->span(std::span<_CharT>(__s, __n));
return this;
}
pos_type
seekoff(off_type __off, ios_base::seekdir __way,
ios_base::openmode __which = ios_base::in | ios_base::out) override
{
pos_type __ret = pos_type(off_type(-1));
if (__way == ios_base::beg)
{
if (0 <= __off && __off <= _M_buf.size())
{
if (__which & ios_base::in)
this->setg(this->eback(), this->eback() + __off, this->egptr());
if (__which & ios_base::out)
{
this->setp(this->pbase(), this->epptr());
this->pbump(__off);
}
__ret = pos_type(__off);
}
}
else
{
off_type __base;
__which &= (ios_base::in|ios_base::out);
if (__which == ios_base::out)
__base = this->pptr() - this->pbase();
else if (__way == ios_base::cur)
{
if (__which == ios_base::in)
__base = this->gptr() - this->eback();
else
return __ret;
}
else if (__way == ios_base::end)
__base = _M_buf.size();
if (__builtin_add_overflow(__base, __off, &__off))
return __ret;
if (__off < 0 || __off > _M_buf.size())
return __ret;
if (__which & ios_base::in)
this->setg(this->eback(), this->eback() + __off, this->egptr());
if (__which & ios_base::out)
{
this->setp(this->pbase(), this->epptr());
this->pbump(__off);
}
__ret = pos_type(__off);
}
return __ret;
}
pos_type
seekpos(pos_type __sp,
ios_base::openmode __which = ios_base::in | ios_base::out) override
{ return seekoff(off_type(__sp), ios_base::beg, __which); }
private:
ios_base::openmode _M_mode;
std::span<_CharT> _M_buf;
};
template<typename _CharT, typename _Traits>
inline void
swap(basic_spanbuf<_CharT, _Traits>& __x,
basic_spanbuf<_CharT, _Traits>& __y)
{ __x.swap(__y); }
using spanbuf = basic_spanbuf<char>;
using wspanbuf = basic_spanbuf<wchar_t>;
template<typename _CharT, typename _Traits>
class basic_ispanstream
: public basic_istream<_CharT, _Traits>
{
using __istream_type = basic_istream<_CharT, _Traits>;
public:
using char_type = _CharT;
using int_type = typename _Traits::int_type;
using pos_type = typename _Traits::pos_type;
using off_type = typename _Traits::off_type;
using traits_type = _Traits;
// [ispanstream.ctor], constructors
explicit
basic_ispanstream(std::span<_CharT> __s,
ios_base::openmode __which = ios_base::in)
: __istream_type(std::__addressof(_M_sb)),
_M_sb(__s, __which | ios_base::in)
{ }
basic_ispanstream(const basic_ispanstream&) = delete;
basic_ispanstream(basic_ispanstream&& __rhs)
: __istream_type(std::move(__rhs)), _M_sb(std::move(__rhs._M_sb))
{
__istream_type::set_rdbuf(std::addressof(_M_sb));
}
template<typename _Ros>
requires ranges::borrowed_range<_Ros>
&& (!convertible_to<_Ros, std::span<_CharT>>)
&& convertible_to<_Ros, std::span<const _CharT>>
explicit
basic_ispanstream(_Ros&& __s)
: __istream_type(std::__addressof(_M_sb)),
_M_sb(ios_base::in)
{
std::span<const _CharT> __sp(std::forward<_Ros>(__s));
_M_sb.span({const_cast<_CharT*>(__sp.data()), __sp.size()});
}
// [ispanstream.assign], assignment and swap
basic_ispanstream& operator=(const basic_ispanstream&) = delete;
basic_ispanstream& operator=(basic_ispanstream&& __rhs) = default;
void
swap(basic_ispanstream& __rhs)
{
__istream_type::swap(__rhs);
_M_sb.swap(__rhs._M_sb);
}
// [ispanstream.members], member functions
basic_spanbuf<_CharT, _Traits>*
rdbuf() const noexcept
{
return const_cast<basic_spanbuf<_CharT, _Traits>*>(std::__addressof(_M_sb));
}
std::span<const _CharT>
span() const noexcept
{ return _M_sb.span(); }
void
span(std::span<_CharT> __s) noexcept
{ return _M_sb.span(__s); }
template<typename _Ros>
requires ranges::borrowed_range<_Ros>
&& (!convertible_to<_Ros, std::span<_CharT>>)
&& convertible_to<_Ros, std::span<const _CharT>>
void
span(_Ros&& __s) noexcept
{
std::span<const _CharT> __sp(std::forward<_Ros>(__s));
_M_sb.span({const_cast<_CharT*>(__sp.data()), __sp.size()});
}
private:
basic_spanbuf<_CharT, _Traits> _M_sb;
};
template<typename _CharT, typename _Traits>
inline void
swap(basic_ispanstream<_CharT, _Traits>& __x,
basic_ispanstream<_CharT, _Traits>& __y)
{ __x.swap(__y); }
using ispanstream = basic_ispanstream<char>;
using wispanstream = basic_ispanstream<wchar_t>;
template<typename _CharT, typename _Traits>
class basic_ospanstream
: public basic_ostream<_CharT, _Traits>
{
using __ostream_type = basic_ostream<_CharT, _Traits>;
public:
using char_type = _CharT;
using int_type = typename _Traits::int_type;
using pos_type = typename _Traits::pos_type;
using off_type = typename _Traits::off_type;
using traits_type = _Traits;
// [ospanstream.ctor], constructors
explicit
basic_ospanstream(std::span<_CharT> __s,
ios_base::openmode __which = ios_base::out)
: __ostream_type(std::__addressof(_M_sb)),
_M_sb(__s, __which | ios_base::in)
{ }
basic_ospanstream(const basic_ospanstream&) = delete;
basic_ospanstream(basic_ospanstream&& __rhs)
: __ostream_type(std::move(__rhs)), _M_sb(std::move(__rhs._M_sb))
{
__ostream_type::set_rdbuf(std::addressof(_M_sb));
}
// [ospanstream.assign], assignment and swap
basic_ospanstream& operator=(const basic_ospanstream&) = delete;
basic_ospanstream& operator=(basic_ospanstream&& __rhs) = default;
void
swap(basic_ospanstream& __rhs)
{
__ostream_type::swap(__rhs);
_M_sb.swap(__rhs._M_sb);
}
// [ospanstream.members], member functions
basic_spanbuf<_CharT, _Traits>*
rdbuf() const noexcept
{
return const_cast<basic_spanbuf<_CharT, _Traits>*>(std::__addressof(_M_sb));
}
std::span<_CharT>
span() const noexcept
{ return _M_sb.span(); }
void
span(std::span<_CharT> __s) noexcept
{ return _M_sb.span(__s); }
private:
basic_spanbuf<_CharT, _Traits> _M_sb;
};
template<typename _CharT, typename _Traits>
inline void
swap(basic_ospanstream<_CharT, _Traits>& __x,
basic_ospanstream<_CharT, _Traits>& __y)
{ __x.swap(__y); }
using ospanstream = basic_ospanstream<char>;
using wospanstream = basic_ospanstream<wchar_t>;
template<typename _CharT, typename _Traits>
class basic_spanstream
: public basic_iostream<_CharT, _Traits>
{
using __iostream_type = basic_iostream<_CharT, _Traits>;
public:
using char_type = _CharT;
using int_type = typename _Traits::int_type;
using pos_type = typename _Traits::pos_type;
using off_type = typename _Traits::off_type;
using traits_type = _Traits;
// [spanstream.ctor], constructors
explicit
basic_spanstream(std::span<_CharT> __s,
ios_base::openmode __which = ios_base::out | ios_base::in)
: __iostream_type(std::__addressof(_M_sb)),
_M_sb(__s, __which)
{ }
basic_spanstream(const basic_spanstream&) = delete;
basic_spanstream(basic_spanstream&& __rhs)
: __iostream_type(std::move(__rhs)), _M_sb(std::move(__rhs._M_sb))
{
__iostream_type::set_rdbuf(std::addressof(_M_sb));
}
// [spanstream.assign], assignment and swap
basic_spanstream& operator=(const basic_spanstream&) = delete;
basic_spanstream& operator=(basic_spanstream&& __rhs) = default;
void
swap(basic_spanstream& __rhs)
{
__iostream_type::swap(__rhs);
_M_sb.swap(__rhs._M_sb);
}
// [spanstream.members], members
basic_spanbuf<_CharT, _Traits>*
rdbuf() const noexcept
{
return const_cast<basic_spanbuf<_CharT, _Traits>*>(std::__addressof(_M_sb));
}
std::span<_CharT>
span() const noexcept
{ return _M_sb.span(); }
void
span(std::span<_CharT> __s) noexcept
{ return _M_sb.span(__s); }
private:
basic_spanbuf<_CharT, _Traits> _M_sb;
};
template<typename _CharT, typename _Traits>
inline void
swap(basic_spanstream<_CharT, _Traits>& __x,
basic_spanstream<_CharT, _Traits>& __y)
{ __x.swap(__y); }
using spanstream = basic_spanstream<char>;
using wspanstream = basic_spanstream<wchar_t>;
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif // __cpp_lib_spanstream
#endif // _GLIBCXX_SPANSTREAM
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| backward | Folder | 0755 |
|
|
| bits | Folder | 0755 |
|
|
| debug | Folder | 0755 |
|
|
| decimal | Folder | 0755 |
|
|
| experimental | Folder | 0755 |
|
|
| ext | Folder | 0755 |
|
|
| parallel | Folder | 0755 |
|
|
| pstl | Folder | 0755 |
|
|
| tr1 | Folder | 0755 |
|
|
| tr2 | Folder | 0755 |
|
|
| algorithm | File | 3.31 KB | 0644 |
|
| any | File | 18.71 KB | 0644 |
|
| array | File | 15.4 KB | 0644 |
|
| atomic | File | 51.16 KB | 0644 |
|
| barrier | File | 7.87 KB | 0644 |
|
| bit | File | 14 KB | 0644 |
|
| bitset | File | 49.19 KB | 0644 |
|
| cassert | File | 1.61 KB | 0644 |
|
| ccomplex | File | 1.3 KB | 0644 |
|
| cctype | File | 2.34 KB | 0644 |
|
| cerrno | File | 1.73 KB | 0644 |
|
| cfenv | File | 2 KB | 0644 |
|
| cfloat | File | 1.84 KB | 0644 |
|
| charconv | File | 29.13 KB | 0644 |
|
| chrono | File | 94.45 KB | 0644 |
|
| cinttypes | File | 2.09 KB | 0644 |
|
| ciso646 | File | 1.43 KB | 0644 |
|
| climits | File | 1.87 KB | 0644 |
|
| clocale | File | 1.86 KB | 0644 |
|
| cmath | File | 94.84 KB | 0644 |
|
| codecvt | File | 5.15 KB | 0644 |
|
| compare | File | 37.25 KB | 0644 |
|
| complex | File | 74.84 KB | 0644 |
|
| complex.h | File | 1.56 KB | 0644 |
|
| concepts | File | 12.72 KB | 0644 |
|
| condition_variable | File | 12.59 KB | 0644 |
|
| coroutine | File | 9.39 KB | 0644 |
|
| csetjmp | File | 1.9 KB | 0644 |
|
| csignal | File | 1.81 KB | 0644 |
|
| cstdalign | File | 1.37 KB | 0644 |
|
| cstdarg | File | 1.82 KB | 0644 |
|
| cstdbool | File | 1.37 KB | 0644 |
|
| cstddef | File | 6.54 KB | 0644 |
|
| cstdint | File | 3.75 KB | 0644 |
|
| cstdio | File | 4.33 KB | 0644 |
|
| cstdlib | File | 6.76 KB | 0644 |
|
| cstring | File | 3.17 KB | 0644 |
|
| ctgmath | File | 1.33 KB | 0644 |
|
| ctime | File | 2.24 KB | 0644 |
|
| cuchar | File | 2.84 KB | 0644 |
|
| cwchar | File | 6.39 KB | 0644 |
|
| cwctype | File | 2.73 KB | 0644 |
|
| cxxabi.h | File | 21.77 KB | 0644 |
|
| deque | File | 4.56 KB | 0644 |
|
| exception | File | 5.31 KB | 0644 |
|
| execution | File | 1.87 KB | 0644 |
|
| expected | File | 49.81 KB | 0644 |
|
| fenv.h | File | 1.96 KB | 0644 |
|
| filesystem | File | 1.72 KB | 0644 |
|
| format | File | 128.31 KB | 0644 |
|
| forward_list | File | 2.91 KB | 0644 |
|
| fstream | File | 41.58 KB | 0644 |
|
| functional | File | 47.31 KB | 0644 |
|
| future | File | 52.04 KB | 0644 |
|
| generator | File | 22.16 KB | 0644 |
|
| initializer_list | File | 2.93 KB | 0644 |
|
| iomanip | File | 16.4 KB | 0644 |
|
| ios | File | 1.67 KB | 0644 |
|
| iosfwd | File | 8.21 KB | 0644 |
|
| iostream | File | 3.02 KB | 0644 |
|
| istream | File | 35.62 KB | 0644 |
|
| iterator | File | 3.02 KB | 0644 |
|
| latch | File | 2.7 KB | 0644 |
|
| limits | File | 82.01 KB | 0644 |
|
| list | File | 3.86 KB | 0644 |
|
| locale | File | 1.5 KB | 0644 |
|
| map | File | 4.37 KB | 0644 |
|
| math.h | File | 4.47 KB | 0644 |
|
| memory | File | 5.26 KB | 0644 |
|
| memory_resource | File | 14.15 KB | 0644 |
|
| mutex | File | 26.99 KB | 0644 |
|
| new | File | 8.48 KB | 0644 |
|
| numbers | File | 6.93 KB | 0644 |
|
| numeric | File | 25.5 KB | 0644 |
|
| optional | File | 44.03 KB | 0644 |
|
| ostream | File | 30.54 KB | 0644 |
|
| File | 4.73 KB | 0644 |
|
|
| queue | File | 2.54 KB | 0644 |
|
| random | File | 1.63 KB | 0644 |
|
| ranges | File | 271.85 KB | 0644 |
|
| ratio | File | 22.26 KB | 0644 |
|
| regex | File | 3.16 KB | 0644 |
|
| scoped_allocator | File | 17.41 KB | 0644 |
|
| semaphore | File | 3.04 KB | 0644 |
|
| set | File | 4.16 KB | 0644 |
|
| shared_mutex | File | 24.6 KB | 0644 |
|
| source_location | File | 2.7 KB | 0644 |
|
| span | File | 14.12 KB | 0644 |
|
| spanstream | File | 12.2 KB | 0644 |
|
| sstream | File | 38.83 KB | 0644 |
|
| stack | File | 2.46 KB | 0644 |
|
| stacktrace | File | 21.21 KB | 0644 |
|
| stdatomic.h | File | 4.02 KB | 0644 |
|
| stdexcept | File | 9.65 KB | 0644 |
|
| stdfloat | File | 1.72 KB | 0644 |
|
| stdlib.h | File | 2.25 KB | 0644 |
|
| stop_token | File | 15.72 KB | 0644 |
|
| streambuf | File | 29.24 KB | 0644 |
|
| string | File | 4.23 KB | 0644 |
|
| string_view | File | 27.52 KB | 0644 |
|
| syncstream | File | 8.18 KB | 0644 |
|
| system_error | File | 17.96 KB | 0644 |
|
| text_encoding | File | 16.26 KB | 0644 |
|
| tgmath.h | File | 1.33 KB | 0644 |
|
| thread | File | 9.77 KB | 0644 |
|
| tuple | File | 99.71 KB | 0644 |
|
| type_traits | File | 118.17 KB | 0644 |
|
| typeindex | File | 3.43 KB | 0644 |
|
| typeinfo | File | 8.1 KB | 0644 |
|
| unordered_map | File | 3.69 KB | 0644 |
|
| unordered_set | File | 3.48 KB | 0644 |
|
| utility | File | 7.38 KB | 0644 |
|
| valarray | File | 40.2 KB | 0644 |
|
| variant | File | 64.81 KB | 0644 |
|
| vector | File | 4.98 KB | 0644 |
|
| version | File | 1.42 KB | 0644 |
|