GeNN  4.9.0
GPU enhanced Neuronal Networks (GeNN)
synapseMatrixType.h
Go to the documentation of this file.
1 #pragma once
2 
3 //----------------------------------------------------------------------------
4 // Enumerations
5 //----------------------------------------------------------------------------
7 enum class SynapseMatrixConnectivity : unsigned int
8 {
9  DENSE = (1 << 0),
10  BITMASK = (1 << 1),
11  SPARSE = (1 << 2),
12  PROCEDURAL = (1 << 3),
13  TOEPLITZ = (1 << 4),
14 };
15 
17 enum class SynapseMatrixWeight : unsigned int
18 {
19  GLOBAL = (1 << 5),
20  INDIVIDUAL = (1 << 6),
21  PROCEDURAL = (1 << 7),
22  INDIVIDUAL_PSM = (1 << 8),
23  KERNEL = (1 << 9)
24 };
25 
27 enum class SynapseMatrixType : unsigned int
28 {
29  DENSE_GLOBALG = static_cast<unsigned int>(SynapseMatrixConnectivity::DENSE) | static_cast<unsigned int>(SynapseMatrixWeight::GLOBAL),
30  DENSE_GLOBALG_INDIVIDUAL_PSM = static_cast<unsigned int>(SynapseMatrixConnectivity::DENSE) | static_cast<unsigned int>(SynapseMatrixWeight::GLOBAL) | static_cast<unsigned int>(SynapseMatrixWeight::INDIVIDUAL_PSM),
31  DENSE_INDIVIDUALG = static_cast<unsigned int>(SynapseMatrixConnectivity::DENSE) | static_cast<unsigned int>(SynapseMatrixWeight::INDIVIDUAL) | static_cast<unsigned int>(SynapseMatrixWeight::INDIVIDUAL_PSM),
32  DENSE_PROCEDURALG = static_cast<unsigned int>(SynapseMatrixConnectivity::DENSE) | static_cast<unsigned int>(SynapseMatrixWeight::PROCEDURAL) | static_cast<unsigned int>(SynapseMatrixWeight::INDIVIDUAL_PSM),
33  BITMASK_GLOBALG = static_cast<unsigned int>(SynapseMatrixConnectivity::BITMASK) | static_cast<unsigned int>(SynapseMatrixWeight::GLOBAL),
34  BITMASK_GLOBALG_INDIVIDUAL_PSM = static_cast<unsigned int>(SynapseMatrixConnectivity::BITMASK) | static_cast<unsigned int>(SynapseMatrixWeight::GLOBAL) | static_cast<unsigned int>(SynapseMatrixWeight::INDIVIDUAL_PSM),
35  SPARSE_GLOBALG = static_cast<unsigned int>(SynapseMatrixConnectivity::SPARSE) | static_cast<unsigned int>(SynapseMatrixWeight::GLOBAL),
36  SPARSE_GLOBALG_INDIVIDUAL_PSM = static_cast<unsigned int>(SynapseMatrixConnectivity::SPARSE) | static_cast<unsigned int>(SynapseMatrixWeight::GLOBAL) | static_cast<unsigned int>(SynapseMatrixWeight::INDIVIDUAL_PSM),
37  SPARSE_INDIVIDUALG = static_cast<unsigned int>(SynapseMatrixConnectivity::SPARSE) | static_cast<unsigned int>(SynapseMatrixWeight::INDIVIDUAL) | static_cast<unsigned int>(SynapseMatrixWeight::INDIVIDUAL_PSM),
38  PROCEDURAL_GLOBALG = static_cast<unsigned int>(SynapseMatrixConnectivity::PROCEDURAL) | static_cast<unsigned int>(SynapseMatrixWeight::GLOBAL),
39  PROCEDURAL_GLOBALG_INDIVIDUAL_PSM = static_cast<unsigned int>(SynapseMatrixConnectivity::PROCEDURAL) | static_cast<unsigned int>(SynapseMatrixWeight::GLOBAL) | static_cast<unsigned int>(SynapseMatrixWeight::INDIVIDUAL_PSM),
40  PROCEDURAL_PROCEDURALG = static_cast<unsigned int>(SynapseMatrixConnectivity::PROCEDURAL) | static_cast<unsigned int>(SynapseMatrixWeight::PROCEDURAL) | static_cast<unsigned int>(SynapseMatrixWeight::INDIVIDUAL_PSM),
41  PROCEDURAL_KERNELG = static_cast<unsigned int>(SynapseMatrixConnectivity::PROCEDURAL) | static_cast<unsigned int>(SynapseMatrixWeight::KERNEL) | static_cast<unsigned int>(SynapseMatrixWeight::INDIVIDUAL_PSM),
42  TOEPLITZ_KERNELG = static_cast<unsigned int>(SynapseMatrixConnectivity::TOEPLITZ) | static_cast<unsigned int>(SynapseMatrixWeight::KERNEL) | static_cast<unsigned int>(SynapseMatrixWeight::INDIVIDUAL_PSM),
43 };
44 
45 //----------------------------------------------------------------------------
46 // Operators
47 //----------------------------------------------------------------------------
49 {
50  return (static_cast<unsigned int>(type) & static_cast<unsigned int>(connType)) != 0;
51 }
52 
53 inline bool operator & (SynapseMatrixType type, SynapseMatrixWeight weightType)
54 {
55  return (static_cast<unsigned int>(type) & static_cast<unsigned int>(weightType)) != 0;
56 }
57 
59 {
60  return static_cast<SynapseMatrixType>(static_cast<unsigned int>(weightType) | static_cast<unsigned int>(connType));
61 }
62 
63 //----------------------------------------------------------------------------
64 // Helpers
65 //----------------------------------------------------------------------------
66 // **THINK** these are kinda nasty as they can return things that aren't actually in the bit enums i.e. ORd together things
68 {
69  return static_cast<SynapseMatrixConnectivity>(static_cast<unsigned int>(type) & 0x1F);
70 }
71 
73 {
74  return static_cast<SynapseMatrixWeight>(static_cast<unsigned int>(type) & ~0x1F);
75 }
SynapseMatrixConnectivity
Flags defining differnet types of synaptic matrix connectivity.
Definition: synapseMatrixType.h:7
SynapseMatrixType operator|(SynapseMatrixWeight weightType, SynapseMatrixConnectivity connType)
Definition: synapseMatrixType.h:58
bool operator&(SynapseMatrixType type, SynapseMatrixConnectivity connType)
Definition: synapseMatrixType.h:48
SynapseMatrixType
Supported combinations of SynapticMatrixConnectivity and SynapticMatrixWeight.
Definition: synapseMatrixType.h:27
SynapseMatrixWeight getSynapseMatrixWeight(SynapseMatrixType type)
Definition: synapseMatrixType.h:72
SynapseMatrixWeight
Flags defining different types of synaptic matrix connectivity.
Definition: synapseMatrixType.h:17
SynapseMatrixConnectivity getSynapseMatrixConnectivity(SynapseMatrixType type)
Definition: synapseMatrixType.h:67