Molassembler  1.0.0
Molecule graph and conformer library
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
Scine::Molassembler::Temple Namespace Reference

Template shorthands, optimizers and constexpr data types. More...

Namespaces

 Crtp
 Curiously recurring template pattern classes.
 
 Floating
 Floating-point comparison helpers.
 
 Functor
 Functors for transformations.
 
 Optimization
 Functionality common to multiple optimizers.
 
 Traits
 Compile-time reflective trait objects.
 
 Tuples
 template metaprogramming metafunctions on tuple types
 

Data Structures

struct  Binding
 Type that will own rvalues, reference lvalues. More...
 
struct  BoundedNodeTrie
 Data structure to store chains of discrete choices with an finite range of choices at each position. More...
 
class  MinimalCache
 A minimal wrapper around a map class with cache semantics. More...
 
class  Cache
 
class  Array
 
struct  Bitmask
 
class  Bitset
 Constexpr bitset class. More...
 
class  BTree
 A constexpr B-Tree. More...
 
class  DynamicArray
 
class  DynamicMap
 A constexpr associative container with reasonably fast key-based lookup. More...
 
class  DynamicSet
 Tree-based set. More...
 
class  JSF
 General class enabling the construction of a pattern of PRNGs by Bob Jenkins. More...
 
struct  Generator
 Provides a seeded engine instance. More...
 
class  Optional
 An Option monadic type. More...
 
class  Optional< T & >
 
struct  Pair
 Heterogeneous pair type. More...
 
class  UpperTriangularMatrix
 Strictly upper triangular matrix. More...
 
struct  Vector
 Constexpr three-dimensional vector math class. More...
 
class  Lbfgs
 LBFGS optimizer with optional boxing. More...
 
struct  NelderMead
 Nelder-Mead optimization. More...
 
struct  NewtonRaphson
 A very basic newton-raphson minimizer. More...
 
struct  SO3NelderMead
 Nelder-Mead optimization on SO(3) manifold. More...
 
struct  TrustRegionOptimizer
 Trust region Newton-Raphson minimizer with 2D subspace minimization. More...
 
struct  OrderedPair
 A class that imitates std::pair<T, U>, but whose template arguments are homogeneous and the stored values ordered (.first < .second). More...
 
class  Poset
 Data structure for partially ordered sets with support for gradual ordering discovery. More...
 
class  StrongIndex
 Type helper for creating strong index types that are type-level distinct from their fundamental types. More...
 
class  StrongIndexFlatMap
 
struct  TinyUnorderedSet
 An adapter class for std::vector that acts like an unordered set and stores its data in the underlying vector in an unordered fashion. More...
 
struct  TinySet
 An adapter class for std::vector that acts like an ordered set and stores its data in the underlying vector in order. More...
 

Typedefs

using JSF32na = JSF< uint32_t, 27, 17, 0 >
 
using JSF32nb = JSF< uint32_t, 9, 16, 0 >
 
using JSF32nc = JSF< uint32_t, 9, 24, 0 >
 
using JSF32nd = JSF< uint32_t, 10, 16, 0 >
 
using JSF32ne = JSF< uint32_t, 10, 24, 0 >
 
using JSF32nf = JSF< uint32_t, 11, 16, 0 >
 
using JSF32ng = JSF< uint32_t, 11, 24, 0 >
 
using JSF32nh = JSF< uint32_t, 25, 8, 0 >
 
using JSF32ni = JSF< uint32_t, 25, 16, 0 >
 
using JSF32nj = JSF< uint32_t, 26, 8, 0 >
 
using JSF32nk = JSF< uint32_t, 26, 16, 0 >
 
using JSF32nl = JSF< uint32_t, 26, 17, 0 >
 
using JSF32nm = JSF< uint32_t, 27, 16, 0 >
 
using JSF32ra = JSF< uint32_t, 3, 14, 24 >
 
using JSF32rb = JSF< uint32_t, 3, 25, 15 >
 
using JSF32rc = JSF< uint32_t, 4, 15, 24 >
 
using JSF32rd = JSF< uint32_t, 6, 16, 28 >
 
using JSF32re = JSF< uint32_t, 7, 16, 27 >
 
using JSF32rf = JSF< uint32_t, 8, 14, 3 >
 
using JSF32rg = JSF< uint32_t, 11, 16, 23 >
 
using JSF32rh = JSF< uint32_t, 12, 16, 22 >
 
