bases module

namespace cauldron
template <typename Value, class Derived>
class CloneHelper
#include <bases.h>

Helper class for implementing Strategy::clone method using curiously recurring template pattern .

Template Parameters
  • Value: type of values generated by strategy.
  • Derived: derivative strategy class.

Inherits from cauldron::Strategy< Value >

Public Functions

std::unique_ptr<Strategy<Value>> clone() const

Creates a copy of the strategy instance and returns pointer to it.

template <typename Value>
class Filtered
#include <bases.h>

Strategy which filters out values that satisfies defined strategies::Requirement instances.

Hereafter a requirement is an unary predicate .

Template Parameters
  • Value: type of values generated by strategy.

Inherits from cauldron::CloneHelper< Value, Filtered< Value > >

Public Functions

Filtered(const Strategy<Value> &strategy, const Sieve<Value> &sieve)
Filtered(const Filtered<Value> &strategy)

Default copy constructor doesn’t fit since we’re using std::unique_ptr as class member which is not copyable.

Filtered<Value> filter(const Requirement<Value> &requirement) const

Returns a new strategy that generates values from the strategy which satisfy provided strategies::Requirement instance.

Note that if the requirement is too hard to satisfy this might result in failing with OutOfCycles.

Value operator()() const

Generates value that satisfies defined strategies::Requirement instances.

Exceptions
  • strategies::OutOfCycles:

Protected Attributes

std::unique_ptr<Strategy<Value>> strategy_
Sieve<Value> sieve_
template <typename Value>
class Mapped
#include <bases.h>

Strategy which modifies values with defined strategies::Converter instances.

Hereafter a converter is an operator .

Template Parameters
  • Value: type of values generated by strategy.

Inherits from cauldron::CloneHelper< Value, Mapped< Value > >

Public Functions

Mapped(const Strategy<Value> &strategy, const Facility<Value> &facility)
Mapped(const Mapped<Value> &strategy)

Default copy constructor doesn’t fit since we’re using std::unique_ptr as class member which is not copyable.

Mapped<Value> map(const Converter<Value> &converter) const

Returns a new strategy that generates values from the strategy modified with provided strategies::Converter instance.

Value operator()() const

Generates value and modifies it with defined strategies::Converter instances.

Protected Attributes

std::unique_ptr<Strategy<Value>> strategy_
Facility<Value> facility_
template <typename Value>
class Strategy
#include <bases.h>

Strategies base class.

Hereafter strategy is an object which encapsulates an algorithm for generating specific type of values.

Template Parameters
  • Value: type of values generated by strategy.

Subclassed by cauldron::CloneHelper< Value, Derived >, cauldron::CloneHelper< Value, Filtered< Value > >, cauldron::CloneHelper< Value, Floats< Value > >, cauldron::CloneHelper< Value, Integers< Value > >, cauldron::CloneHelper< Value, Just< Value > >, cauldron::CloneHelper< Value, Mapped< Value > >, cauldron::CloneHelper< Value, Union< Value > >

Public Functions

virtual Value operator()() const = 0

Generates data.

virtual Union<Value> operator||(const Strategy<Value> &strategy) const

Returns a new strategy that generates values from either original strategy or provided one.

virtual Union<Value> operator||(const Union<Value> &strategy) const

Same result as for any other strategy. Basically added for possible overriding with support of strategies’ union associativity.

virtual Filtered<Value> filter(const Requirement<Value> &requirement) const

Returns a new strategy that generates values from the strategy which satisfy provided strategies::Requirement instance.

Note that if the requirement is too hard to satisfy this might result in failing with OutOfCycles.

virtual Mapped<Value> map(const Converter<Value> &converter) const

Returns a new strategy that generates values from the strategy modified with provided strategies::Converter instance.

virtual std::unique_ptr<Strategy<Value>> clone() const = 0

Creates a copy of the strategy instance and returns pointer to it.

template <class Value>
class Union
#include <bases.h>

Union of strategies. Generates values from any one of given strategies.

Template Parameters
  • Value: type of values generated by strategy.

Inherits from cauldron::CloneHelper< Value, Union< Value > >

Public Functions

Union(const Strategy<Value> &strategy, const Strategy<Value> &other_strategy)
Union(const Union<Value> &strategy)

Default copy constructor doesn’t fit since we’re using std::unique_ptr in class member which is not copyable.

Value operator()() const

Generates value from one of strategies_ elements.

Union<Value> operator||(const Strategy<Value> &strategy) const

Returns a new strategy that generates values from either original strategy or provided one.

Union<Value> operator||(const Union<Value> &strategy) const

Same result as for any other strategy. Basically added for possible overriding with support of strategies’ union associativity.

Private Members

std::vector<std::unique_ptr<Strategy<Value>>> strategies_