HALDLS
is_writeable.h
Go to the documentation of this file.
1 #pragma once
2 #include <type_traits>
3 #include <boost/utility/enable_if.hpp>
4 #include "hate/type_list.h"
5 
7 struct Coordinates;
8 } // namespace halco::hicann_dls::vx::v2
9 
10 namespace halco::hicann_dls::vx::v3 {
11 struct Coordinates;
12 } // namespace halco::hicann_dls::vx::v3
13 
14 namespace haldls::vx {
15 
16 template <typename Coordinates>
17 class CapMemBlock;
18 class PPUMemoryBlock;
19 class PPUMemory;
20 
21 namespace v2 {
25 } // namespace v2
26 
27 namespace v3 {
31 } // namespace v3
32 
33 } // namespace haldls::vx
34 
35 namespace lola::vx {
37 class CorrelationResetRow;
38 class DACChannelBlock;
39 class DACControlBlock;
40 class SynapseCorrelationCalibRow;
41 class SynapseCorrelationCalibMatrix;
42 class SynapseLabelMatrix;
43 class SynapseLabelRow;
44 class SynapseMatrix;
45 class SynapseRow;
46 class SynapseWeightMatrix;
47 class SynapseWeightRow;
48 } // namespace lola::vx
49 
50 namespace lola::vx::v2 {
51 class AtomicNeuron;
52 class CADCSampleRow;
53 class CADCSamples;
57 } // namespace lola::vx::v2
58 
59 namespace lola::vx::v3 {
60 class AtomicNeuron;
61 class CADCSampleRow;
62 class CADCSamples;
66 } // namespace lola::vx::v3
67 
68 namespace haldls::vx::detail {
69 
70 template <typename T, typename = void>
71 struct IsWriteable : public std::false_type
72 {};
73 
74 template <typename T>
75 struct IsWriteable<T, typename boost::enable_if_has_type<decltype(T::config_size_in_words)>::type>
76  : public std::true_type
77 {};
78 
79 template <typename T>
80 struct IsWriteable<
81  T,
82  typename boost::enable_if_has_type<decltype(T::write_config_size_in_words)>::type>
83 {
84  constexpr static bool value = T::write_config_size_in_words;
85 };
86 
87 typedef hate::type_list<
88  lola::vx::CorrelationResetRow,
89  lola::vx::SynapseRow,
90  lola::vx::SynapseMatrix,
91  lola::vx::SynapseWeightMatrix,
92  lola::vx::SynapseLabelMatrix,
93  lola::vx::SynapseCorrelationCalibMatrix,
94  lola::vx::SynapseWeightRow,
95  lola::vx::SynapseLabelRow,
96  lola::vx::SynapseCorrelationCalibRow,
100  lola::vx::v2::AtomicNeuron,
107  lola::vx::v3::AtomicNeuron,
112 
113 // manually add all non-leaf node containers which are writeable
114 template <typename T>
115 struct IsWriteable<
116  T,
117  std::enable_if_t<hate::is_in_type_list<T, NonLeafNodeWriteableContainerList>::value>>
118  : std::true_type
119 {};
120 
121 } // namespace haldls::vx::detail
hate::type_list< lola::vx::CorrelationResetRow, lola::vx::SynapseRow, lola::vx::SynapseMatrix, lola::vx::SynapseWeightMatrix, lola::vx::SynapseLabelMatrix, lola::vx::SynapseCorrelationCalibMatrix, lola::vx::SynapseWeightRow, lola::vx::SynapseLabelRow, lola::vx::SynapseCorrelationCalibRow, v2::PPUMemoryBlock, v2::PPUMemory, v2::CapMemBlock, lola::vx::v2::AtomicNeuron, lola::vx::v2::DACChannelBlock, lola::vx::v2::DACControlBlock, lola::vx::v2::ExternalPPUMemoryBlock, v3::PPUMemoryBlock, v3::PPUMemory, v3::CapMemBlock, lola::vx::v3::AtomicNeuron, lola::vx::v3::DACChannelBlock, lola::vx::v3::DACControlBlock, lola::vx::v3::ExternalPPUMemoryBlock > NonLeafNodeWriteableContainerList
Definition: is_writeable.h:111
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::DACControlBlock DACControlBlock
Definition: is_writeable.h:55
lola::vx::ExternalPPUMemoryBlock ExternalPPUMemoryBlock
Definition: is_readable.h:50
lola::vx::DACChannelBlock DACChannelBlock
Definition: is_writeable.h:54
lola::vx::DACControlBlock DACControlBlock
Definition: is_writeable.h:64
lola::vx::ExternalPPUMemoryBlock ExternalPPUMemoryBlock
Definition: is_readable.h:57
lola::vx::DACChannelBlock DACChannelBlock
Definition: is_writeable.h:63
Definition: fpga.h:20