using JSF32ri = JSF< uint32_t, 12, 17, 23 >
 
using JSF32rj = JSF< uint32_t, 13, 16, 22 >
 
using JSF32rk = JSF< uint32_t, 15, 25, 3 >
 
using JSF32rl = JSF< uint32_t, 16, 9, 3 >
 
using JSF32rm = JSF< uint32_t, 17, 9, 3 >
 
using JSF32rn = JSF< uint32_t, 17, 27, 7 >
 
using JSF32ro = JSF< uint32_t, 19, 7, 3 >
 
using JSF32rp = JSF< uint32_t, 23, 15, 11 >
 
using JSF32rq = JSF< uint32_t, 23, 16, 11 >
 
using JSF32rr = JSF< uint32_t, 23, 17, 11 >
 
using JSF32rs = JSF< uint32_t, 24, 3, 16 >
 
using JSF32rt = JSF< uint32_t, 24, 4, 16 >
 
using JSF32ru = JSF< uint32_t, 25, 14, 3 >
 
using JSF32rv = JSF< uint32_t, 27, 16, 6 >
 
using JSF32rw = JSF< uint32_t, 27, 16, 7 >
 
using JSF32n = JSF32na
 
using JSF32r = JSF32rq
 
using JSF32 = JSF32n
 
using JSF64na = JSF< uint64_t, 39, 11, 0 >
 
using JSF64ra = JSF< uint64_t, 7, 13, 37 >
 
using JSF64n = JSF64na
 
using JSF64r = JSF64ra
 
using JSF64 = JSF64r
 

Functions

template<class Container , typename T >
void addToContainer (Container &container, const T &value)
 Adds an lvalue element to a container by calling the container's insert or push_back member functions, if one of either exists.
 
template<class Container , typename T >
void addToContainer (Container &container, T &&value)
 Adds an rvalue to a container by calling the container's emplace or emplace_back member functions, if one of either exists.
 
template<class TargetContainer , class SourceContainer , class SizeModifierUnary = Functor::Identity>
void reserveIfPossible (TargetContainer &target, const SourceContainer &source, SizeModifierUnary &&sourceModifierUnary=SizeModifierUnary{})
 Rerves the space required in the target container if size can be determined from the source container. More...
 
template<typename T , typename... Tail>
constexpr auto makeArray (T head, Tail...tail) -> Array< T, 1+sizeof...(Tail)>
 
template<typename EnumType >
constexpr Bitmask< EnumType > make_bitmask (EnumType a)
 
template<template< typename, size_t > class ArrayType, typename T , size_t size, class UnaryFunction >
constexpr auto map (const ArrayType< T, size > &array, UnaryFunction &&function)
 Maps all elements of any array-like container with a unary function. More...
 
template<template< typename, size_t > class ArrayType, typename T , size_t size, class BinaryFunction >
constexpr T reduce (const ArrayType< T, size > &array, T init, BinaryFunction &&reduction)
 Reduce an array-like container with a binary function. More...
 
template<template< typename, size_t > class ArrayType, typename T , size_t size>
constexpr T sum (const ArrayType< T, size > &array)
 Sum up all elements of an array-like class. More...
 
template<template< typename, size_t > class ArrayType, typename T , size_t size>
PURITY_STRONG constexpr
std::enable_if_t
< std::is_arithmetic< T >
::value, ArrayType< T, size >> 
iota ()
 Iota for any array type.
 
template<template< typename, size_t > class ArrayType, typename T , size_t begin, size_t end>
constexpr ArrayType< T,(end-begin)> range ()
 Range for any array type.
 
template<template< typename, size_t > class ArrayType, typename T , size_t N1, size_t N2>
constexpr ArrayType< T, N1+N2 > arrayConcatenate (const ArrayType< T, N1 > &a, const ArrayType< T, N2 > &b)
 Concatenation of two instances of an array-like class.
 
template<template< typename, size_t > class ArrayType, typename T , size_t N, size_t... Ns>
constexpr auto arrayConcatenate (const ArrayType< T, N > &startingArray, const ArrayType< T, Ns > &...remainingArrays)
 Variadic concatenation of multiple array-like class instances.
 
template<template< typename, size_t > class ArrayType, typename T , size_t size>
constexpr bool arraysEqual (const ArrayType< T, size > &a, const ArrayType< T, size > &b)
 Array-like container lexicographic equality comparaotr. More...
 
