Helios Engine 0.1.0
A modular ECS based data-oriented C++23 game engine
 
Loading...
Searching...
No Matches
helios::utils Namespace Reference

Namespaces

namespace  details
 

Classes

class  ChainAdapter
 
class  ConcatAdapter
 
class  Defer
 
class  DynamicLibrary
 
class  EnumerateAdapter
 
class  FastPimpl
 Implements pimpl idiom without dynamic memory allocation. More...
 
class  FilterAdapter
 
class  FunctionalAdapterBase
 CRTP base class providing common adapter operations. More...
 
class  InspectAdapter
 
class  JoinAdapter
 
class  MapAdapter
 
class  ReverseAdapter
 
class  SkipAdapter
 
class  SkipWhileAdapter
 
class  SlideAdapter
 
class  SlideView
 
class  StepByAdapter
 
class  StrideAdapter
 
struct  StringEqual
 Transparent equality comparator for string types. More...
 
struct  StringHash
 Transparent hash functor for string types. More...
 
class  TakeAdapter
 
class  TakeWhileAdapter
 
class  ZipAdapter
 

Concepts

concept  ArithmeticTrait
 
concept  UniqueTypes
 
concept  IteratorLike
 Concept for types that can be used as base iterators in adapters.
 
concept  BidirectionalIteratorLike
 Concept for bidirectional iterators that support decrement operations.
 
concept  PredicateFor
 Concept for predicate functions that can be applied to iterator values.
 
concept  TransformFor
 Concept for transformation functions that can be applied to iterator values.
 
concept  InspectorFor
 Concept for inspection functions that observe but don't modify values.
 
concept  ActionFor
 Concept for action functions that process values.
 
concept  FolderFor
 Concept for folder functions that accumulate values.
 
concept  FilterAdapterRequirements
 Concept to validate FilterAdapter requirements.
 
concept  MapAdapterRequirements
 Concept to validate MapAdapter requirements.
 
concept  TakeAdapterRequirements
 Concept to validate TakeAdapter requirements.
 
concept  SkipAdapterRequirements
 Concept to validate SkipAdapter requirements.
 
concept  TakeWhileAdapterRequirements
 Concept to validate TakeWhileAdapter requirements.
 
concept  SkipWhileAdapterRequirements
 Concept to validate SkipWhileAdapter requirements.
 
concept  EnumerateAdapterRequirements
 Concept to validate EnumerateAdapter requirements.
 
concept  InspectAdapterRequirements
 Concept to validate InspectAdapter requirements.
 
concept  StepByAdapterRequirements
 Concept to validate StepByAdapter requirements.
 
concept  ChainAdapterRequirements
 Concept to validate ChainAdapter requirements.
 
concept  ReverseAdapterRequirements
 Concept to validate ReverseAdapter requirements.
 
concept  JoinAdapterRequirements
 Concept to validate JoinAdapter requirements.
 
concept  SlideAdapterRequirements
 Concept to validate SlideAdapter requirements.
 
concept  ConcatAdapterRequirements
 Concept to validate ConcatAdapter requirements.
 
concept  StrideAdapterRequirements
 Concept to validate StrideAdapter requirements.
 
concept  ZipAdapterRequirements
 Concept to validate ZipAdapter requirements.
 

Enumerations

enum class  DynamicLibraryError : uint8_t {
  FileNotFound , LoadFailed , SymbolNotFound , InvalidHandle ,
  AlreadyLoaded , NotLoaded , PlatformError
}
 Error codes for dynamic library operations. More...
 
enum class  FileError : uint8_t { kCouldNotOpen , kReadError }
 

Functions

constexpr std::string_view DynamicLibraryErrorToString (DynamicLibraryError error) noexcept
 Gets a human-readable description for a DynamicLibraryError.
 
auto FromPath (const std::filesystem::path &path) -> std::expected< DynamicLibrary, DynamicLibraryError >
 
constexpr std::string_view FileErrorToString (FileError error) noexcept
 Converts FileError to a human-readable string.
 
auto ReadFileToString (std::string_view filepath) -> std::expected< std::string, FileError >
 Reads the entire contents of a file into a string.
 
auto ReadFileToString (const std::filesystem::path &filepath) -> std::expected< std::string, FileError >
 Reads the entire contents of a file into a string.
 
constexpr std::string_view GetFileName (std::string_view path)
 Extracts the file name from a given path.
 
static constexpr std::string_view GetFileExtension (std::string_view path)
 Extracts the file extension from a given path.
 
template<std::ranges::range R, typename Pred >
requires FilterAdapterRequirements<std::ranges::iterator_t<R>, Pred>
constexpr auto FilterAdapterFromRange (R &range, Pred predicate) noexcept(noexcept(FilterAdapter< std::ranges::iterator_t< R >, Pred >(std::ranges::begin(range), std::ranges::end(range), std::move(predicate)))) -> FilterAdapter< std::ranges::iterator_t< R >, Pred >
 Helper function to create a FilterAdapter from a non-const range.
 
template<std::ranges::range R, typename Pred >
requires FilterAdapterRequirements<decltype(std::ranges::cbegin(std::declval<const R&>())), Pred>
constexpr auto FilterAdapterFromRange (const R &range, Pred predicate) noexcept(noexcept(FilterAdapter< decltype(std::ranges::cbegin(range)), Pred >(std::ranges::cbegin(range), std::ranges::cend(range), std::move(predicate)))) -> FilterAdapter< decltype(std::ranges::cbegin(range)), Pred >
 Helper function to create a FilterAdapter from a const range.
 
template<std::ranges::range R, typename Func >
requires MapAdapterRequirements<std::ranges::iterator_t<R>, Func>
constexpr auto MapAdapterFromRange (R &range, Func transform) noexcept(noexcept(MapAdapter< std::ranges::iterator_t< R >, Func >(std::ranges::begin(range), std::ranges::end(range), std::move(transform)))) -> MapAdapter< std::ranges::iterator_t< R >, Func >
 Helper function to create a MapAdapter from a range.
 
template<std::ranges::range R, typename Func >
requires MapAdapterRequirements<decltype(std::ranges::cbegin(std::declval<const R&>())), Func>
constexpr auto MapAdapterFromRange (const R &range, Func transform) noexcept(noexcept(MapAdapter< decltype(std::ranges::cbegin(range)), Func >(std::ranges::cbegin(range), std::ranges::cend(range), std::move(transform)))) -> MapAdapter< decltype(std::ranges::cbegin(range)), Func >
 Helper function to create a MapAdapter from a const range.
 
template<std::ranges::range R>
requires TakeAdapterRequirements<std::ranges::iterator_t<R>>
constexpr auto TakeAdapterFromRange (R &range, size_t count) noexcept(noexcept(TakeAdapter< std::ranges::iterator_t< R > >(std::ranges::begin(range), std::ranges::end(range), count))) -> TakeAdapter< std::ranges::iterator_t< R > >
 Helper function to create a TakeAdapter from a non-const range.
 
template<std::ranges::range R>
requires TakeAdapterRequirements<decltype(std::ranges::cbegin(std::declval<const R&>()))>
constexpr auto TakeAdapterFromRange (const R &range, size_t count) noexcept(noexcept(TakeAdapter< decltype(std::ranges::cbegin(range))>(std::ranges::cbegin(range), std::ranges::cend(range), count))) -> TakeAdapter< decltype(std::ranges::cbegin(range))>
 Helper function to create a TakeAdapter from a const range.
 
