CeresEngine 0.2.0
A game development framework
Loading...
Searching...
No Matches
AnyGenerator.hpp
Go to the documentation of this file.
1//
2// CeresEngine - A game development framework
3//
4// Created by Rogiel Sulzbach.
5// Copyright (c) 2018-2022 Rogiel Sulzbach. All rights reserved.
6//
7
8#pragma once
9
11
13
16 template<typename T> class AnyGenerator {
17 public:
18 template<typename Generator> AnyGenerator(Generator generator) : mBase{new Derived<Generator>{std::move(generator)}} {}
19
20 AnyGenerator(const AnyGenerator& that) : mBase{that.mBase->clone()} {}
22 mBase = that.mBase->clone();
23 return *this;
24 }
25
28
29 [[nodiscard]] T generate() const { return mBase->generate(); }
30 [[nodiscard]] bool done() const noexcept { return mBase->done(); }
31 void next() { mBase->next(); }
32
33 private:
34 class Base {
35 public:
36 virtual ~Base() {}
37 [[nodiscard]] virtual UPtr<Base> clone() const = 0;
38 [[nodiscard]] virtual T generate() const = 0;
39 [[nodiscard]] virtual bool done() const noexcept = 0;
40 virtual void next() = 0;
41 };
42
43 template<typename Generator> class Derived : public Base {
44 public:
45 Derived(Generator generator) : mGenerator{std::move(generator)} {}
46
47 [[nodiscard]] virtual UPtr<Base> clone() const override { return UPtr<Base>(new Derived{mGenerator}); }
48 [[nodiscard]] virtual T generate() const override { return mGenerator.generate(); }
49 [[nodiscard]] virtual bool done() const noexcept override { return mGenerator.done(); }
50 virtual void next() override { mGenerator.next(); }
51
52 private:
54 };
55
57 };
58
59} // namespace CeresEngine::MeshGenerator
A generator represents a coroutine type that produces a sequence of values of type T,...
Definition Generator.hpp:50
virtual bool done() const noexcept=0
virtual ~Base()
Definition AnyGenerator.hpp:36
virtual UPtr< Base > clone() const =0
virtual T generate() const override
Definition AnyGenerator.hpp:48
virtual bool done() const noexcept override
Definition AnyGenerator.hpp:49
virtual UPtr< Base > clone() const override
Definition AnyGenerator.hpp:47
Derived(Generator generator)
Definition AnyGenerator.hpp:45
virtual void next() override
Definition AnyGenerator.hpp:50
Generator mGenerator
Definition AnyGenerator.hpp:53
A type erasing container that can store any generator that generates type T.
Definition AnyGenerator.hpp:16
AnyGenerator(const AnyGenerator &that)
Definition AnyGenerator.hpp:20
UPtr< Base > mBase
Definition AnyGenerator.hpp:56
T generate() const
Definition AnyGenerator.hpp:29
AnyGenerator & operator=(const AnyGenerator &that)
Definition AnyGenerator.hpp:21
AnyGenerator & operator=(AnyGenerator &&)=default
void next()
Definition AnyGenerator.hpp:31
AnyGenerator(Generator generator)
Definition AnyGenerator.hpp:18
bool done() const noexcept
Definition AnyGenerator.hpp:30
AnyGenerator(AnyGenerator &&)=default
Definition AnyGenerator.hpp:12
std::unique_ptr< T, Deleter > UPtr
UPtr is a smart pointer that owns and manages another object through a pointer and disposes of that o...
Definition SmartPtr.hpp:28
auto move(Vector3 position)
Moves a entity to the given position.
Definition Helpers.hpp:22
constexpr size_t hash(const T &v)
Generates a hash for the provided type.
Definition Hash.hpp:25
Definition Span.hpp:668