template<template< typename, size_t > class ArrayType, typename T , size_t sizeA, size_t sizeB>
constexpr std::enable_if_t
< sizeA==sizeB, bool > 
arraysLess (const ArrayType< T, sizeA > &a, const ArrayType< T, sizeB > &b)
 Lexicographical comparison for two instances of an array-like class. More...
 
template<template< typename, std::size_t > class ArrayType, typename T , std::size_t N, class BinaryFunction >
constexpr DynamicArray
< DynamicArray< T, N >, N > 
groupByEquality (const ArrayType< T, N > &data, BinaryFunction &&equalityComparator)
 
template<typename T , std::size_t N>
DynamicArray< T, N > merge (const DynamicArray< T, N > &a, const DynamicArray< T, N > &b)
 
template<size_t nItems, typename T , template< typename, size_t > class ArrayType, class LessThanPredicate = std::less<T>, class EqualityPredicate = std::equal_to<T>>
constexpr DynamicSet< T,
nItems, LessThanPredicate > 
makeDynamicSet (const ArrayType< T, nItems > &array)
 Helper function to create a DynamicSet specifying only the maximum size.
 
template<typename T >
constexpr bool testLogicalOperators (const T &a, const T &b)
 For any two types, check consistency of their logical operators.
 
template<typename T >
constexpr bool testOperatorSmaller (const T &a, const T &b)
 Limited variant of testLogicalOperators.
 
template<class ContainerType >
constexpr Traits::getValueType
< ContainerType > 
sum (const ContainerType &container)
 Summation with zero-initialization. More...
 
template<class ContainerType >
constexpr std::enable_if_t
< std::is_floating_point
< Traits::getValueType
< ContainerType > >::value,
Traits::getValueType
< ContainerType >> 
average (const ContainerType &container)
 
template<class ContainerType >
constexpr std::enable_if_t
< !std::is_floating_point
< Traits::getValueType
< ContainerType > >::value,
double > 
average (const ContainerType &container)
 
template<class ContainerType >
constexpr std::enable_if_t
< std::is_floating_point
< Traits::getValueType
< ContainerType > >::value,
Traits::getValueType
< ContainerType >> 
geometricMean (const ContainerType &container)
 Geometric average of all values in a container. More...
 
template<class ContainerType , typename FloatingType >
constexpr std::enable_if_t
< std::is_floating_point
< FloatingType >::value,
FloatingType > 
stddev (const ContainerType &container, const FloatingType averageValue)
 Calculate the standard deviation of a container with a known average. More...
 
template<class ContainerType >
constexpr auto stddev (const ContainerType &container)
 
template<class ContainerType >
constexpr auto min (const ContainerType &container)
 Composable min_element function. Returns the smallest value of any container. More...
 
template<class ContainerType >
constexpr auto max (const ContainerType &container)
 Composable max function. Returns the smallest value of any container. More...
 
template<typename T , size_t size>
std::array< T, size > toSTL (const Array< T, size > &array)
 Converts an Array into a std::array.
 
template<typename T , size_t size>
std::vector< T > toSTL (const DynamicArray< T, size > &dynamicArray)
 Converts a DynamicArray into a std::vector.
 
template<typename T , size_t size>
std::set< T > toSTL (const DynamicSet< T, size > &dynamicSet)
 Converts a DynamicSet into a std::set.
 
template<template< typename, size_t > class ArrayType, typename ValueType , size_t size>
constexpr
UpperTriangularMatrix
< ValueType, size > 
makeUpperTriangularMatrix (const ArrayType< ValueType, size > &data)
 Helper constructing function that deduces the required type signature.
 
PURITY_WEAK constexpr double angle (const Vector &a, const Vector &b)
 Constexpr binary angle in radians calculation. More...
 
template<class Container , std::enable_if_t< Traits::hasSize< Container >::value, int > = 0>
auto size (const Container &container)
 
template<class UnaryFunction , typename T , template< typename, typename...> class Container, template< typename > class... Dependents>
auto map_stl (const Container< T, Dependents< T >...> &container, UnaryFunction &&function)
 
template<template< typename, std::size_t > class ArrayType, typename T , std::size_t size, class UnaryFunction >
auto map_stl (const ArrayType< T, size > &container, UnaryFunction &&function)
 