template<std::ranges::range R>
requires SkipAdapterRequirements<std::ranges::iterator_t<R>>
constexpr auto SkipAdapterFromRange (R &range, size_t count) noexcept(noexcept(SkipAdapter< std::ranges::iterator_t< R > >(std::ranges::begin(range), std::ranges::end(range), count))) -> SkipAdapter< std::ranges::iterator_t< R > >
 Helper function to create a SkipAdapter from a non-const range.
 
template<std::ranges::range R>
requires SkipAdapterRequirements<decltype(std::ranges::cbegin(std::declval<const R&>()))>
constexpr auto SkipAdapterFromRange (const R &range, size_t count) noexcept(noexcept(SkipAdapter< decltype(std::ranges::cbegin(range))>(std::ranges::cbegin(range), std::ranges::cend(range), count))) -> SkipAdapter< decltype(std::ranges::cbegin(range))>
 Helper function to create a SkipAdapter from a const range.
 
template<std::ranges::range R, typename Pred >
requires TakeWhileAdapterRequirements<std::ranges::iterator_t<R>, Pred>
constexpr auto TakeWhileAdapterFromRange (R &range, Pred predicate) noexcept(noexcept(TakeWhileAdapter< std::ranges::iterator_t< R >, Pred >(std::ranges::begin(range), std::ranges::end(range), std::move(predicate)))) -> TakeWhileAdapter< std::ranges::iterator_t< R >, Pred >
 Helper function to create a TakeWhileAdapter from a non-const range.
 
template<std::ranges::range R, typename Pred >
requires TakeWhileAdapterRequirements<decltype(std::ranges::cbegin(std::declval<const R&>())), Pred>
constexpr auto TakeWhileAdapterFromRange (const R &range, Pred predicate) noexcept(noexcept(TakeWhileAdapter< decltype(std::ranges::cbegin(range)), Pred >(std::ranges::cbegin(range), std::ranges::cend(range), std::move(predicate)))) -> TakeWhileAdapter< decltype(std::ranges::cbegin(range)), Pred >
 Helper function to create a TakeWhileAdapter from a const range.
 
template<std::ranges::range R, typename Pred >
requires SkipWhileAdapterRequirements<std::ranges::iterator_t<R>, Pred>
constexpr auto SkipWhileAdapterFromRange (R &range, Pred predicate) noexcept(noexcept(SkipWhileAdapter< std::ranges::iterator_t< R >, Pred >(std::ranges::begin(range), std::ranges::end(range), std::move(predicate)))) -> SkipWhileAdapter< std::ranges::iterator_t< R >, Pred >
 Helper function to create a SkipWhileAdapter from a non-const range.
 
template<std::ranges::range R, typename Pred >
requires SkipWhileAdapterRequirements<decltype(std::ranges::cbegin(std::declval<const R&>())), Pred>
constexpr auto SkipWhileAdapterFromRange (const R &range, Pred predicate) noexcept(noexcept(SkipWhileAdapter< decltype(std::ranges::cbegin(range)), Pred >(std::ranges::cbegin(range), std::ranges::cend(range), std::move(predicate)))) -> SkipWhileAdapter< decltype(std::ranges::cbegin(range)), Pred >
 Helper function to create a SkipWhileAdapter from a const range.
 
template<std::ranges::range R>
requires EnumerateAdapterRequirements<std::ranges::iterator_t<R>>
constexpr auto EnumerateAdapterFromRange (R &range) noexcept(noexcept(EnumerateAdapter< std::ranges::iterator_t< R > >(std::ranges::begin(range), std::ranges::end(range)))) -> EnumerateAdapter< std::ranges::iterator_t< R > >
 Helper function to create an EnumerateAdapter from a non-const range.
 
template<std::ranges::range R>
requires EnumerateAdapterRequirements<decltype(std::ranges::cbegin(std::declval<const R&>()))>
constexpr auto EnumerateAdapterFromRange (const R &range) noexcept(noexcept(EnumerateAdapter< decltype(std::ranges::cbegin(range))>(std::ranges::cbegin(range), std::ranges::cend(range)))) -> EnumerateAdapter< decltype(std::ranges::cbegin(range))>
 Helper function to create an EnumerateAdapter from a const range.
 
template<std::ranges::range R, typename Func >
requires InspectAdapterRequirements<std::ranges::iterator_t<R>, Func>
constexpr auto InspectAdapterFromRange (R &range, Func inspector) noexcept(noexcept(InspectAdapter< std::ranges::iterator_t< R >, Func >(std::ranges::begin(range), std::ranges::end(range), std::move(inspector)))) -> InspectAdapter< std::ranges::iterator_t< R >, Func >
 Helper function to create an InspectAdapter from a non-const range.
 
template<std::ranges::range R, typename Func >
requires InspectAdapterRequirements<decltype(std::ranges::cbegin(std::declval<const R&>())), Func>
constexpr auto InspectAdapterFromRange (const R &range, Func inspector) noexcept(noexcept(InspectAdapter< decltype(std::ranges::cbegin(range)), Func >(std::ranges::cbegin(range), std::ranges::cend(range), std::move(inspector)))) -> InspectAdapter< decltype(std::ranges::cbegin(range)), Func >
 Helper function to create an InspectAdapter from a const range.
 
template<std::ranges::range R>
requires StepByAdapterRequirements<std::ranges::iterator_t<R>>
constexpr auto StepByAdapterFromRange (R &range, size_t step) noexcept(noexcept(StepByAdapter< std::ranges::iterator_t< R > >(std::ranges::begin(range), std::ranges::end(range), step))) -> StepByAdapter< std::ranges::iterator_t< R > >
 Helper function to create a StepByAdapter from a non-const range.
 
template<std::ranges::range R>
requires StepByAdapterRequirements<decltype(std::ranges::cbegin(std::declval<const R&>()))>
constexpr auto StepByAdapterFromRange (const R &range, size_t step) noexcept(noexcept(StepByAdapter< decltype(std::ranges::cbegin(range))>(std::ranges::cbegin(range), std::ranges::cend(range), step))) -> StepByAdapter< decltype(std::ranges::cbegin(range))>
 Helper function to create a StepByAdapter from a const range.
 
template<std::ranges::range R1, std::ranges::range R2>
requires ChainAdapterRequirements<std::ranges::iterator_t<R1>, std::ranges::iterator_t<R2>>
constexpr auto ChainAdapterFromRange (R1 &range1, R2 &range2) noexcept(noexcept(ChainAdapter< std::ranges::iterator_t< R1 >, std::ranges::iterator_t< R2 > >(std::ranges::begin(range1), std::ranges::end(range1), std::ranges::begin(range2), std::ranges::end(range2)))) -> ChainAdapter< std::ranges::iterator_t< R1 >, std::ranges::iterator_t< R2 > >
 Helper function to create a ChainAdapter from two non-const ranges.
 
template<std::ranges::range R1, std::ranges::range R2>
requires ChainAdapterRequirements<std::ranges::iterator_t<R1>, decltype(std::ranges::cbegin(std::declval<const R2&>()))>
constexpr auto ChainAdapterFromRange (R1 &range1, const R2 &range2) noexcept(noexcept(ChainAdapter< std::ranges::iterator_t< R1 >, decltype(std::ranges::cbegin(range2))>(std::ranges::begin(range1), std::ranges::end(range1), std::ranges::cbegin(range2), std::ranges::cend(range2)))) -> ChainAdapter< std::ranges::iterator_t< R1 >, decltype(std::ranges::cbegin(range2))>
 Helper function to create a ChainAdapter from non-const and const ranges.
 
