C++ Library Extensions 2022.12.09
To help learn modern C++ programming
tpf_set.hpp File Reference

Implements set operations. More...

#include <tpf_types.hpp>
#include <tpf_output.hpp>
#include <tpf_ncrnpr.hpp>
#include <deque>
#include <exception>
#include <cassert>
#include <sstream>
#include <string>
#include <algorithm>
Include dependency graph for tpf_set.hpp:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Namespaces

namespace  tpf
 Includes subnamespace conversion.
 
namespace  tpf::set
 Implements set operations.
 
namespace  tpf::set::hidden
 

Macros

#define NOMINMAX
 

Enumerations

enum class  tpf::set::sort_order { tpf::set::ascending , tpf::set::descending }
 
enum class  tpf::set::sort_method { tpf::set::dictionary , tpf::set::size }
 

Functions

template<typename Type >
constexpr auto tpf::set::count_of_subsets (Type element_count)
 
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types>
types::enable_if_container_type_t< ContainerType< EleType, Types... >, void > tpf::set::smart_shrink_to_fit (ContainerType< EleType, Types... > &container, size_t factor=2)
 
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types>
types::enable_if_container_type_t< ContainerType< EleType, Types... >, int > tpf::set::compare_sets_dictionary (const ContainerType< EleType, Types... > &left, const ContainerType< EleType, Types... > &right)
 
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types>
types::enable_if_container_type_t< ContainerType< EleType, Types... >, int > tpf::set::compare_sets_size (const ContainerType< EleType, Types... > &left, const ContainerType< EleType, Types... > &right)
 
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types>
types::enable_if_container_type_t< ContainerType< EleType, Types... >, bool > tpf::set::operator== (const ContainerType< EleType, Types... > &left, const ContainerType< EleType, Types... > &right)
 
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types>
types::enable_if_container_type_t< ContainerType< EleType, Types... >, bool > tpf::set::operator!= (const ContainerType< EleType, Types... > &left, const ContainerType< EleType, Types... > &right)
 
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types>
types::enable_if_container_type_t< ContainerType< EleType, Types... >, bool > tpf::set::compare_less_dictionary (const ContainerType< EleType, Types... > &left, const ContainerType< EleType, Types... > &right)
 
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types>
types::enable_if_container_type_t< ContainerType< EleType, Types... >, bool > tpf::set::compare_less_equal_dictionary (const ContainerType< EleType, Types... > &left, const ContainerType< EleType, Types... > &right)
 
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types>
types::enable_if_container_type_t< ContainerType< EleType, Types... >, bool > tpf::set::compare_greater_dictionary (const ContainerType< EleType, Types... > &left, const ContainerType< EleType, Types... > &right)
 
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types>
types::enable_if_container_type_t< ContainerType< EleType, Types... >, bool > tpf::set::compare_greater_equal_dictionary (const ContainerType< EleType, Types... > &left, const ContainerType< EleType, Types... > &right)
 
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types>
types::enable_if_container_type_t< ContainerType< EleType, Types... >, bool > tpf::set::compare_less_size (const ContainerType< EleType, Types... > &left, const ContainerType< EleType, Types... > &right)
 
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types>
types::enable_if_container_type_t< ContainerType< EleType, Types... >, bool > tpf::set::compare_less_equal_size (const ContainerType< EleType, Types... > &left, const ContainerType< EleType, Types... > &right)
 
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types>
types::enable_if_container_type_t< ContainerType< EleType, Types... >, bool > tpf::set::compare_greater_size (const ContainerType< EleType, Types... > &left, const ContainerType< EleType, Types... > &right)
 
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types>
types::enable_if_container_type_t< ContainerType< EleType, Types... >, bool > tpf::set::compare_greater_equal_size (const ContainerType< EleType, Types... > &left, const ContainerType< EleType, Types... > &right)
 
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types>
types::enable_if_container_type_t< ContainerType< EleType, Types... >, bool > tpf::set::operator< (const ContainerType< EleType, Types... > &left, const ContainerType< EleType, Types... > &right)
 
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types>
types::enable_if_container_type_t< ContainerType< EleType, Types... >, bool > tpf::set::operator> (const ContainerType< EleType, Types... > &left, const ContainerType< EleType, Types... > &right)
 
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types>
types::enable_if_container_type_t< ContainerType< EleType, Types... >, bool > tpf::set::operator<= (const ContainerType< EleType, Types... > &left, const ContainerType< EleType, Types... > &right)
 
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types>
types::enable_if_container_type_t< ContainerType< EleType, Types... >, bool > tpf::set::operator>= (const ContainerType< EleType, Types... > &left, const ContainerType< EleType, Types... > &right)
 
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types>
types::enable_if_container_type_t< ContainerType< EleType, Types... >, bool > tpf::set::is_in_container (const EleType &ele, const ContainerType< EleType, Types... > &container)
 
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types>
types::enable_if_container_type_t< ContainerType< EleType, Types... >, bool > tpf::set::is_in_unsorted_container (const EleType &ele, const ContainerType< EleType, Types... > &container)
 
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types>
types::enable_if_container_type_t< ContainerType< EleType, Types... >, bool > tpf::set::is_sorted (const ContainerType< EleType, Types... > &container, sort_order order=sort_order::ascending, sort_method method=sort_method::size)
 
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types>
types::enable_if_container_type_t< ContainerType< EleType, Types... >, bool > tpf::set::sort_in_place (ContainerType< EleType, Types... > &container, sort_order order=sort_order::ascending, sort_method method=sort_method::size)
 
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types>
ContainerType< EleType > tpf::set::sort (ContainerType< EleType, Types... > container, sort_order order=sort_order::ascending, sort_method method=sort_method::size)
 