template<template< typename, typename > class PairType, typename T , class UnaryFunction >
auto map_stl (const PairType< T, T > &pair, UnaryFunction &&function)
 
template<class Container , class UnaryFunction >
auto map (Container &&container, UnaryFunction &&function)
 Maps all values of a container using a unary function. Returns a vector. More...
 
template<class Pairlike , typename Unary >
auto mapHomogeneousPairlike (Pairlike p, Unary &&f)
 
template<class Container , class Callable >
void forEach (const Container &container, Callable &&callable)
 Apply a callable for all values of a container.
 
template<class Container , typename ComparisonFunction , typename MappingFunction >
Container::const_iterator select (const Container &container, ComparisonFunction &&comparator, MappingFunction &&mapFunction)
 Select a value from a container. More...
 
template<class Container , typename T , class BinaryFunction >
accumulate (const Container &container, T init, BinaryFunction &&reductionFunction)
 Accumulate shorthand. More...
 
template<class Container , class UnaryPredicate = Functor::Identity>
bool all_of (const Container &container, UnaryPredicate &&predicate=UnaryPredicate{})
 all_of shorthand More...
 
template<class Container , class UnaryPredicate = Functor::Identity>
bool any_of (const Container &container, UnaryPredicate &&predicate=UnaryPredicate{})
 any_of shorthand More...
 
template<class Container >
void sort (Container &container)
 Calls std::sort on a container.
 
template<class Container , typename Comparator >
void sort (Container &container, Comparator &&comparator)
 Calls std::sort with a custom comparator on a container.
 
template<class Container >
void reverse (Container &container)
 In-place reversal.
 
template<class Container , typename T >
void remove (Container &container, const T &value)
 Applies erase-remove idiom in-place to container.
 
template<class Container , class UnaryFunction >
void remove_if (Container &container, UnaryFunction &&predicate)
 Applies erase-remove idiom in-place to container with a predicate function.
 
template<class Container , class Predicate >
Container copy_if (const Container &container, Predicate &&predicate)
 
template<class Container >
Container sorted (Container container)
 
template<class Container , typename Comparator >
Container sorted (Container container, Comparator &&comparator)
 
template<class Container , typename T >
auto find (const Container &container, const T &needle)
 std::find shorthand
 
template<class Container , typename UnaryPredicate >
auto find_if (const Container &container, UnaryPredicate &&predicate)
 std::find_if shorthand
 
template<typename T >
std::vector< T > iota (unsigned upperBound)
 vector iota shorthand
 
template<class Container >
auto makeContainsPredicate (const Container &container)
 Creates a predicate that uses std::find for the container's value type.
 
template<class Container , class UnaryFunction >
std::vector< std::vector
< Traits::getValueType
< Container > >> 
groupByMapping (const Container &container, UnaryFunction &&function)
 
template<class Container , class BinaryFunction >
std::vector< std::vector
< Traits::getValueType
< Container > >> 
groupByEquality (const Container &container, BinaryFunction &&compareEqual)
 
template<typename HT , typename TT , typename Function >
auto invoke (Function &&function, const boost::tuples::cons< HT, TT > &tuple)
 Invokes a function with all values in a given boost tuple.
 
template<typename Function , typename TupleType , std::enable_if_t< Detail::isTupleCallable< Function, TupleType >::value, int > = 0>
auto invoke (Function &&function, const TupleType &tuple)
 If a callable can be called by unpacking a supplied tuple of arguments, the tuple is called. More...
 
template<typename Fn , typename... Args, std::enable_if_t< !(sizeof...(Args)==1 &&Detail::isTupleCallable< Fn, Args...>::value)&&std::is_member_pointer< std::decay_t< Fn >>{}, int > = 0>
decltype(auto) constexpr invoke (Fn &&f, Args &&...args) noexcept(noexcept(std::mem_fn(f)(std::forward< Args >(args)...)))
 If a callable is a member function pointer, invoke it with forwarded arguments. More...
 
template<typename Functor >
auto make_tuple_callable (Functor &&functor)
 
template<typename Derived >
bool positiveDefinite (const Eigen::MatrixBase< Derived > &matrix)
 Determine whether a matrix is positive definite. More...
 
template<typename Derived >
bool positiveSemidefinite (const Eigen::MatrixBase< Derived > &matrix)
 Determine whether a matrix is positive semidefinite. More...
 
template<class Container >
std::size_t permutationIndex (const Container &container)
 Calculate the index of permutation of elements in a container. More...
 