template<std::ranges::range R1, std::ranges::range R2>
requires ChainAdapterRequirements<decltype(std::ranges::cbegin(std::declval<const R1&>())), std::ranges::iterator_t<R2>>
constexpr auto ChainAdapterFromRange (const R1 &range1, R2 &range2) noexcept(noexcept(ChainAdapter< decltype(std::ranges::cbegin(range1)), std::ranges::iterator_t< R2 > >(std::ranges::cbegin(range1), std::ranges::cend(range1), std::ranges::begin(range2), std::ranges::end(range2)))) -> ChainAdapter< decltype(std::ranges::cbegin(range1)), std::ranges::iterator_t< R2 > >
 Helper function to create a ChainAdapter from const and non-const ranges.
 
template<std::ranges::range R1, std::ranges::range R2>
requires ChainAdapterRequirements<decltype(std::ranges::cbegin(std::declval<const R1&>())), decltype(std::ranges::cbegin(std::declval<const R2&>()))>
constexpr auto ChainAdapterFromRange (const R1 &range1, const R2 &range2) noexcept(noexcept(ChainAdapter< decltype(std::ranges::cbegin(range1)), decltype(std::ranges::cbegin(range2))>(std::ranges::cbegin(range1), std::ranges::cend(range1), std::ranges::cbegin(range2), std::ranges::cend(range2)))) -> ChainAdapter< decltype(std::ranges::cbegin(range1)), decltype(std::ranges::cbegin(range2))>
 Helper function to create a ChainAdapter from two const ranges.
 
template<std::ranges::range R>
requires ReverseAdapterRequirements<std::ranges::iterator_t<R>>
constexpr auto ReverseAdapterFromRange (R &range) noexcept(noexcept(ReverseAdapter< std::ranges::iterator_t< R > >(std::ranges::begin(range), std::ranges::end(range)))) -> ReverseAdapter< std::ranges::iterator_t< R > >
 Helper function to create a ReverseAdapter from a range.
 
template<std::ranges::range R>
requires ReverseAdapterRequirements<decltype(std::ranges::cbegin(std::declval<const R&>()))>
constexpr auto ReverseAdapterFromRange (const R &range) noexcept(noexcept(ReverseAdapter< decltype(std::ranges::cbegin(range))>(std::ranges::cbegin(range), std::ranges::cend(range)))) -> ReverseAdapter< decltype(std::ranges::cbegin(range))>
 Helper function to create a ReverseAdapter from a const range.
 
template<std::ranges::range R>
requires JoinAdapterRequirements<std::ranges::iterator_t<R>>
constexpr auto JoinAdapterFromRange (R &range) noexcept(noexcept(JoinAdapter< std::ranges::iterator_t< R > >(std::ranges::begin(range), std::ranges::end(range)))) -> JoinAdapter< std::ranges::iterator_t< R > >
 Helper function to create a JoinAdapter from a range.
 
template<std::ranges::range R>
requires JoinAdapterRequirements<decltype(std::ranges::cbegin(std::declval<const R&>()))>
constexpr auto JoinAdapterFromRange (const R &range) noexcept(noexcept(JoinAdapter< decltype(std::ranges::cbegin(range))>(std::ranges::cbegin(range), std::ranges::cend(range)))) -> JoinAdapter< decltype(std::ranges::cbegin(range))>
 Helper function to create a JoinAdapter from a const range.
 
template<std::ranges::range R>
requires SlideAdapterRequirements<std::ranges::iterator_t<R>>
constexpr auto SlideAdapterFromRange (R &range, size_t window_size) noexcept(noexcept(SlideAdapter< std::ranges::iterator_t< R > >(std::ranges::begin(range), std::ranges::end(range), window_size))) -> SlideAdapter< std::ranges::iterator_t< R > >
 Helper function to create a SlideAdapter from a range.
 
template<std::ranges::range R>
requires SlideAdapterRequirements<decltype(std::ranges::cbegin(std::declval<const R&>()))>
constexpr auto SlideAdapterFromRange (const R &range, size_t window_size) noexcept(noexcept(SlideAdapter< decltype(std::ranges::cbegin(range))>(std::ranges::cbegin(range), std::ranges::cend(range), window_size))) -> SlideAdapter< decltype(std::ranges::cbegin(range))>
 Helper function to create a SlideAdapter from a const range.
 
template<std::ranges::range R>
requires StrideAdapterRequirements<std::ranges::iterator_t<R>>
constexpr auto StrideAdapterFromRange (R &range, size_t stride) noexcept(noexcept(StrideAdapter< std::ranges::iterator_t< R > >(std::ranges::begin(range), std::ranges::end(range), stride))) -> StrideAdapter< std::ranges::iterator_t< R > >
 Helper function to create a StrideAdapter from a range.
 
template<std::ranges::range R>
requires StrideAdapterRequirements<decltype(std::ranges::cbegin(std::declval<const R&>()))>
constexpr auto StrideAdapterFromRange (const R &range, size_t stride) noexcept(noexcept(StrideAdapter< decltype(std::ranges::cbegin(range))>(std::ranges::cbegin(range), std::ranges::cend(range), stride))) -> StrideAdapter< decltype(std::ranges::cbegin(range))>
 Helper function to create a StrideAdapter from a const range.
 
template<std::ranges::range R1, std::ranges::range R2>
requires ZipAdapterRequirements<std::ranges::iterator_t<R1>, std::ranges::iterator_t<R2>>
constexpr auto ZipAdapterFromRange (R1 &range1, R2 &range2) noexcept(noexcept(ZipAdapter< std::ranges::iterator_t< R1 >, std::ranges::iterator_t< R2 > >(std::ranges::begin(range1), std::ranges::end(range1), std::ranges::begin(range2), std::ranges::end(range2)))) -> ZipAdapter< std::ranges::iterator_t< R1 >, std::ranges::iterator_t< R2 > >
 Helper function to create a ZipAdapter from two ranges.
 
template<std::ranges::range R1, std::ranges::range R2>
requires ZipAdapterRequirements<std::ranges::iterator_t<R1>, decltype(std::ranges::cbegin(std::declval<const R2&>()))>
constexpr auto ZipAdapterFromRange (R1 &range1, const R2 &range2) noexcept(noexcept(ZipAdapter< std::ranges::iterator_t< R1 >, decltype(std::ranges::cbegin(range2))>(std::ranges::begin(range1), std::ranges::end(range1), std::ranges::cbegin(range2), std::ranges::cend(range2)))) -> ZipAdapter< std::ranges::iterator_t< R1 >, decltype(std::ranges::cbegin(range2))>
 Helper function to create a ZipAdapter from a range and a const range.
 
template<std::ranges::range R1, std::ranges::range R2>
requires ZipAdapterRequirements<decltype(std::ranges::cbegin(std::declval<const R1&>())), decltype(std::ranges::cbegin(std::declval<const R2&>()))>
constexpr auto ZipAdapterFromRange (const R1 &range1, const R2 &range2) noexcept(noexcept(ZipAdapter< decltype(std::ranges::cbegin(range1)), decltype(std::ranges::cbegin(range2))>(std::ranges::cbegin(range1), std::ranges::cend(range1), std::ranges::cbegin(range2), std::ranges::cend(range2)))) -> ZipAdapter< decltype(std::ranges::cbegin(range1)), decltype(std::ranges::cbegin(range2))>
 Helper function to create a ZipAdapter from two const ranges.
 
template<std::ranges::range R>
requires ConcatAdapterRequirements<std::ranges::iterator_t<R>>
constexpr auto ConcatAdapterFromRange (R &range1, R &range2) noexcept(noexcept(ConcatAdapter< std::ranges::iterator_t< R > >(std::ranges::begin(range1), std::ranges::end(range1), std::ranges::begin(range2), std::ranges::end(range2)))) -> ConcatAdapter< std::ranges::iterator_t< R > >
 