template<template< typename, typename... > class ContainerType, typename EleType , typename RightContainerType , typename... Types>
std::enable_if_t< std::is_same_v< ContainerType< EleType, Types... >, remove_cv_ref_t< RightContainerType > > > tpf::set::union_in_place (ContainerType< EleType, Types... > &left, RightContainerType &&right)
 
template<template< typename, typename... > class ContainerType, typename EleType , typename RightContainerType1 , typename RightContainerType2 , typename... Types>
std::enable_if_t< std::is_same_v< ContainerType< EleType, Types... >, remove_cv_ref_t< RightContainerType1 > > &&std::is_same_v< ContainerType< EleType, Types... >, remove_cv_ref_t< RightContainerType2 > > > tpf::set::union_in_place (ContainerType< EleType, Types... > &left, RightContainerType1 &&right1, RightContainerType2 &&right2)
 
template<template< typename, typename... > class ContainerType, typename EleType , typename RightContainerType , typename... Types>
std::enable_if_t< std::is_same_v< ContainerType< EleType, Types... >, remove_cv_ref_t< RightContainerType > >, ContainerType< EleType, Types... > > tpf::set::union_sets (ContainerType< EleType, Types... > left, RightContainerType &&right)
 
template<template< typename, typename... > class ContainerType, typename EleType , typename RightContainerType1 , typename RightContainerType2 , typename... Types>
std::enable_if_t< std::is_same_v< ContainerType< EleType, Types... >, remove_cv_ref_t< RightContainerType1 > > &&std::is_same_v< ContainerType< EleType, Types... >, remove_cv_ref_t< RightContainerType2 > >, ContainerType< EleType, Types... > > tpf::set::union_sets (ContainerType< EleType, Types... > left, RightContainerType1 &&right1, RightContainerType2 &&right2)
 
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types1, typename... Types2>
ContainerType< EleType, Types1... > tpf::set::union_flat (const ContainerType< ContainerType< EleType, Types1... >, Types2... > &sets)
 
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types>
ContainerType< EleType, Types... > tpf::set::intersection (const ContainerType< EleType, Types... > &left, const ContainerType< EleType, Types... > &right)
 
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types>
ContainerType< EleType, Types... > tpf::set::intersection (const ContainerType< EleType, Types... > &left, const ContainerType< EleType, Types... > &right1, const ContainerType< EleType, Types... > &right2)
 
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types>
ContainerType< EleType, Types... > tpf::set::difference (const ContainerType< EleType, Types... > &left, const ContainerType< EleType, Types... > &right)
 
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types>
ContainerType< EleType, Types... > tpf::set::difference (const ContainerType< EleType, Types... > &left, const ContainerType< EleType, Types... > &right1, const ContainerType< EleType, Types... > &right2)
 
template<template< typename, typename... > class ContainerType, typename EleType , typename... Types, typename... OuterTypes>
void tpf::set::hidden::build_subsets (ContainerType< ContainerType< EleType, Types... >, OuterTypes... > &SS, ContainerType< EleType, Types... > R, ContainerType< EleType, Types... > S, size_t count)
 