template<class Container >
bool next_permutation (Container &container)
 Calls std::next_permutation.
 
template<class Container >
bool prev_permutation (Container &container)
 Calls std::prev_permutation.
 
template<class Container >
bool nextCombinationPermutation (Container &toPermute, const Container &limits)
 For when you have to implement variable-depth for loops, each with different limits. More...
 
template<typename T , template< typename > class Comparator, template< typename >class Allocator>
std::set< T, Comparator< T >
, Allocator< T > > 
set_intersection (const std::set< T, Comparator< T >, Allocator< T >> &a, const std::set< T, Comparator< T >, Allocator< T >> &b)
 
template<typename T , template< typename > class Comparator, template< typename >class Allocator>
std::set< T, Comparator< T >
, Allocator< T > > 
set_union (const std::set< T, Comparator< T >, Allocator< T >> &a, const std::set< T, Comparator< T >, Allocator< T >> &b)
 
template<typename T , template< typename > class Comparator, template< typename >class Allocator>
std::set< T, Comparator< T >
, Allocator< T > > 
set_symmetric_difference (const std::set< T, Comparator< T >, Allocator< T >> &a, const std::set< T, Comparator< T >, Allocator< T >> &b)
 
std::vector< std::string > split (const std::string &s, char delimiter)
 
template<class Container >
std::enable_if_t
< !std::is_same
< Traits::getValueType
< Container >, std::string >
::value, std::string > 
condense (const Container &container, const std::string &joiningChar=",")
 
template<class Container >
std::enable_if_t< std::is_same
< Traits::getValueType
< Container >, std::string >
::value, std::string > 
condense (const Container &container, const std::string &joiningChar=",")
 
std::string stringify (const std::string &x)
 
template<typename T >
std::string stringify (const boost::optional< T > &optional)
 
template<typename T >
std::enable_if_t< std::is_enum
< T >::value, std::string > 
stringify (const T &enumType)
 
template<typename T >
std::enable_if_t
< std::is_arithmetic< T >
::value, std::string > 
stringify (const T &a)
 
template<typename T , typename U >
std::string stringify (const std::pair< T, U > &pair)
 
template<typename T >
std::string stringify (const std::vector< T > &vec)
 
template<typename T , std::size_t size>
std::string stringify (const std::array< T, size > &arr)
 
template<typename T >
std::string stringify (const std::set< T > &set)
 
template<typename T >
std::string stringify (const std::unordered_set< T > &set)
 
template<typename T >
std::string stringify (const std::list< T > &list)
 
template<typename T >
std::string stringify (const std::forward_list< T > &list)
 
template<typename T , typename U >
std::string stringify (const std::map< T, U > &map)
 
template<typename T , typename U >
std::string stringify (const std::unordered_map< T, U > &map)
 
template<typename... Ts>
std::string stringify (const std::tuple< Ts...> &tuple)
 
template<typename T >
std::enable_if_t
< Detail::isMapType< T >
::value, std::string > 
stringifyMap (const T &map)
 
template<typename T >
std::string stringifyContainer (const T &container)
 
template<typename Container , class ElementStringifier >
std::string stringifyContainer (const Container &container, ElementStringifier &&stringifier)
 
template<typename TupleType , size_t... Inds>
std::string stringifyTuple (const TupleType &tuple, std::index_sequence< Inds...>)
 
template<typename Tag , typename T >
std::size_t hash_value (const StrongIndex< Tag, T > &v)
 Hash support function for strong index types. More...
 
template<class UnorderedSetContainer >
UnorderedSetContainer unorderedSetSymmetricDifference (const UnorderedSetContainer &a, const UnorderedSetContainer &b)
 
template<class UnorderedSetContainer >
UnorderedSetContainer unorderedSetDifference (const UnorderedSetContainer &a, const UnorderedSetContainer &b)
 
template<class UnorderedSetContainer >
UnorderedSetContainer unorderedSetIntersection (const UnorderedSetContainer &a, const UnorderedSetContainer &b)
 
template<class UnorderedSetContainer >
UnorderedSetContainer unorderedSetUnion (const UnorderedSetContainer &a, const UnorderedSetContainer &b)
 

Detailed Description

Template shorthands, optimizers and constexpr data types.

Function Documentation