template<std::ranges::range R>
requires ConcatAdapterRequirements<decltype(std::ranges::cbegin(std::declval<const R&>()))>
constexpr auto ConcatAdapterFromRange (const R &range1, const R &range2) noexcept(noexcept(ConcatAdapter< decltype(std::ranges::cbegin(range1))>(std::ranges::cbegin(range1), std::ranges::cend(range1), std::ranges::cbegin(range2), std::ranges::cend(range2)))) -> ConcatAdapter< decltype(std::ranges::cbegin(range1))>
 
template<std::ranges::range R>
requires ConcatAdapterRequirements<decltype(std::ranges::cbegin(std::declval<const R&>()))>
constexpr auto ConcatAdapterFromRange (R &range1, const R &range2) noexcept(noexcept(ConcatAdapter< decltype(std::ranges::cbegin(std::declval< const R & >()))>(std::ranges::cbegin(range1), std::ranges::cend(range1), std::ranges::cbegin(range2), std::ranges::cend(range2)))) -> ConcatAdapter< decltype(std::ranges::cbegin(std::declval< const R & >()))>
 Helper function to create a ConcatAdapter from a non-const and const range of the same type.
 
template<std::ranges::range R>
requires ConcatAdapterRequirements<decltype(std::ranges::cbegin(std::declval<const R&>()))>
constexpr auto ConcatAdapterFromRange (const R &range1, R &range2) noexcept(noexcept(ConcatAdapter< decltype(std::ranges::cbegin(std::declval< const R & >()))>(std::ranges::cbegin(range1), std::ranges::cend(range1), std::ranges::cbegin(range2), std::ranges::cend(range2)))) -> ConcatAdapter< decltype(std::ranges::cbegin(std::declval< const R & >()))>
 Helper function to create a ConcatAdapter from a const and non-const range of the same type.
 

Enumeration Type Documentation

◆ DynamicLibraryError

enum class helios::utils::DynamicLibraryError : uint8_t
strong

Error codes for dynamic library operations.

Enumerator
FileNotFound 

Library file not found.

LoadFailed 

Failed to load library.

SymbolNotFound 

Symbol not found in library.

InvalidHandle 

Invalid library handle.

AlreadyLoaded 

Library is already loaded.

NotLoaded 

Library is not loaded.

PlatformError 

Platform-specific error.

Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/utils/dynamic_library.hpp.

Definition at line 19 of file dynamic_library.hpp.

19 : uint8_t {
20 FileNotFound, ///< Library file not found
21 LoadFailed, ///< Failed to load library
22 SymbolNotFound, ///< Symbol not found in library
23 InvalidHandle, ///< Invalid library handle
24 AlreadyLoaded, ///< Library is already loaded
25 NotLoaded, ///< Library is not loaded
26 PlatformError, ///< Platform-specific error
27};
@ FileNotFound
Library file not found.
@ InvalidHandle
Invalid library handle.
@ LoadFailed
Failed to load library.
@ AlreadyLoaded
Library is already loaded.
@ PlatformError
Platform-specific error.
@ SymbolNotFound
Symbol not found in library.

◆ FileError

enum class helios::utils::FileError : uint8_t
strong
Enumerator
kCouldNotOpen 
kReadError 

Definition at line 16 of file filesystem.hpp.

Function Documentation

◆ ChainAdapterFromRange() [1/4]

template<std::ranges::range R1, std::ranges::range R2>
requires ChainAdapterRequirements<decltype(std::ranges::cbegin(std::declval<const R1&>())), decltype(std::ranges::cbegin(std::declval<const R2&>()))>
constexpr auto helios::utils::ChainAdapterFromRange ( const R1 &  range1,
const R2 &  range2 
) -> ChainAdapter<decltype(std::ranges::cbegin(range1)), decltype(std::ranges::cbegin(range2))>
constexprnoexcept

Helper function to create a ChainAdapter from two const ranges.

Template Parameters
R1First range type
R2Second range type
Parameters
range1First range
range2Second range
Returns
ChainAdapter for the two ranges

Definition at line 3638 of file functional_adapters.hpp.

3642 {
3643 return {std::ranges::cbegin(range1), std::ranges::cend(range1), std::ranges::cbegin(range2),
3644 std::ranges::cend(range2)};
3645}

◆ ChainAdapterFromRange() [2/4]

template<std::ranges::range R1, std::ranges::range R2>
requires ChainAdapterRequirements<decltype(std::ranges::cbegin(std::declval<const R1&>())), std::ranges::iterator_t<R2>>
constexpr auto helios::utils::ChainAdapterFromRange ( const R1 &  range1,
R2 &  range2 
) -> ChainAdapter<decltype(std::ranges::cbegin(range1)), std::ranges::iterator_t<R2>>
constexprnoexcept

Helper function to create a ChainAdapter from const and non-const ranges.

Template Parameters
R1First range type
R2Second range type
Parameters
range1First range
range2Second range
Returns
ChainAdapter for the two ranges

Definition at line 3620 of file functional_adapters.hpp.

3623 {
3624 return {std::ranges::cbegin(range1), std::ranges::cend(range1), std::ranges::begin(range2), std::ranges::end(range2)};
3625}

◆ ChainAdapterFromRange() [3/4]

template<std::ranges::range R1, std::ranges::range R2>
requires ChainAdapterRequirements<std::ranges::iterator_t<R1>, decltype(std::ranges::cbegin(std::declval<const R2&>()))>
constexpr auto helios::utils::ChainAdapterFromRange ( R1 &  range1,
const R2 &  range2 
) -> ChainAdapter<std::ranges::iterator_t<R1>, decltype(std::ranges::cbegin(range2))>
constexprnoexcept

Helper function to create a ChainAdapter from non-const and const ranges.

Template Parameters
R1First range type
R2Second range type
Parameters
range1First range
range2Second range
Returns
ChainAdapter for the two ranges

Definition at line 3602 of file functional_adapters.hpp.

3605 {
3606 return {std::ranges::begin(range1), std::ranges::end(range1), std::ranges::cbegin(range2), std::ranges::cend(range2)};
3607}

◆ ChainAdapterFromRange() [4/4]

template<std::ranges::range R1, std::ranges::range R2>
requires ChainAdapterRequirements<std::ranges::iterator_t<R1>, std::ranges::iterator_t<R2>>
constexpr auto helios::utils::ChainAdapterFromRange ( R1 &  range1,
R2 &  range2 
) -> ChainAdapter<std::ranges::iterator_t<R1>, std::ranges::iterator_t<R2>>
constexprnoexcept

Helper function to create a ChainAdapter from two non-const ranges.

Template Parameters
R1First range type
R2Second range type
Parameters
range1First range
range2Second range
Returns
ChainAdapter for the two ranges
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/utils/functional_adapters.hpp.

Definition at line 3584 of file functional_adapters.hpp.

3587 {
3588 return {std::ranges::begin(range1), std::ranges::end(range1), std::ranges::begin(range2), std::ranges::end(range2)};
3589}

◆ ConcatAdapterFromRange() [1/4]

template<std::ranges::range R>
requires ConcatAdapterRequirements<decltype(std::ranges::cbegin(std::declval<const R&>()))>
constexpr auto helios::utils::ConcatAdapterFromRange ( const R &  range1,
const R &  range2 
) -> ConcatAdapter<decltype(std::ranges::cbegin(range1))>
constexprnoexcept