template<template< typename, typename... > class ContainerType, typename EleType , typename... Types>
void tpf::set::hidden::build_permutations (ContainerType< EleType, Types... > &L, ContainerType< EleType, Types... > &R, size_t r)
 
template<template< typename, typename... > class ContainerType, typename EleType , typename... Types, typename... OuterTypes>
void tpf::set::hidden::build_permutations (ContainerType< ContainerType< EleType, Types... >, OuterTypes... > &permutations, ContainerType< EleType, Types... > &L, ContainerType< EleType, Types... > &R, size_t r)
 
template<template< typename, typename... > class ContainerType, typename EleType , typename... Types>
void tpf::set::hidden::build_permutations_remainder (ContainerType< EleType, Types... > &L, ContainerType< EleType, Types... > &R, size_t r)
 
template<template< typename, typename... > class ContainerType, typename EleType , typename... Types, typename... OuterTypes>
void tpf::set::hidden::build_permutations_remainder (ContainerType< ContainerType< EleType, Types... >, OuterTypes... > &permutations, ContainerType< EleType, Types... > &L, ContainerType< EleType, Types... > &R, size_t r)
 
template<template< typename, typename... > class ContainerType, typename EleType , typename... Types, typename... OuterTypes>
void tpf::set::hidden::build_permutations (tpf::thread_bundle &tb, ContainerType< ContainerType< EleType, Types... >, OuterTypes... > &permutations, ContainerType< EleType, Types... > &L, ContainerType< EleType, Types... > &R, size_t r)
 
template<template< typename, typename... > class ContainerType, typename EleType , typename... Types, typename... OuterTypes>
void tpf::set::hidden::build_permutations (ContainerType< ContainerType< EleType, Types... >, OuterTypes... > &permutations, ContainerType< EleType, Types... > &L, ContainerType< EleType, Types... > &R)
 
template<template< typename, typename... > class ContainerType, typename EleType , typename... Types>
void tpf::set::hidden::build_permutations (tpf::thread_bundle &tb, ContainerType< EleType, Types... > &L, ContainerType< EleType, Types... > &R)
 
template<template< typename, typename... > class ContainerType, typename EleType , typename... Types>
void tpf::set::hidden::build_permutations (ContainerType< EleType, Types... > &L, ContainerType< EleType, Types... > &R)
 
template<typename ThreadCountType , typename NType , typename RType >
auto tpf::set::build_permutations (ThreadCountType thread_count, NType n, RType r)
 
template<typename NType , typename RType >
auto tpf::set::build_permutations (NType n, RType r)
 
template<typename NType , typename RType >
auto tpf::set::build_permutations_remainder (NType n, RType r)
 
template<typename ThreadCountType , typename NType , typename RType >
auto tpf::set::build_permutations_flat (ThreadCountType thread_count, NType n, RType r)
 
template<typename NType , typename RType >
auto tpf::set::build_permutations_flat (NType n, RType r)
 
template<template< typename, typename... > class ContainerType, typename EleType , typename... Types>
ContainerType< ContainerType< EleType, Types... > > tpf::set::build_subsets (const ContainerType< EleType, Types... > &S, size_t count=InvalidIndex)
 
template<template< typename, typename... > class ReturnContainer = std::vector, template< typename, typename... > class SetContainer = std::list, typename... ContainerTails, typename EleType = int, typename CountType = int>
ReturnContainer< ReturnContainer< EleType > > tpf::set::enumerate_combination_with_exclude (SetContainer< EleType, ContainerTails... > exclude_set, SetContainer< EleType, ContainerTails... > from_set, CountType r)
 
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types>
types::enable_if_container_type_t< ContainerType< EleType, Types... >, size_t > tpf::set::minimum_value_index (const ContainerType< EleType, Types... > &container)
 
template<typename EleType , typename IndexType , template< typename, typename... > class ContainerType, typename... Types>
types::enable_if_container_type_t< ContainerType< EleType, Types... >, size_t > tpf::set::minimum_value_index (const ContainerType< EleType, Types... > &container, const std::vector< IndexType > &exclude_set)
 

Detailed Description

Implements set operations.

Author
your name (you@d.nosp@m.omai.nosp@m.n.com)
Version
0.1
Date
2019-04-17

Definition in file tpf_set.hpp.

Macro Definition Documentation

◆ NOMINMAX

#define NOMINMAX

Definition at line 15 of file tpf_set.hpp.