template<class Container , typename T , class BinaryFunction >
T Scine::Molassembler::Temple::accumulate ( const Container &  container,
init,
BinaryFunction &&  reductionFunction 
)

Accumulate shorthand.

Complexity \(\Theta(N)\)

template<class Container , class UnaryPredicate = Functor::Identity>
bool Scine::Molassembler::Temple::all_of ( const Container &  container,
UnaryPredicate &&  predicate = UnaryPredicate {} 
)

all_of shorthand

Complexity \(O(N)\)

PURITY_WEAK constexpr double Scine::Molassembler::Temple::angle ( const Vector &  a,
const Vector &  b 
)

Constexpr binary angle in radians calculation.

Complexity \(\Theta(1)\)

template<class Container , class UnaryPredicate = Functor::Identity>
bool Scine::Molassembler::Temple::any_of ( const Container &  container,
UnaryPredicate &&  predicate = UnaryPredicate {} 
)

any_of shorthand

Complexity \(O(N)\)

template<template< typename, size_t > class ArrayType, typename T , size_t size>
constexpr bool Scine::Molassembler::Temple::arraysEqual ( const ArrayType< T, size > &  a,
const ArrayType< T, size > &  b 
)

Array-like container lexicographic equality comparaotr.

Complexity \(O(N)\)

template<template< typename, size_t > class ArrayType, typename T , size_t sizeA, size_t sizeB>
constexpr std::enable_if_t< sizeA == sizeB, bool> Scine::Molassembler::Temple::arraysLess ( const ArrayType< T, sizeA > &  a,
const ArrayType< T, sizeB > &  b 
)

Lexicographical comparison for two instances of an array-like class.

Array-like container ordering comparator specialization for containers of equal size.

Complexity \(O(N)\)

template<class ContainerType >
constexpr std::enable_if_t< std::is_floating_point<Traits::getValueType<ContainerType> >::value, Traits::getValueType<ContainerType>> Scine::Molassembler::Temple::average ( const ContainerType &  container)

Composable average function. Returns the average (always as a double) of any basic data type. An assert checks whether the function receives an empty container.

Container must implement begin, end and size members, the contained type must have operator+ and be convertible to double.

Complexity \(\Theta(N)\)

template<class ContainerType >
constexpr std::enable_if_t< !std::is_floating_point<Traits::getValueType<ContainerType> >::value, double> Scine::Molassembler::Temple::average ( const ContainerType &  container)

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

template<class Container >
std::enable_if_t< !std::is_same< Traits::getValueType<Container>, std::string >::value, std::string> Scine::Molassembler::Temple::condense ( const Container &  container,
const std::string &  joiningChar = "," 
)

Condenses an iterable container into a comma-separated string of string representations of its contents. Requires container iterators to satisfy ForwardIterators and the contained type to be a valid template argument for std::to_string, which in essence means this works only for (a few) STL containers and (most) built-in datatypes.

template<class ContainerType >
constexpr std::enable_if_t< std::is_floating_point<Traits::getValueType<ContainerType> >::value, Traits::getValueType<ContainerType>> Scine::Molassembler::Temple::geometricMean ( const ContainerType &  container)

Geometric average of all values in a container.

Parameters
containerComplexity \(\Theta(N)\)
template<class Container , class BinaryFunction >
std::vector< std::vector< Traits::getValueType<Container> >> Scine::Molassembler::Temple::groupByEquality ( const Container &  container,
BinaryFunction &&  compareEqual 
)

Split a container's values by a binary comparison function. Returns a ragged 2D vector.

Note
Requires that the equality comparison is symmetric and transitive!
template<template< typename, std::size_t > class ArrayType, typename T , std::size_t N, class BinaryFunction >
constexpr DynamicArray< DynamicArray<T, N>, N> Scine::Molassembler::Temple::groupByEquality ( const ArrayType< T, N > &  data,
BinaryFunction &&  equalityComparator 
)

Groups data by equality.

template<class Container , class UnaryFunction >
std::vector< std::vector< Traits::getValueType<Container> >> Scine::Molassembler::Temple::groupByMapping ( const Container &  container,
UnaryFunction &&  function 
)

Split a container's values by a mapping function whose return value elements are compared with. Matching mapped values are grouped and returned in a ragged 2D vector.

template<typename Tag , typename T >
std::size_t Scine::Molassembler::Temple::hash_value ( const StrongIndex< Tag, T > &  v)

Hash support function for strong index types.

