Iros
Loading...
Searching...
No Matches
ssize.h
Go to the documentation of this file.
1
#pragma once
2
3
#include "
di/container/interface/size.h
"
4
#include "
di/container/meta/container_iterator.h
"
5
#include "
di/container/meta/container_size_type.h
"
6
#include "
di/container/meta/iterator_ssize_type.h
"
7
#include "
di/function/tag_invoke.h
"
8
#include "
di/meta/language.h
"
9
10
namespace
di::container
{
11
struct
SSizeFunction
;
12
13
namespace
detail
{
14
template
<
typename
T>
15
concept
CustomSSize
=
16
concepts::TagInvocableTo<SSizeFunction, meta::IteratorSSizeType<meta::ContainerIterator<T>
>, T>;
17
18
template
<
typename
T>
19
concept
SizeSSize
=
requires
{
typename
meta::ContainerSizeType<T>
; };
20
}
21
22
struct
SSizeFunction
:
function::pipeline::EnablePipeline
{
23
template
<
typename
T>
24
requires
(
detail::CustomSSize<T>
||
detail::SizeSSize<T>
)
25
constexpr
auto
operator
()(T&&
container
)
const
->
meta::MakeSigned
<
meta::ContainerSizeType<T>
> {
26
if
constexpr
(
detail::CustomSize<T>
) {
27
return
function::tag_invoke
(*
this
, util::forward<T>(
container
));
28
}
else
{
29
return
static_cast<
meta::MakeSigned<meta::ContainerSizeType<T>
>
>(
size
(util::forward<T>(
container
)));
30
}
31
}
32
};
33
34
constexpr
inline
auto
ssize
=
SSizeFunction
{};
35
}
36
37
namespace
di
{
38
using
container::ssize
;
39
}
di::concepts::TagInvocableTo
Definition
tag_invoke.h:45
di::container::detail::CustomSSize
Definition
ssize.h:15
di::container::detail::CustomSize
Definition
size.h:24
di::container::detail::SizeSSize
Definition
ssize.h:19
container_iterator.h
container_size_type.h
language.h
iterator_ssize_type.h
di::container::detail
Definition
sequence.h:13
di::container
Definition
sequence.h:12
di::container::ssize
constexpr auto ssize
Definition
ssize.h:34
di::container::size
constexpr auto size
Definition
size.h:54
di::function::tag_invoke_ns::tag_invoke
constexpr tag_invoke_detail::TagInvokeFn tag_invoke
Definition
tag_invoke.h:22
di::meta::ContainerSizeType
decltype(container::size(util::declval< T >())) ContainerSizeType
Definition
container_size_type.h:8
di::meta::MakeSigned
detail::MakeSignedHelper< RemoveCV< T > >::Type MakeSigned
Definition
language.h:316
di
Definition
zstring_parser.h:9
size.h
di::container::SSizeFunction
Definition
ssize.h:22
di::function::pipeline::EnablePipeline
Definition
pipeable.h:8
tag_invoke.h
libs
di
include
di
container
interface
ssize.h
Generated by
1.13.0