HALDLS
is_readable.h
Go to the documentation of this file.
1 #pragma once
2 #include "fisch/vx/traits.h"
3 #include "hate/type_list.h"
4 
6 class Coordinates;
7 } // namespace halco::hicann_dls::vx::v2
8 
10 class Coordinates;
11 } // namespace halco::hicann_dls::vx::v3
12 
13 namespace haldls::vx {
14 
15 template <typename Coordinates>
16 class CapMemBlock;
17 class PPUMemoryBlock;
18 class PPUMemory;
19 
20 namespace v2 {
24 } // namespace v2
25 
26 namespace v3 {
30 } // namespace v3
31 
32 } // namespace haldls::vx
33 
34 namespace lola::vx {
36 class SynapseCorrelationCalibRow;
37 class SynapseCorrelationCalibMatrix;
38 class SynapseLabelMatrix;
39 class SynapseLabelRow;
40 class SynapseMatrix;
41 class SynapseRow;
42 class SynapseWeightMatrix;
43 class SynapseWeightRow;
44 } // namespace lola::vx
45 
46 namespace lola::vx::v2 {
47 class AtomicNeuron;
48 class CADCSampleRow;
49 class CADCSamples;
51 } // namespace lola::vx::v2
52 
53 namespace lola::vx::v3 {
54 class AtomicNeuron;
55 class CADCSampleRow;
56 class CADCSamples;
58 } // namespace lola::vx::v3
59 
60 namespace haldls::vx::detail {
61 
62 template <typename T, typename = void>
63 struct IsReadable : public std::false_type
64 {};
65 
66 template <typename T>
67 struct IsReadable<T, typename boost::enable_if_has_type<decltype(T::config_size_in_words)>::type>
68  : public std::true_type
69 {};
70 
71 template <typename T>
72 struct IsReadable<
73  T,
74  typename boost::enable_if_has_type<decltype(T::read_config_size_in_words)>::type>
75 {
76  constexpr static bool value = T::read_config_size_in_words;
77 };
78 
79 typedef hate::type_list<
80  lola::vx::SynapseCorrelationCalibRow,
81  lola::vx::SynapseCorrelationCalibMatrix,
82  lola::vx::SynapseLabelMatrix,
83  lola::vx::SynapseLabelRow,
84  lola::vx::SynapseMatrix,
85  lola::vx::SynapseRow,
86  lola::vx::SynapseWeightMatrix,
87  lola::vx::SynapseWeightRow,
91  lola::vx::v2::AtomicNeuron,
92  lola::vx::v2::CADCSampleRow,
93  lola::vx::v2::CADCSamples,
98  lola::vx::v3::AtomicNeuron,
99  lola::vx::v3::CADCSampleRow,
100  lola::vx::v3::CADCSamples,
103 
104 // manually add all non-leaf node containers which are readable
105 template <typename T>
106 struct IsReadable<
107  T,
108  std::enable_if_t<hate::is_in_type_list<T, NonLeafNodeReadableContainerList>::value>>
109  : std::true_type
110 {};
111 
112 } // namespace haldls::vx::detail
hate::type_list< lola::vx::SynapseCorrelationCalibRow, lola::vx::SynapseCorrelationCalibMatrix, lola::vx::SynapseLabelMatrix, lola::vx::SynapseLabelRow, lola::vx::SynapseMatrix, lola::vx::SynapseRow, lola::vx::SynapseWeightMatrix, lola::vx::SynapseWeightRow, v2::PPUMemory, v2::PPUMemoryBlock, v2::CapMemBlock, lola::vx::v2::AtomicNeuron, lola::vx::v2::CADCSampleRow, lola::vx::v2::CADCSamples, lola::vx::v2::ExternalPPUMemoryBlock, v3::PPUMemory, v3::PPUMemoryBlock, v3::CapMemBlock, lola::vx::v3::AtomicNeuron, lola::vx::v3::CADCSampleRow, lola::vx::v3::CADCSamples, lola::vx::v3::ExternalPPUMemoryBlock > NonLeafNodeReadableContainerList
Definition: is_readable.h:102
haldls::vx::CapMemBlock< halco::hicann_dls::vx::v2::Coordinates > CapMemBlock
Definition: is_readable.h:21
haldls::vx::PPUMemory PPUMemory
Definition: is_readable.h:23
haldls::vx::PPUMemoryBlock PPUMemoryBlock
Definition: is_readable.h:22
haldls::vx::PPUMemory PPUMemory
Definition: is_readable.h:29
haldls::vx::CapMemBlock< halco::hicann_dls::vx::v3::Coordinates > CapMemBlock
Definition: is_readable.h:27
haldls::vx::PPUMemoryBlock PPUMemoryBlock
Definition: is_readable.h:28
lola::vx::ExternalPPUMemoryBlock ExternalPPUMemoryBlock
Definition: is_readable.h:50
lola::vx::ExternalPPUMemoryBlock ExternalPPUMemoryBlock
Definition: is_readable.h:57
Definition: fpga.h:20