Allows the use of strong index types in unordered STL containers like so:

struct foo_tag;
using Foo = StrongIndex<foo_tag, unsigned>;
using UnorderedSetType = std::unordered_set<Foo, boost::hash<Foo>>;
template<typename Function , typename TupleType , std::enable_if_t< Detail::isTupleCallable< Function, TupleType >::value, int > = 0>
auto Scine::Molassembler::Temple::invoke ( Function &&  function,
const TupleType &  tuple 
)

If a callable can be called by unpacking a supplied tuple of arguments, the tuple is called.

Note
This function is SFINAE-friendly in that if TupleType isn't tuple-like or the function does not accept the unpacked arguments, this will only cause a substitution failure and not a compilation error.
template<typename Fn , typename... Args, std::enable_if_t< !(sizeof...(Args)==1 &&Detail::isTupleCallable< Fn, Args...>::value)&&std::is_member_pointer< std::decay_t< Fn >>{}, int > = 0>
decltype(auto) constexpr Scine::Molassembler::Temple::invoke ( Fn &&  f,
Args &&...  args 
)
noexcept

If a callable is a member function pointer, invoke it with forwarded arguments.

If a callable is not a member pointer, invoke it with forwarded arguments.

Note
This is the suggested C++17 std::invoke reference implementation from N4169, except with the additional SFINAE constraint that Fn may not be callable by unpacking a tuple-like singular argument in the parameter pack.
template<template< typename, size_t > class ArrayType, typename T , size_t size, class UnaryFunction >
constexpr auto Scine::Molassembler::Temple::map ( const ArrayType< T, size > &  array,
UnaryFunction &&  function 
)

Maps all elements of any array-like container with a unary function.

Complexity \(\Theta(N)\)

template<class Container , class UnaryFunction >
auto Scine::Molassembler::Temple::map ( Container &&  container,
UnaryFunction &&  function 
)

Maps all values of a container using a unary function. Returns a vector.

Complexity \(\Theta(N)\)

template<class UnaryFunction , typename T , template< typename, typename...> class Container, template< typename > class... Dependents>
auto Scine::Molassembler::Temple::map_stl ( const Container< T, Dependents< T >...> &  container,
UnaryFunction &&  function 
)

Maps the values in a container using a unary function.

Requires:

  • Container must have template parameters of the form: Container<ValueType, A<ValueType>, B<ValueType>, ...>, where zero dependent template parameters (A, B, ...) are also acceptable
  • Any dependent template parameters (A, B, ..) must be instantiable for the function return type.
  • Container implements begin and end forward iterators.
  • Container implements either insert, emplace, push_back or emplace_back
  • UnaryFunction must be unary and callable with Container's ValueType

Besides custom containers that fulfill the required criteria, this function should be valid for the following STL containers:

  • vector
  • deque
  • list, forward_list
  • set, multiset, unordered_set, unordered_multiset

Notably absent: array, map, multimap, unordered_multimap (some are covered by specializations below!)

Complexity \(\Theta(N)\)

template<template< typename, std::size_t > class ArrayType, typename T , std::size_t size, class UnaryFunction >
auto Scine::Molassembler::Temple::map_stl ( const ArrayType< T, size > &  container,
UnaryFunction &&  function 
)

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

template<template< typename, typename > class PairType, typename T , class UnaryFunction >
auto Scine::Molassembler::Temple::map_stl ( const PairType< T, T > &  pair,
UnaryFunction &&  function 
)

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

template<class ContainerType >
constexpr auto Scine::Molassembler::Temple::max ( const ContainerType &  container)

Composable max function. Returns the smallest value of any container.

Container must implement begin, end iterators. The iterators must be copy-assignable. The contained type must implement operator <.

Complexity \(\Theta(N)\)

template<class ContainerType >
constexpr auto Scine::Molassembler::Temple::min ( const ContainerType &  container)

Composable min_element function. Returns the smallest value of any container.

Container must implement begin, end iterators. The iterators must be copy-assignable. The contained type must implement operator <.

Complexity \(\Theta(N)\)

template<class Container >
bool Scine::Molassembler::Temple::nextCombinationPermutation ( Container &  toPermute,
const Container &  limits 
)

For when you have to implement variable-depth for loops, each with different limits.

Increments a container containing indices for each depth according to a const container containing the limits for each. Limits are exclusive!

