CGRA-ME
Classes | Namespaces | Functions
Collections.h File Reference
#include <algorithm>
#include <numeric>
#include <utility>
#include <vector>

Go to the source code of this file.

Classes

struct  iterator_range< BIter, EIter >
 
struct  tuple_get_range< get_index, Range >
 
struct  tuple_get_range< get_index, Range >::iterator< Iter >
 
struct  SingleItemImmutableSet< VertexID >
 
struct  StandardMapMaker< Map, InitialParams >
 
struct  StandardSetMaker< Set, InitialParams >
 
struct  VectorMap< IndexMap, Key, MappedType >
 Provides some standard map operations, with a fixed size. More...
 
struct  VectorMap< IndexMap, Key, MappedType >::const_iterator
 
struct  VectorMap< IndexMap, Key, MappedType >::iterator
 
struct  VectorSet< IndexMap, Value >
 Provides some standard set operations, with a fixed size. More...
 
struct  VectorSet< IndexMap, Value >::const_iterator
 
struct  VectorSet< IndexMap, Value >::iterator
 
struct  VectorMapMaker< InitialParams >
 
struct  VectorSetMaker< InitialParams >
 
struct  detail::shift_in_printer
 

Namespaces

 detail
 

Functions

template<typename BIter , typename EIter = BIter>
auto make_iterator_range (BIter &&b, EIter &&e)
 
template<typename BIter , typename EIter = BIter>
auto make_iterator_range (const std::pair< BIter, EIter > &p)
 
template<typename Range , typename = decltype(begin(std::declval<Range>()))>
auto make_iterator_range (const Range &r)
 
template<int get_index, typename Range >
tuple_get_range< get_index, Range > make_tuple_get_range (Range &&r)
 
template<typename Range >
tuple_get_range< 1, Range > make_second_of_pair_range (Range &&r)
 
template<typename Range >
tuple_get_range< 0, Range > make_first_of_pair_range (Range &&r)
 
template<typename Range >
auto reversed (Range &r)
 
template<typename VertexID >
auto cbegin (const SingleItemImmutableSet< VertexID > &siis)
 
template<typename VertexID >
auto cend (const SingleItemImmutableSet< VertexID > &siis)
 
template<typename VertexID >
auto begin (const SingleItemImmutableSet< VertexID > &siis)
 
template<typename VertexID >
auto end (const SingleItemImmutableSet< VertexID > &siis)
 
template<typename VertexID >
auto begin (SingleItemImmutableSet< VertexID > &siis)
 
template<typename VertexID >
auto end (SingleItemImmutableSet< VertexID > &siis)
 
template<typename VertexID >
SingleItemImmutableSet< VertexID > singleItemSet (VertexID v)
 
template<typename COLLECTION , typename UNARY_PREDICATE >
auto filter_collection (const COLLECTION &base_container, UNARY_PREDICATE &&filter)
 
template<typename R1 , typename R2 >
bool are_ranges_same (const R1 &r1, const R2 &r2)
 
template<typename ASSOCIATIVE_COLLECTION , typename KEY , typename DEFAULT_VALUE >
auto value_for_key_or (ASSOCIATIVE_COLLECTION &assoc_collection, const KEY &key, DEFAULT_VALUE &default_value) -> std::conditional_t< std::is_lvalue_reference< DEFAULT_VALUE >::value, decltype(false ? default_value :assoc_collection.find(key) ->second)&, decltype(false ? default_value :assoc_collection.find(key) ->second) >
 
template<typename ASSOCIATIVE_COLLECTION , typename KEY , typename VALUE >
auto insert_or_assign (ASSOCIATIVE_COLLECTION &assoc_collection, KEY &&key, VALUE &&value)
 
template<typename InputIt , typename ForwardIt , typename BinaryPredicate >
std::pair< InputIt, ForwardIt > find_first_of_and_matching (InputIt first, InputIt last, ForwardIt s_first, ForwardIt s_last, BinaryPredicate p)
 
template<typename InputIt , typename ForwardIt >
auto find_first_of_and_matching (InputIt first, InputIt last, ForwardIt s_first, ForwardIt s_last)
 
template<typename Range1 , typename Range2 , typename BinaryPredicate >
auto find_first_of_and_matching (Range1 &&r1, Range2 &r2, BinaryPredicate p)
 
template<typename Range1 , typename Range2 >
auto find_first_of_and_matching (Range1 &&r1, Range2 &r2)
 
template<typename CONTAINER , typename OSTREAM , typename PRINTER = detail::shift_in_printer, typename T1 , typename T2 , typename T3 >
void print_container (OSTREAM &&os, const CONTAINER &c, const T1 &element_separator, const T2 &container_prefix, const T3 &container_suffix, PRINTER &&element_printer=PRINTER{})
 
template<typename CONTAINER , typename OSTREAM , typename PRINTER = detail::shift_in_printer>
void print_container (OSTREAM &&os, const CONTAINER &c, PRINTER &&element_printer=PRINTER{})
 