Definition at line 3864 of file functional_adapters.hpp.

3867 {
3868 return {std::ranges::cbegin(range1), std::ranges::cend(range1), std::ranges::cbegin(range2),
3869 std::ranges::cend(range2)};
3870}

◆ ConcatAdapterFromRange() [2/4]

template<std::ranges::range R>
requires ConcatAdapterRequirements<decltype(std::ranges::cbegin(std::declval<const R&>()))>
constexpr auto helios::utils::ConcatAdapterFromRange ( const R &  range1,
R &  range2 
) -> ConcatAdapter<decltype(std::ranges::cbegin(std::declval<const R&>()))>
constexprnoexcept

Helper function to create a ConcatAdapter from a const and non-const range of the same type.

Template Parameters
RRange type (must be the same for both)
Parameters
range1First range (const)
range2Second range (non-const)
Returns
ConcatAdapter for the two ranges using const iterators

Definition at line 3900 of file functional_adapters.hpp.

3905 {
3906 return {std::ranges::cbegin(range1), std::ranges::cend(range1), std::ranges::cbegin(range2),
3907 std::ranges::cend(range2)};
3908}

◆ ConcatAdapterFromRange() [3/4]

template<std::ranges::range R>
requires ConcatAdapterRequirements<decltype(std::ranges::cbegin(std::declval<const R&>()))>
constexpr auto helios::utils::ConcatAdapterFromRange ( R &  range1,
const R &  range2 
) -> ConcatAdapter<decltype(std::ranges::cbegin(std::declval<const R&>()))>
constexprnoexcept

Helper function to create a ConcatAdapter from a non-const and const range of the same type.

Template Parameters
RRange type (must be the same for both)
Parameters
range1First range (non-const)
range2Second range (const)
Returns
ConcatAdapter for the two ranges using const iterators

Definition at line 3881 of file functional_adapters.hpp.

3886 {
3887 return {std::ranges::cbegin(range1), std::ranges::cend(range1), std::ranges::cbegin(range2),
3888 std::ranges::cend(range2)};
3889}

◆ ConcatAdapterFromRange() [4/4]

template<std::ranges::range R>
requires ConcatAdapterRequirements<std::ranges::iterator_t<R>>
constexpr auto helios::utils::ConcatAdapterFromRange ( R &  range1,
R &  range2 
) -> ConcatAdapter<std::ranges::iterator_t<R>>
constexprnoexcept
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/utils/functional_adapters.hpp.

Definition at line 3838 of file functional_adapters.hpp.

3840 {
3841 return {std::ranges::begin(range1), std::ranges::end(range1), std::ranges::begin(range2), std::ranges::end(range2)};
3842}

◆ DynamicLibraryErrorToString()

constexpr std::string_view helios::utils::DynamicLibraryErrorToString ( DynamicLibraryError  error)
constexprnoexcept

Gets a human-readable description for a DynamicLibraryError.

Parameters
errorThe error code
Returns
String description of the error
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/utils/dynamic_library.hpp.

Definition at line 34 of file dynamic_library.hpp.

34 {
35 switch (error) {
36 case DynamicLibraryError::FileNotFound:
37 return "Library file not found";
38 case DynamicLibraryError::LoadFailed:
39 return "Failed to load library";
40 case DynamicLibraryError::SymbolNotFound:
41 return "Symbol not found in library";
42 case DynamicLibraryError::InvalidHandle:
43 return "Invalid library handle";
44 case DynamicLibraryError::AlreadyLoaded:
45 return "Library is already loaded";
46 case DynamicLibraryError::NotLoaded:
47 return "Library is not loaded";
48 case DynamicLibraryError::PlatformError:
49 return "Platform-specific error";
50 default:
51 return "Unknown error";
52 }
53}

◆ EnumerateAdapterFromRange() [1/2]

template<std::ranges::range R>
requires EnumerateAdapterRequirements<decltype(std::ranges::cbegin(std::declval<const R&>()))>
constexpr auto helios::utils::EnumerateAdapterFromRange ( const R &  range) -> EnumerateAdapter<decltype(std::ranges::cbegin(range))>
constexprnoexcept

Helper function to create an EnumerateAdapter from a const range.

Template Parameters
RRange type
Parameters
rangeRange to enumerate
Returns
EnumerateAdapter for the range

Definition at line 3504 of file functional_adapters.hpp.

3506 {
3507 return {std::ranges::cbegin(range), std::ranges::cend(range)};
3508}

◆ EnumerateAdapterFromRange() [2/2]

template<std::ranges::range R>
requires EnumerateAdapterRequirements<std::ranges::iterator_t<R>>
constexpr auto helios::utils::EnumerateAdapterFromRange ( R &  range) -> EnumerateAdapter<std::ranges::iterator_t<R>>
constexprnoexcept

Helper function to create an EnumerateAdapter from a non-const range.

Template Parameters
RRange type
Parameters
rangeRange to enumerate
Returns
EnumerateAdapter for the range
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/utils/functional_adapters.hpp.

Definition at line 3490 of file functional_adapters.hpp.

3492 {
3493 return {std::ranges::begin(range), std::ranges::end(range)};
3494}

◆ FileErrorToString()

constexpr std::string_view helios::utils::FileErrorToString ( FileError  error)
constexprnoexcept

Converts FileError to a human-readable string.

Parameters
errorThe FileError to convert
Returns
A string view representing the error

Definition at line 23 of file filesystem.hpp.

23 {
24 switch (error) {
25 case FileError::kCouldNotOpen:
26 return "Could not open file";
27 case FileError::kReadError:
28 return "Could not read file";
29 default:
30 return "Unknown file error";
31 }
32}

◆ FilterAdapterFromRange() [1/2]

template<std::ranges::range R, typename Pred >
requires FilterAdapterRequirements<decltype(std::ranges::cbegin(std::declval<const R&>())), Pred>
constexpr auto helios::utils::FilterAdapterFromRange ( const R &  range,
Pred  predicate 
) -> FilterAdapter<decltype(std::ranges::cbegin(range)), Pred>
constexprnoexcept

Helper function to create a FilterAdapter from a const range.

Template Parameters
RRange type
PredPredicate type
Parameters
rangeRange to filter
predicateFunction to filter elements
Returns
FilterAdapter for the range

Definition at line 3313 of file functional_adapters.hpp.

3316 {
3317 return {std::ranges::cbegin(range), std::ranges::cend(range), std::move(predicate)};
3318}

◆ FilterAdapterFromRange() [2/2]

template<std::ranges::range R, typename Pred >
requires FilterAdapterRequirements<std::ranges::iterator_t<R>, Pred>
constexpr auto helios::utils::FilterAdapterFromRange ( R &  range,
Pred  predicate 
) -> FilterAdapter<std::ranges::iterator_t<R>, Pred>
constexprnoexcept

Helper function to create a FilterAdapter from a non-const range.

Template Parameters
RRange type
PredPredicate type
Parameters
rangeRange to filter
predicateFunction to filter elements
Returns
FilterAdapter for the range
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/utils/functional_adapters.hpp.

Definition at line 3296 of file functional_adapters.hpp.

3299 {
3300 return {std::ranges::begin(range), std::ranges::end(range), std::move(predicate)};
3301}

◆ FromPath()

auto helios::utils::FromPath ( const std::filesystem::path &  path) -> std::expected<DynamicLibrary, DynamicLibraryError>
inline
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/utils/dynamic_library.hpp.

Definition at line 228 of file dynamic_library.hpp.