E.g. for the limits 232, increments through the sequence 000 -> 001 -> 010 -> 011 -> 020 -> 021 -> 100 -> 101 -> 110 -> 111 -> 120 ...

Note
Requires that Container implements operator[](U), where U is implicitly convertible from unsigned.

Complexity \(\Theta(N)\)

template<class Container >
std::size_t Scine::Molassembler::Temple::permutationIndex ( const Container &  container)

Calculate the index of permutation of elements in a container.

Complexity \(\Theta(N^2)\)

Note
Requires that Container implements operator[](U), where U is implicitly convertible from std::size_t.
template<typename Derived >
bool Scine::Molassembler::Temple::positiveDefinite ( const Eigen::MatrixBase< Derived > &  matrix)

Determine whether a matrix is positive definite.

Precondition
matrix must be hermitian
Returns
template<typename Derived >
bool Scine::Molassembler::Temple::positiveSemidefinite ( const Eigen::MatrixBase< Derived > &  matrix)

Determine whether a matrix is positive semidefinite.

Precondition
matrix must be hermitian
Returns
template<template< typename, size_t > class ArrayType, typename T , size_t size, class BinaryFunction >
constexpr T Scine::Molassembler::Temple::reduce ( const ArrayType< T, size > &  array,
init,
BinaryFunction &&  reduction 
)

Reduce an array-like container with a binary function.

Reduction of any array-like container with a binary function. This function is somewhat restricted, in that the type of the reduction must be identical to the value type of the array-like container. The binary function must have the signature T(const T& reduction, const T& element).

Complexity \(\Theta(N)\)

template<class TargetContainer , class SourceContainer , class SizeModifierUnary = Functor::Identity>
void Scine::Molassembler::Temple::reserveIfPossible ( TargetContainer &  target,
const SourceContainer &  source,
SizeModifierUnary &&  sourceModifierUnary = SizeModifierUnary {} 
)

Rerves the space required in the target container if size can be determined from the source container.

If the source container implements a size() const member and the target container implements a reserve() member, the target container reserves space according to the result of the source container size() call modified by the sourceModifierUnary.

Template Parameters
TargetContainerthe Container type in which space should be reserved
SourceContainerThe Container type whose size is used to calculate required size of the target
SizeModifierUnaryA unary callable type that transforms the type returned by SourceContainer.size(), if applicable
Parameters
targetThe container in which space should be reserved
sourceThe container whose size should determined for reservation in the target
sourceModifierUnaryA unary function that transforms the size determined from the source container. This is for if you expect to generate more or less elements in the target container.
template<class Container , typename ComparisonFunction , typename MappingFunction >
Container::const_iterator Scine::Molassembler::Temple::select ( const Container &  container,
ComparisonFunction &&  comparator,
MappingFunction &&  mapFunction 
)

Select a value from a container.

Template Parameters
ContainerContainer type
ComparisonFunctionComparison between members of the value
MappingFunctionMap function from ValueType to ComparableType
Parameters
containercontainer with values
comparatorComparator instance
mapFunctionMap function
Returns
An iterator to the value whose mapped value is smallest value according to the comparator
template<class ContainerType , typename FloatingType >
constexpr std::enable_if_t< std::is_floating_point<FloatingType>::value, FloatingType> Scine::Molassembler::Temple::stddev ( const ContainerType &  container,
const FloatingType  averageValue 
)

Calculate the standard deviation of a container with a known average.

Complexity \(\Theta(N)\)

template<class ContainerType >
constexpr auto Scine::Molassembler::Temple::stddev ( const ContainerType &  container)

Calculates standard deviation without an existing average value

Container must implement begin, end and size members, the contained type must have operator+.

Complexity \(\Theta(2N)\)

template<class ContainerType >
constexpr Traits::getValueType<ContainerType> Scine::Molassembler::Temple::sum ( const ContainerType &  container)

Summation with zero-initialization.

Composable sum function. Returns the type the container contains, assuming monadic behavior on operator + (value_type + value_type = value_type). Container must implement begin and end members.

Complexity \(\Theta(N)\)

template<template< typename, size_t > class ArrayType, typename T , size_t size>
constexpr T Scine::Molassembler::Temple::sum ( const ArrayType< T, size > &  array)

Sum up all elements of an array-like class.

Summation of all elements of an array-like class. Requires operator + and zero-initialization of the contained type

Complexity \(\Theta(N)\)