Silicon
A realtime platform for creating interactive media.
Types.hpp
Go to the documentation of this file.
1// BSD 2-Clause License
2//
3// Copyright (c) 2022, Matthew McCall
4// All rights reserved.
5//
6// Redistribution and use in source and binary forms, with or without
7// modification, are permitted provided that the following conditions are met:
8//
9// 1. Redistributions of source code must retain the above copyright notice, this
10// list of conditions and the following disclaimer.
11//
12// 2. Redistributions in binary form must reproduce the above copyright notice,
13// this list of conditions and the following disclaimer in the documentation
14// and/or other materials provided with the distribution.
15//
16// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
20// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
22// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
23// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
27//
28// Created by Matthew McCall on 8/19/22.
29//
30
31#ifndef SILICON_TYPES_HPP
32#define SILICON_TYPES_HPP
33
34#include <list>
35#include <vector>
36
37#include "boost/graph/adjacency_list.hpp"
38#include "gsl/pointers"
39
40#include "Allocator.hpp"
41
42namespace Si {
43
44template <typename T>
45#ifdef NDEBUG
46using NotNull = gsl::not_null<T>;
47#else
48using NotNull = gsl::strict_not_null<T>;
49#endif
50
51template <typename T>
53
54template <typename T>
56
60template <typename Key, typename Value, typename Compare = std::less<Key>>
62
66template <typename Key, typename Value, typename Hash = std::hash<Key>, typename KeyEqual = std::equal_to<Key>>
68
73};
74
78struct GraphList {
79};
80
81}
82
84
85namespace boost {
86
87template <class T>
88struct container_gen<Si::GraphVector, T> {
89 typedef Si::Vector<T> type;
90};
91
92template <>
93struct parallel_edge_traits<Si::GraphVector> {
94 typedef allow_parallel_edge_tag type;
95};
96
97template <class T>
98struct container_gen<Si::GraphList, T> {
99 typedef Si::List<T> type;
100};
101
102template <>
103struct parallel_edge_traits<Si::GraphList> {
104 typedef allow_parallel_edge_tag type;
105};
106
107}
108
110
111namespace Si {
112
116template <typename T, typename ContainerT = GraphVector>
117using Graph = boost::adjacency_list<ContainerT, ContainerT, boost::bidirectionalS, T>;
118}
119
120#endif // SILICON_TYPES_HPP
Definition: Allocator.hpp:36
boost::adjacency_list< ContainerT, ContainerT, boost::bidirectionalS, T > Graph
Container for representing relationships between objects.
Definition: Types.hpp:117
gsl::strict_not_null< T > NotNull
Definition: Types.hpp:48
List for use in Graphs.
Definition: Types.hpp:78
Vector for use in Graphs.
Definition: Types.hpp:72