228 {
229 DynamicLibrary lib;
230 if (const auto result = lib.Load(path); !result) {
231 return std::unexpected(result.error());
232 }
233 return lib;
234}
auto Load(const std::filesystem::path &path) -> std::expected< void, DynamicLibraryError >
Loads a dynamic library from the specified path.

◆ GetFileExtension()

static constexpr std::string_view helios::utils::GetFileExtension ( std::string_view  path)
staticconstexpr

Extracts the file extension from a given path.

Parameters
pathThe full file path
Returns
The file extension, including the dot (e.g., ".txt"), or an empty string if none exists

Definition at line 118 of file filesystem.hpp.

118 {
119 const size_t last_dot = path.find_last_of('.');
120 return (last_dot != std::string_view::npos) ? path.substr(last_dot) : "";
121}

◆ GetFileName()

constexpr std::string_view helios::utils::GetFileName ( std::string_view  path)
constexpr

Extracts the file name from a given path.

Parameters
pathThe full file path
Returns
The file name

Definition at line 108 of file filesystem.hpp.

108 {
109 const size_t last_slash = path.find_last_of("/\\");
110 return (last_slash != std::string_view::npos) ? path.substr(last_slash + 1) : path;
111}

◆ InspectAdapterFromRange() [1/2]

template<std::ranges::range R, typename Func >
requires InspectAdapterRequirements<decltype(std::ranges::cbegin(std::declval<const R&>())), Func>
constexpr auto helios::utils::InspectAdapterFromRange ( const R &  range,
Func  inspector 
) -> InspectAdapter<decltype(std::ranges::cbegin(range)), Func>
constexprnoexcept

Helper function to create an InspectAdapter from a const range.

Template Parameters
RRange type
FuncInspector function type
Parameters
rangeRange to inspect
inspectorFunction to call for each element
Returns
InspectAdapter for the range

Definition at line 3537 of file functional_adapters.hpp.

3540 {
3541 return {std::ranges::cbegin(range), std::ranges::cend(range), std::move(inspector)};
3542}

◆ InspectAdapterFromRange() [2/2]

template<std::ranges::range R, typename Func >
requires InspectAdapterRequirements<std::ranges::iterator_t<R>, Func>
constexpr auto helios::utils::InspectAdapterFromRange ( R &  range,
Func  inspector 
) -> InspectAdapter<std::ranges::iterator_t<R>, Func>
constexprnoexcept

Helper function to create an InspectAdapter from a non-const range.

Template Parameters
RRange type
FuncInspector function type
Parameters
rangeRange to inspect
inspectorFunction to call on each element
Returns
InspectAdapter for the range
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/utils/functional_adapters.hpp.

Definition at line 3520 of file functional_adapters.hpp.

3523 {
3524 return {std::ranges::begin(range), std::ranges::end(range), std::move(inspector)};
3525}

◆ JoinAdapterFromRange() [1/2]

template<std::ranges::range R>
requires JoinAdapterRequirements<decltype(std::ranges::cbegin(std::declval<const R&>()))>
constexpr auto helios::utils::JoinAdapterFromRange ( const R &  range) -> JoinAdapter<decltype(std::ranges::cbegin(range))>
constexprnoexcept

Helper function to create a JoinAdapter from a const range.

Template Parameters
RRange type
Parameters
rangeRange to join
Returns
JoinAdapter for the range

Definition at line 3697 of file functional_adapters.hpp.

3699 {
3700 return {std::ranges::cbegin(range), std::ranges::cend(range)};
3701}

◆ JoinAdapterFromRange() [2/2]

template<std::ranges::range R>
requires JoinAdapterRequirements<std::ranges::iterator_t<R>>
constexpr auto helios::utils::JoinAdapterFromRange ( R &  range) -> JoinAdapter<std::ranges::iterator_t<R>>
constexprnoexcept

Helper function to create a JoinAdapter from a range.

Template Parameters
RRange type
Parameters
rangeRange to join
Returns
JoinAdapter for the range
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/utils/functional_adapters.hpp.

Definition at line 3683 of file functional_adapters.hpp.

3685 {
3686 return {std::ranges::begin(range), std::ranges::end(range)};
3687}

◆ MapAdapterFromRange() [1/2]

template<std::ranges::range R, typename Func >
requires MapAdapterRequirements<decltype(std::ranges::cbegin(std::declval<const R&>())), Func>
constexpr auto helios::utils::MapAdapterFromRange ( const R &  range,
Func  transform 
) -> MapAdapter<decltype(std::ranges::cbegin(range)), Func>
constexprnoexcept

Helper function to create a MapAdapter from a const range.

Template Parameters
RRange type
FuncTransformation function type
Parameters
rangeRange to map
transformFunction to apply to each element
Returns
MapAdapter for the range

Definition at line 3347 of file functional_adapters.hpp.

3350 {
3351 return {std::ranges::cbegin(range), std::ranges::cend(range), std::move(transform)};
3352}

◆ MapAdapterFromRange() [2/2]

template<std::ranges::range R, typename Func >
requires MapAdapterRequirements<std::ranges::iterator_t<R>, Func>
constexpr auto helios::utils::MapAdapterFromRange ( R &  range,
Func  transform 
) -> MapAdapter<std::ranges::iterator_t<R>, Func>
constexprnoexcept

Helper function to create a MapAdapter from a range.

Template Parameters
RRange type
FuncTransformation function type
Parameters
rangeRange to map
transformFunction to apply to each element
Returns
MapAdapter for the range
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/utils/functional_adapters.hpp.

Definition at line 3330 of file functional_adapters.hpp.

3333 {
3334 return {std::ranges::begin(range), std::ranges::end(range), std::move(transform)};
3335}

◆ ReadFileToString() [1/2]

auto helios::utils::ReadFileToString ( const std::filesystem::path &  filepath) -> std::expected<std::string, FileError>
inline

Reads the entire contents of a file into a string.

Parameters
filepathThe path to the file
Returns
An expected containing the file contents or a FileError

Definition at line 73 of file filesystem.hpp.

74 {
75 if (filepath.empty()) {
76 return std::unexpected(FileError::kCouldNotOpen);
77 }
78
79 std::ifstream in(filepath, std::ios::in | std::ios::binary);
80 if (!in) {
81 return std::unexpected(FileError::kCouldNotOpen);
82 }
83
84 std::string result;
85 in.seekg(0, std::ios::end);
86 const auto pos = in.tellg();
87 if (pos == std::ifstream::pos_type(-1)) {
88 return std::unexpected(FileError::kReadError);
89 }
90
91 const auto size = static_cast<size_t>(pos);
92 result.resize(size);
93 in.seekg(0, std::ios::beg);
94 in.read(result.data(), static_cast<std::streamsize>(result.size()));
95 if (!in) {
96 return std::unexpected(FileError::kReadError);
97 }
98 in.close();
99
100 return result;
101}

◆ ReadFileToString() [2/2]

auto helios::utils::ReadFileToString ( std::string_view  filepath) -> std::expected<std::string, FileError>
inline

Reads the entire contents of a file into a string.

Parameters
filepathThe path to the file
Returns
An expected containing the file contents or a FileError

Definition at line 39 of file filesystem.hpp.

39 {
40 if (filepath.empty()) {
41 return std::unexpected(FileError::kCouldNotOpen);
42 }
43
44 std::ifstream in(filepath.data(), std::ios::in | std::ios::binary);
45 if (!in) {
46 return std::unexpected(FileError::kCouldNotOpen);
47 }
48
49 std::string result;
50 in.seekg(0, std::ios::end);
51 const auto pos = in.tellg();
52 if (pos == std::ifstream::pos_type(-1)) {
53 return std::unexpected(FileError::kReadError);
54 }
55
56 const auto size = static_cast<size_t>(pos);
57 result.resize(size);
58 in.seekg(0, std::ios::beg);
59 in.read(result.data(), static_cast<std::streamsize>(result.size()));
60 if (!in) {
61 return std::unexpected(FileError::kReadError);
62 }
63 in.close();
64
65 return result;
66}

