Skip to content

Commit 9b5e0d5

Browse files
committed
Conn: synapseOrdinals_ moved to SynapseData
1 parent bd54582 commit 9b5e0d5

File tree

2 files changed

+10
-16
lines changed

2 files changed

+10
-16
lines changed

src/htm/algorithms/Connections.cpp

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -47,18 +47,12 @@ void Connections::initialize(CellIdx numCells, Permanence connectedThreshold, bo
4747
connectedSynapsesForPresynapticCell_.clear();
4848
potentialSegmentsForPresynapticCell_.clear();
4949
connectedSegmentsForPresynapticCell_.clear();
50-
synapseOrdinals_.clear();
5150
eventHandlers_.clear();
5251
NTA_CHECK(connectedThreshold >= minPermanence);
5352
NTA_CHECK(connectedThreshold <= maxPermanence);
5453
connectedThreshold_ = connectedThreshold - htm::Epsilon;
5554
iteration_ = 0;
5655

57-
// Every time a segment or synapse is created, we assign it an ordinal and
58-
// increment the nextOrdinal. Ordinals are never recycled, so they can be used
59-
// to order segments or synapses by age.
60-
nextSynapseOrdinal_ = 0;
61-
6256
nextEventToken_ = 0;
6357

6458
timeseries_ = timeseries;
@@ -132,14 +126,13 @@ Synapse Connections::createSynapse(Segment segment,
132126
<< synapses_.size() << " < " << (size_t)std::numeric_limits<Synapse>::max();
133127
synapse = static_cast<Synapse>(synapses_.size());
134128
synapses_.push_back(SynapseData());
135-
synapseOrdinals_.push_back(0);
136129
}
137130

138131
// Fill in the new synapse's data
139132
SynapseData &synapseData = synapses_[synapse];
140133
synapseData.presynapticCell = presynapticCell;
141134
synapseData.segment = segment;
142-
synapseOrdinals_[synapse] = nextSynapseOrdinal_++;
135+
synapseData.id = nextSynapseOrdinal_++; //TODO move these to SynData constructor
143136
// Start in disconnected state.
144137
synapseData.permanence = connectedThreshold_ - 1.0f;
145138
synapseData.presynapticMapIndex_ =
@@ -267,9 +260,8 @@ void Connections::destroySynapse(const Synapse synapse) {
267260
const auto synapseOnSegment =
268261
std::lower_bound(segmentData.synapses.cbegin(), segmentData.synapses.cend(),
269262
synapse,
270-
[&](const Synapse a, const Synapse b) {
271-
if(synapseOrdinals_[a] == synapseOrdinals_[b]) return a < b;
272-
else return synapseOrdinals_[a] < synapseOrdinals_[b];
263+
[&](const Synapse a, const Synapse b) -> bool {
264+
return dataForSynapse(a).id < dataForSynapse(b).id;
273265
});
274266

275267
NTA_ASSERT(synapseOnSegment != segmentData.synapses.end());

src/htm/algorithms/Connections.hpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ const Permanence minPermanence = 0.0f;
4747
const Permanence maxPermanence = 1.0f;
4848

4949

50+
5051
/**
5152
* SynapseData class used in Connections.
5253
*
@@ -64,6 +65,9 @@ struct SynapseData: public Serializable {
6465
Permanence permanence;
6566
Segment segment;
6667
Synapse presynapticMapIndex_;
68+
Synapse id;
69+
70+
SynapseData() {}
6771

6872
CerealAdapter;
6973
template<class Archive>
@@ -91,15 +95,13 @@ struct SynapseData: public Serializable {
9195
* The cell that this segment is on.
9296
*/
9397
struct SegmentData {
94-
SegmentData(const CellIdx cell, UInt32 lastUsed = 0) : cell(cell), numConnected(0), lastUsed(lastUsed), id(nextId++) {} //default constructor
98+
SegmentData(const CellIdx cell, Segment id, UInt32 lastUsed = 0) : cell(cell), numConnected(0), id(id), lastUsed(lastUsed) {} //default constructor
9599

96100
std::vector<Synapse> synapses;
97101
CellIdx cell; //mother cell that this segment originates from
98102
SynapseIdx numConnected; //number of permanences from `synapses` that are >= synPermConnected, ie connected synapses
103+
Segment id;
99104
UInt32 lastUsed = 0; //last used time (iteration). Used for segment pruning by "least recently used" (LRU) in `createSegment`
100-
Segment id;
101-
private:
102-
Segment nextId = 0;
103105
};
104106

105107
/**
@@ -720,7 +722,7 @@ class Connections : public Serializable
720722
std::map<CellIdx, std::vector<Segment>> potentialSegmentsForPresynapticCell_;
721723
std::map<CellIdx, std::vector<Segment>> connectedSegmentsForPresynapticCell_;
722724

723-
std::vector<Synapse> synapseOrdinals_;
725+
Segment nextSegmentOrdinal_ = 0;
724726
Synapse nextSynapseOrdinal_ = 0;
725727

726728
// These three members should be used when working with highly correlated

0 commit comments

Comments
 (0)