29 const std::set<std::string>& Sp,
30 const std::set<std::string>& Sm,
31 const std::set<std::string>& S,
32 const std::set<std::string>& prefixes,
33 const std::set<char>& alphabet,
65 static MethodPtr create(
const std::string &name,
unsigned int n,
const std::set<std::string> &Sp,
const std::set<std::string> &Sm,
const std::set<std::string> &S,
const std::set<std::string> &prefixes,
const std::set<char> &alphabet);
68 static std::map<std::string, MethodConstructor> s_methodsMap;
102 [](
const std::set<std::string> &Sp,
const std::set<std::string> &Sm,
const std::set<std::string> &S,
const std::set<std::string> &prefixes,
const std::set<char> &alphabet,
unsigned int n) ->
MethodFactory::MethodPtr {
103 class MethodImplemented :
public T {
105 MethodImplemented(
const std::set<std::string> &SpSet,
const std::set<std::string> &SmSet,
const std::set<std::string> &SSet,
const std::set<std::string> &prefixesSet,
const std::set<char> &alphabetSet,
unsigned int n) : T(SpSet, SmSet, SSet, prefixesSet, alphabetSet, n) {}
108 return std::move(std::make_unique<MethodImplemented>(Sp, Sm, S, prefixes, alphabet, n));
123 std::unique_ptr<Method>
constructMethod(
const std::string &name,
unsigned int n,
const std::set<std::string> &Sp,
const std::set<std::string> &Sm);
139 std::unique_ptr<Method>
constructMethod(
const std::string &name,
unsigned int n,
const std::set<std::string> &Sp,
const std::set<std::string> &Sm,
const std::set<std::string> &S,
const std::set<std::string> &prefixes,
const std::set<char> &alphabet);
155 std::pair<std::unique_ptr<Method>,
bool>
constructMethod(
const std::string &name,
const std::set<std::string> &Sp,
const std::set<std::string> &Sm,
const std::chrono::seconds &timeLimit = std::chrono::seconds(0),
long double *timeTaken =
nullptr);
174 std::pair<std::unique_ptr<Method>,
bool>
constructMethod(
const std::string &name,
const std::set<std::string> &Sp,
const std::set<std::string> &Sm,
const std::set<std::string> &S,
const std::set<std::string> &prefixes,
const std::set<char> &alphabet,
const std::chrono::seconds &timeLimit = std::chrono::seconds(0),
long double *timeTaken =
nullptr);
The namespace of the library.
static MethodPtr create(const std::string &name, unsigned int n, const std::set< std::string > &Sp, const std::set< std::string > &Sm, const std::set< std::string > &S, const std::set< std::string > &prefixes, const std::set< char > &alphabet)
Creates a unique_ptr to a method.
static bool registerMethod(const std::string &name, MethodConstructor const &constructor)
Registers a method.
std::unique_ptr< Method > constructMethod(const std::string &name, unsigned int n, const std::set< std::string > &Sp, const std::set< std::string > &Sm)
Computes the alphabet and the prefixes set from Sp and Sm and constructs a method for a fixed number ...
The Factory Builder design pattern adapted to our methods.
static bool s_registered
Useful to make sure the template is correctly used by the compiler.
std::unique_ptr< Method > MethodPtr
The type the function create will return.
std::function< MethodPtr(const std::set< std::string > &Sp, const std::set< std::string > &Sm, const std::set< std::string > &S, const std::set< std::string > &prefixes, const std::set< char > &alphabet, unsigned int n)> MethodConstructor
The type of the constructor the registerMethod must receive.
Helps to register a method in the factory.