◆ ReverseAdapterFromRange() [1/2]

template<std::ranges::range R>
requires ReverseAdapterRequirements<decltype(std::ranges::cbegin(std::declval<const R&>()))>
constexpr auto helios::utils::ReverseAdapterFromRange ( const R &  range) -> ReverseAdapter<decltype(std::ranges::cbegin(range))>
constexprnoexcept

Helper function to create a ReverseAdapter from a const range.

Template Parameters
RRange type
Parameters
rangeRange to reverse
Returns
ReverseAdapter for the range

Definition at line 3669 of file functional_adapters.hpp.

3671 {
3672 return {std::ranges::cbegin(range), std::ranges::cend(range)};
3673}

◆ ReverseAdapterFromRange() [2/2]

template<std::ranges::range R>
requires ReverseAdapterRequirements<std::ranges::iterator_t<R>>
constexpr auto helios::utils::ReverseAdapterFromRange ( R &  range) -> ReverseAdapter<std::ranges::iterator_t<R>>
constexprnoexcept

Helper function to create a ReverseAdapter from a range.

Template Parameters
RRange type
Parameters
rangeRange to reverse
Returns
ReverseAdapter for the range
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/utils/functional_adapters.hpp.

Definition at line 3655 of file functional_adapters.hpp.

3657 {
3658 return {std::ranges::begin(range), std::ranges::end(range)};
3659}

◆ SkipAdapterFromRange() [1/2]

template<std::ranges::range R>
requires SkipAdapterRequirements<decltype(std::ranges::cbegin(std::declval<const R&>()))>
constexpr auto helios::utils::SkipAdapterFromRange ( const R &  range,
size_t  count 
) -> SkipAdapter<decltype(std::ranges::cbegin(range))>
constexprnoexcept

Helper function to create a SkipAdapter from a const range.

Template Parameters
RRange type
Parameters
rangeRange to skip from
countNumber of elements to skip
Returns
SkipAdapter for the range

Definition at line 3408 of file functional_adapters.hpp.

3410 {
3411 return {std::ranges::cbegin(range), std::ranges::cend(range), count};
3412}

◆ SkipAdapterFromRange() [2/2]

template<std::ranges::range R>
requires SkipAdapterRequirements<std::ranges::iterator_t<R>>
constexpr auto helios::utils::SkipAdapterFromRange ( R &  range,
size_t  count 
) -> SkipAdapter<std::ranges::iterator_t<R>>
constexprnoexcept

Helper function to create a SkipAdapter from a non-const range.

Template Parameters
RRange type
Parameters
rangeRange to skip from
countNumber of elements to skip
Returns
SkipAdapter for the range
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/utils/functional_adapters.hpp.

Definition at line 3393 of file functional_adapters.hpp.

3395 {
3396 return {std::ranges::begin(range), std::ranges::end(range), count};
3397}

◆ SkipWhileAdapterFromRange() [1/2]

template<std::ranges::range R, typename Pred >
requires SkipWhileAdapterRequirements<decltype(std::ranges::cbegin(std::declval<const R&>())), Pred>
constexpr auto helios::utils::SkipWhileAdapterFromRange ( const R &  range,
Pred  predicate 
) -> SkipWhileAdapter<decltype(std::ranges::cbegin(range)), Pred>
constexprnoexcept

Helper function to create a SkipWhileAdapter from a const range.

Template Parameters
RRange type
PredPredicate type
Parameters
rangeRange to skip from
predicatePredicate to test elements
Returns
SkipWhileAdapter for the range

Definition at line 3475 of file functional_adapters.hpp.

3478 {
3479 return {std::ranges::cbegin(range), std::ranges::cend(range), std::move(predicate)};
3480}

◆ SkipWhileAdapterFromRange() [2/2]

template<std::ranges::range R, typename Pred >
requires SkipWhileAdapterRequirements<std::ranges::iterator_t<R>, Pred>
constexpr auto helios::utils::SkipWhileAdapterFromRange ( R &  range,
Pred  predicate 
) -> SkipWhileAdapter<std::ranges::iterator_t<R>, Pred>
constexprnoexcept

Helper function to create a SkipWhileAdapter from a non-const range.

Template Parameters
RRange type
PredPredicate type
Parameters
rangeRange to skip from
predicatePredicate to test elements
Returns
SkipWhileAdapter for the range
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/utils/functional_adapters.hpp.

Definition at line 3458 of file functional_adapters.hpp.

3461 {
3462 return {std::ranges::begin(range), std::ranges::end(range), std::move(predicate)};
3463}

◆ SlideAdapterFromRange() [1/2]

template<std::ranges::range R>
requires SlideAdapterRequirements<decltype(std::ranges::cbegin(std::declval<const R&>()))>
constexpr auto helios::utils::SlideAdapterFromRange ( const R &  range,
size_t  window_size 
) -> SlideAdapter<decltype(std::ranges::cbegin(range))>
constexprnoexcept

Helper function to create a SlideAdapter from a const range.

Template Parameters
RRange type
Parameters
rangeRange to slide over
window_sizeSize of the sliding window
Returns
SlideAdapter for the range

Definition at line 3727 of file functional_adapters.hpp.

3730 {
3731 return {std::ranges::cbegin(range), std::ranges::cend(range), window_size};
3732}

◆ SlideAdapterFromRange() [2/2]

template<std::ranges::range R>
requires SlideAdapterRequirements<std::ranges::iterator_t<R>>
constexpr auto helios::utils::SlideAdapterFromRange ( R &  range,
size_t  window_size 
) -> SlideAdapter<std::ranges::iterator_t<R>>
constexprnoexcept

Helper function to create a SlideAdapter from a range.

Template Parameters
RRange type
Parameters
rangeRange to slide over
window_sizeSize of the sliding window
Returns
SlideAdapter for the range
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/utils/functional_adapters.hpp.

Definition at line 3712 of file functional_adapters.hpp.

3714 {
3715 return {std::ranges::begin(range), std::ranges::end(range), window_size};
3716}

◆ StepByAdapterFromRange() [1/2]

template<std::ranges::range R>
requires StepByAdapterRequirements<decltype(std::ranges::cbegin(std::declval<const R&>()))>
constexpr auto helios::utils::StepByAdapterFromRange ( const R &  range,
size_t  step 
) -> StepByAdapter<decltype(std::ranges::cbegin(range))>
constexprnoexcept

Helper function to create a StepByAdapter from a const range.

Template Parameters
RRange type
Parameters
rangeRange to step through
stepNumber of elements to step by
Returns
StepByAdapter for the range

Definition at line 3568 of file functional_adapters.hpp.

3570 {
3571 return {std::ranges::cbegin(range), std::ranges::cend(range), step};
3572}

◆ StepByAdapterFromRange() [2/2]

template<std::ranges::range R>
requires StepByAdapterRequirements<std::ranges::iterator_t<R>>
constexpr auto helios::utils::StepByAdapterFromRange ( R &  range,
size_t  step 
) -> StepByAdapter<std::ranges::iterator_t<R>>
constexprnoexcept

Helper function to create a StepByAdapter from a non-const range.

Template Parameters
RRange type
Parameters
rangeRange to step through
stepStep size
Returns
StepByAdapter for the range
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/utils/functional_adapters.hpp.