template<typename ASSOC_CONTAINER , typename OSTREAM , typename KEY_PRINTER = detail::shift_in_printer, typename VALUE_PRINTER = detail::shift_in_printer, typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 >
void print_assoc_container (OSTREAM &&os, const ASSOC_CONTAINER &c, const T1 &element_separator, const T2 &key_value_separator, const T3 &element_prefix, const T4 &element_suffix, const T5 &container_prefix, const T6 &container_suffix, KEY_PRINTER &&value_printer=KEY_PRINTER{}, VALUE_PRINTER &&key_printer=VALUE_PRINTER{})
 
template<typename ASSOC_CONTAINER , typename OSTREAM , typename KEY_PRINTER = detail::shift_in_printer, typename VALUE_PRINTER = detail::shift_in_printer>
void print_assoc_container (OSTREAM &&os, const ASSOC_CONTAINER &c, KEY_PRINTER &&value_printer=KEY_PRINTER{}, VALUE_PRINTER &&key_printer=VALUE_PRINTER{})
 
template<typename T = std::vector<int>>
make_zero_to_n_minus_one_list (std::ptrdiff_t n)
 

Function Documentation

◆ are_ranges_same()

template<typename R1 , typename R2 >
bool are_ranges_same ( const R1 &  r1,
const R2 &  r2 
)

Do the ranges r1 and r2 have the same elements, and are they the same size? Uses operator==.

Definition at line 328 of file Collections.h.

◆ begin() [1/2]

template<typename VertexID >
auto begin ( const SingleItemImmutableSet< VertexID > &  siis)

Definition at line 137 of file Collections.h.

◆ begin() [2/2]

template<typename VertexID >
auto begin ( SingleItemImmutableSet< VertexID > &  siis)

Definition at line 139 of file Collections.h.

◆ cbegin()

template<typename VertexID >
auto cbegin ( const SingleItemImmutableSet< VertexID > &  siis)

Definition at line 135 of file Collections.h.

◆ cend()

template<typename VertexID >
auto cend ( const SingleItemImmutableSet< VertexID > &  siis)

Definition at line 136 of file Collections.h.

◆ end() [1/2]

template<typename VertexID >
auto end ( const SingleItemImmutableSet< VertexID > &  siis)

Definition at line 138 of file Collections.h.

◆ end() [2/2]

template<typename VertexID >
auto end ( SingleItemImmutableSet< VertexID > &  siis)

Definition at line 140 of file Collections.h.

◆ filter_collection()

template<typename COLLECTION , typename UNARY_PREDICATE >
auto filter_collection ( const COLLECTION &  base_container,
UNARY_PREDICATE &&  filter 
)

Copies elements from base_container to a default-constructed instance of COLLECTION. Only copies element where filter returns a truth value.

Definition at line 317 of file Collections.h.

◆ find_first_of_and_matching() [1/4]

template<typename InputIt , typename ForwardIt >
auto find_first_of_and_matching ( InputIt  first,
InputIt  last,
ForwardIt  s_first,
ForwardIt  s_last 
)

Definition at line 390 of file Collections.h.

◆ find_first_of_and_matching() [2/4]

template<typename InputIt , typename ForwardIt , typename BinaryPredicate >
std::pair<InputIt,ForwardIt> find_first_of_and_matching ( InputIt  first,
InputIt  last,
ForwardIt  s_first,
ForwardIt  s_last,
BinaryPredicate  p 
)

Same as std::find_first_of, but returns a pair of iterators, one from each range. Modified from https://en.cppreference.com/w/cpp/algorithm/find_first_of

Definition at line 373 of file Collections.h.

◆ find_first_of_and_matching() [3/4]

template<typename Range1 , typename Range2 >
auto find_first_of_and_matching ( Range1 &&  r1,
Range2 &  r2 
)

Definition at line 409 of file Collections.h.

◆ find_first_of_and_matching() [4/4]

template<typename Range1 , typename Range2 , typename BinaryPredicate >
auto find_first_of_and_matching ( Range1 &&  r1,
Range2 &  r2,
BinaryPredicate  p 
)

Definition at line 402 of file Collections.h.

◆ insert_or_assign()

template<typename ASSOCIATIVE_COLLECTION , typename KEY , typename VALUE >
auto insert_or_assign ( ASSOCIATIVE_COLLECTION &  assoc_collection,
KEY &&  key,
VALUE &&  value 
)

C++17 member function.

Definition at line 358 of file Collections.h.

◆ make_first_of_pair_range()

template<typename Range >
tuple_get_range<0, Range> make_first_of_pair_range ( Range &&  r)

Definition at line 111 of file Collections.h.

◆ make_iterator_range() [1/3]

template<typename BIter , typename EIter = BIter>
auto make_iterator_range ( BIter &&  b,
EIter &&  e 
)

Definition at line 48 of file Collections.h.

◆ make_iterator_range() [2/3]

