1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 21:27:34 +00:00

AK: Introduce Indexable concept

This was dearly missing and can be used in many existing templates.
This commit is contained in:
kleines Filmröllchen 2022-04-21 10:41:27 +02:00 committed by Linus Groh
parent af1c26f05b
commit bbb256e8b5

View file

@ -79,6 +79,16 @@ concept ArrayLike = requires(ArrayT array, SizeT index)
-> SameAs<RemoveReference<ContainedT>*>; -> SameAs<RemoveReference<ContainedT>*>;
}; };
// Any indexable data structure.
template<typename ArrayT, typename ContainedT, typename SizeT = size_t>
concept Indexable = requires(ArrayT array, SizeT index)
{
{
array[index]
}
-> OneOf<RemoveReference<ContainedT>&, RemoveReference<ContainedT>>;
};
template<typename Func, typename... Args> template<typename Func, typename... Args>
concept VoidFunction = requires(Func func, Args... args) concept VoidFunction = requires(Func func, Args... args)
{ {
@ -130,6 +140,7 @@ using AK::Concepts::Enum;
using AK::Concepts::FallibleFunction; using AK::Concepts::FallibleFunction;
using AK::Concepts::FloatingPoint; using AK::Concepts::FloatingPoint;
using AK::Concepts::Fundamental; using AK::Concepts::Fundamental;
using AK::Concepts::Indexable;
using AK::Concepts::Integral; using AK::Concepts::Integral;
using AK::Concepts::IterableContainer; using AK::Concepts::IterableContainer;
using AK::Concepts::IteratorFunction; using AK::Concepts::IteratorFunction;