Definition at line 3553 of file functional_adapters.hpp.

3555 {
3556 return {std::ranges::begin(range), std::ranges::end(range), step};
3557}

◆ StrideAdapterFromRange() [1/2]

template<std::ranges::range R>
requires StrideAdapterRequirements<decltype(std::ranges::cbegin(std::declval<const R&>()))>
constexpr auto helios::utils::StrideAdapterFromRange ( const R &  range,
size_t  stride 
) -> StrideAdapter<decltype(std::ranges::cbegin(range))>
constexprnoexcept

Helper function to create a StrideAdapter from a const range.

Template Parameters
RRange type
Parameters
rangeRange to stride over
strideStride value
Returns
StrideAdapter for the range

Definition at line 3758 of file functional_adapters.hpp.

3760 {
3761 return {std::ranges::cbegin(range), std::ranges::cend(range), stride};
3762}

◆ StrideAdapterFromRange() [2/2]

template<std::ranges::range R>
requires StrideAdapterRequirements<std::ranges::iterator_t<R>>
constexpr auto helios::utils::StrideAdapterFromRange ( R &  range,
size_t  stride 
) -> StrideAdapter<std::ranges::iterator_t<R>>
constexprnoexcept

Helper function to create a StrideAdapter from a range.

Template Parameters
RRange type
Parameters
rangeRange to stride over
strideStride value
Returns
StrideAdapter for the range
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/utils/functional_adapters.hpp.

Definition at line 3743 of file functional_adapters.hpp.

3745 {
3746 return {std::ranges::begin(range), std::ranges::end(range), stride};
3747}

◆ TakeAdapterFromRange() [1/2]

template<std::ranges::range R>
requires TakeAdapterRequirements<decltype(std::ranges::cbegin(std::declval<const R&>()))>
constexpr auto helios::utils::TakeAdapterFromRange ( const R &  range,
size_t  count 
) -> TakeAdapter<decltype(std::ranges::cbegin(range))>
constexprnoexcept

Helper function to create a TakeAdapter from a const range.

Template Parameters
RRange type
Parameters
rangeRange to take from
countMaximum number of elements to yield
Returns
TakeAdapter for the range

Definition at line 3378 of file functional_adapters.hpp.

3380 {
3381 return {std::ranges::cbegin(range), std::ranges::cend(range), count};
3382}

◆ TakeAdapterFromRange() [2/2]

template<std::ranges::range R>
requires TakeAdapterRequirements<std::ranges::iterator_t<R>>
constexpr auto helios::utils::TakeAdapterFromRange ( R &  range,
size_t  count 
) -> TakeAdapter<std::ranges::iterator_t<R>>
constexprnoexcept

Helper function to create a TakeAdapter from a non-const range.

Template Parameters
RRange type
Parameters
rangeRange to take from
countMaximum number of elements to yield
Returns
TakeAdapter for the range
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/utils/functional_adapters.hpp.

Definition at line 3363 of file functional_adapters.hpp.

3365 {
3366 return {std::ranges::begin(range), std::ranges::end(range), count};
3367}

◆ TakeWhileAdapterFromRange() [1/2]

template<std::ranges::range R, typename Pred >
requires TakeWhileAdapterRequirements<decltype(std::ranges::cbegin(std::declval<const R&>())), Pred>
constexpr auto helios::utils::TakeWhileAdapterFromRange ( const R &  range,
Pred  predicate 
) -> TakeWhileAdapter<decltype(std::ranges::cbegin(range)), Pred>
constexprnoexcept

Helper function to create a TakeWhileAdapter from a const range.

Template Parameters
RRange type
PredPredicate type
Parameters
rangeRange to take from
predicatePredicate to test elements
Returns
TakeWhileAdapter for the range

Definition at line 3441 of file functional_adapters.hpp.

3444 {
3445 return {std::ranges::cbegin(range), std::ranges::cend(range), std::move(predicate)};
3446}

◆ TakeWhileAdapterFromRange() [2/2]

template<std::ranges::range R, typename Pred >
requires TakeWhileAdapterRequirements<std::ranges::iterator_t<R>, Pred>
constexpr auto helios::utils::TakeWhileAdapterFromRange ( R &  range,
Pred  predicate 
) -> TakeWhileAdapter<std::ranges::iterator_t<R>, Pred>
constexprnoexcept

Helper function to create a TakeWhileAdapter from a non-const range.

Template Parameters
RRange type
PredPredicate type
Parameters
rangeRange to take from
predicatePredicate to test elements
Returns
TakeWhileAdapter for the range
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/utils/functional_adapters.hpp.

Definition at line 3424 of file functional_adapters.hpp.

3427 {
3428 return {std::ranges::begin(range), std::ranges::end(range), std::move(predicate)};
3429}

◆ ZipAdapterFromRange() [1/3]

template<std::ranges::range R1, std::ranges::range R2>
requires ZipAdapterRequirements<decltype(std::ranges::cbegin(std::declval<const R1&>())), decltype(std::ranges::cbegin(std::declval<const R2&>()))>
constexpr auto helios::utils::ZipAdapterFromRange ( const R1 &  range1,
const R2 &  range2 
) -> ZipAdapter<decltype(std::ranges::cbegin(range1)), decltype(std::ranges::cbegin(range2))>
constexprnoexcept

Helper function to create a ZipAdapter from two const ranges.

Template Parameters
R1First range type
R2Second range type
Parameters
range1First range
range2Second range
Returns
ZipAdapter for the two ranges

Definition at line 3809 of file functional_adapters.hpp.

3813 {
3814 return {std::ranges::cbegin(range1), std::ranges::cend(range1), std::ranges::cbegin(range2),
3815 std::ranges::cend(range2)};
3816}

◆ ZipAdapterFromRange() [2/3]

template<std::ranges::range R1, std::ranges::range R2>
requires ZipAdapterRequirements<std::ranges::iterator_t<R1>, decltype(std::ranges::cbegin(std::declval<const R2&>()))>
constexpr auto helios::utils::ZipAdapterFromRange ( R1 &  range1,
const R2 &  range2 
) -> ZipAdapter<std::ranges::iterator_t<R1>, decltype(std::ranges::cbegin(range2))>
constexprnoexcept

Helper function to create a ZipAdapter from a range and a const range.

Template Parameters
R1First range type
R2Second range type
Parameters
range1First range
range2Second range
Returns
ZipAdapter for the two ranges

Definition at line 3791 of file functional_adapters.hpp.

3794 {
3795 return {std::ranges::begin(range1), std::ranges::end(range1), std::ranges::cbegin(range2), std::ranges::cend(range2)};
3796}

◆ ZipAdapterFromRange() [3/3]

template<std::ranges::range R1, std::ranges::range R2>
requires ZipAdapterRequirements<std::ranges::iterator_t<R1>, std::ranges::iterator_t<R2>>
constexpr auto helios::utils::ZipAdapterFromRange ( R1 &  range1,
R2 &  range2 
) -> ZipAdapter<std::ranges::iterator_t<R1>, std::ranges::iterator_t<R2>>
constexprnoexcept

Helper function to create a ZipAdapter from two ranges.

Template Parameters
R1First range type
R2Second range type
Parameters
range1First range
range2Second range
Returns
ZipAdapter for the two ranges
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/utils/functional_adapters.hpp.

Definition at line 3774 of file functional_adapters.hpp.

3777 {
3778 return {std::ranges::begin(range1), std::ranges::end(range1), std::ranges::begin(range2), std::ranges::end(range2)};
3779}