template<typename Range , typename = decltype(begin(std::declval<Range>()))>
auto make_iterator_range ( const Range &  r)

Definition at line 60 of file Collections.h.

◆ make_iterator_range() [3/3]

template<typename BIter , typename EIter = BIter>
auto make_iterator_range ( const std::pair< BIter, EIter > &  p)

Definition at line 54 of file Collections.h.

◆ make_second_of_pair_range()

template<typename Range >
tuple_get_range<1, Range> make_second_of_pair_range ( Range &&  r)

Definition at line 106 of file Collections.h.

◆ make_tuple_get_range()

template<int get_index, typename Range >
tuple_get_range<get_index, Range> make_tuple_get_range ( Range &&  r)

Definition at line 101 of file Collections.h.

◆ make_zero_to_n_minus_one_list()

template<typename T = std::vector<int>>
T make_zero_to_n_minus_one_list ( std::ptrdiff_t  n)

Definition at line 542 of file Collections.h.

◆ print_assoc_container() [1/2]

template<typename ASSOC_CONTAINER , typename OSTREAM , typename KEY_PRINTER = detail::shift_in_printer, typename VALUE_PRINTER = detail::shift_in_printer, typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 >
void print_assoc_container ( OSTREAM &&  os,
const ASSOC_CONTAINER &  c,
const T1 &  element_separator,
const T2 &  key_value_separator,
const T3 &  element_prefix,
const T4 &  element_suffix,
const T5 &  container_prefix,
const T6 &  container_suffix,
KEY_PRINTER &&  value_printer = KEY_PRINTER{},
VALUE_PRINTER &&  key_printer = VALUE_PRINTER{} 
)

Prints an associative container to os, using operator<<. Defaults to printing elements using operator<<, but this can be overridden with the 'printer' arguments. Value type must model std::pair. Printing is of the form: container_prefix element_prefix key_printer(os,key1) key_value_separator value_printer(os,val1) element_suffix element_separator ... container_suffix

Definition at line 488 of file Collections.h.

◆ print_assoc_container() [2/2]

template<typename ASSOC_CONTAINER , typename OSTREAM , typename KEY_PRINTER = detail::shift_in_printer, typename VALUE_PRINTER = detail::shift_in_printer>
void print_assoc_container ( OSTREAM &&  os,
const ASSOC_CONTAINER &  c,
KEY_PRINTER &&  value_printer = KEY_PRINTER{},
VALUE_PRINTER &&  key_printer = VALUE_PRINTER{} 
)

Prints the given associative container c to os in the format: {{ key1 -> val1 }, { key2 -> val2 }, ...}

ex.: std::unordered_map<int, float> nums; print_assoc_container(std::cout, nums);

Definition at line 532 of file Collections.h.

◆ print_container() [1/2]

template<typename CONTAINER , typename OSTREAM , typename PRINTER = detail::shift_in_printer, typename T1 , typename T2 , typename T3 >
void print_container ( OSTREAM &&  os,
const CONTAINER &  c,
const T1 &  element_separator,
const T2 &  container_prefix,
const T3 &  container_suffix,
PRINTER &&  element_printer = PRINTER{} 
)

Prints a container to os, using operator<<. Defaults to printing elements using operator<<, but this can be overridden with the 'printer' argument. Printing is of the form: container_prefix element_printer(elem1) element_separator element_printer(os,elem2) element_separator ... container_suffix

Definition at line 435 of file Collections.h.

◆ print_container() [2/2]

template<typename CONTAINER , typename OSTREAM , typename PRINTER = detail::shift_in_printer>
void print_container ( OSTREAM &&  os,
const CONTAINER &  c,
PRINTER &&  element_printer = PRINTER{} 
)

Prints the given container c to os in the format: "{ " elem1 ", " elem2 ", " ... " }"

ex.: std::vector<int> nums; print_container(std::cout, nums);

Definition at line 467 of file Collections.h.

◆ reversed()

template<typename Range >
auto reversed ( Range &  r)

Definition at line 116 of file Collections.h.

◆ singleItemSet()

template<typename VertexID >
SingleItemImmutableSet<VertexID> singleItemSet ( VertexID  v)

Definition at line 143 of file Collections.h.

◆ value_for_key_or()

template<typename ASSOCIATIVE_COLLECTION , typename KEY , typename DEFAULT_VALUE >
auto value_for_key_or ( ASSOCIATIVE_COLLECTION &  assoc_collection,
const KEY &  key,
DEFAULT_VALUE &  default_value 
) -> std::conditional_t< std::is_lvalue_reference<DEFAULT_VALUE>::value, decltype(false ? default_value : assoc_collection.find(key)->second)&, decltype(false ? default_value : assoc_collection.find(key)->second) >

Performs the common pattern of looking up an item in a map, and giving some default value instead of throwing or giving an "end" iterator. Note: only returns by reference if default_value is a lvalue. uses ASSOCIATIVE_COLLECTION::find(const KEY&).

Definition at line 339 of file Collections.h.