Skip to content

Commit 5b368d8

Browse files
committed
Conn: move segment ordinals (id) to SegmentData
1 parent fc38d89 commit 5b368d8

File tree

2 files changed

+5
-9
lines changed

2 files changed

+5
-9
lines changed

src/htm/algorithms/Connections.cpp

+3-6
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ void Connections::initialize(CellIdx numCells, Permanence connectedThreshold, bo
4747
connectedSynapsesForPresynapticCell_.clear();
4848
potentialSegmentsForPresynapticCell_.clear();
4949
connectedSegmentsForPresynapticCell_.clear();
50-
segmentOrdinals_.clear();
5150
eventHandlers_.clear();
5251
NTA_CHECK(connectedThreshold >= minPermanence);
5352
NTA_CHECK(connectedThreshold <= maxPermanence);
@@ -99,13 +98,11 @@ Segment Connections::createSegment(const CellIdx cell,
9998
NTA_CHECK(segments_.size() < std::numeric_limits<Segment>::max()) << "Add segment failed: Range of Segment (data-type) insufficinet size."
10099
<< (size_t)segments_.size() << " < " << (size_t)std::numeric_limits<Segment>::max();
101100
segment = static_cast<Segment>(segments_.size());
102-
const SegmentData& segmentData = SegmentData(cell, iteration_);
101+
const SegmentData& segmentData = SegmentData(cell, iteration_, nextSegmentOrdinal_++);
103102
segments_.push_back(segmentData);
104-
segmentOrdinals_.push_back(0);
105103
}
106104

107105
CellData &cellData = cells_[cell];
108-
segmentOrdinals_[segment] = nextSegmentOrdinal_++;
109106
cellData.segments.push_back(segment); //assign the new segment to its mother-cell
110107

111108
for (auto h : eventHandlers_) {
@@ -213,7 +210,7 @@ void Connections::destroySegment(const Segment segment) {
213210
std::lower_bound(cellData.segments.cbegin(), cellData.segments.cend(),
214211
segment,
215212
[&](const Segment a, const Segment b) {
216-
return segmentOrdinals_[a] < segmentOrdinals_[b];
213+
return dataForSegment(a).id < dataForSegment(b).id;
217214
});
218215

219216
NTA_ASSERT(segmentOnCell != cellData.segments.end());
@@ -356,7 +353,7 @@ bool Connections::compareSegments(const Segment a, const Segment b) const {
356353
// default sort by cell
357354
if (aData.cell == bData.cell)
358355
//fallback to ordinals:
359-
return segmentOrdinals_[a] < segmentOrdinals_[b];
356+
return aData.id < bData.id;
360357
else return aData.cell < bData.cell;
361358
}
362359

src/htm/algorithms/Connections.hpp

+2-3
Original file line numberDiff line numberDiff line change
@@ -95,13 +95,13 @@ struct SynapseData: public Serializable {
9595
* The cell that this segment is on.
9696
*/
9797
struct SegmentData {
98-
SegmentData(const CellIdx cell, UInt32 lastUsed = 0) : cell(cell), numConnected(0), lastUsed(lastUsed) {} //default constructor
98+
SegmentData(const CellIdx cell, Segment id, UInt32 lastUsed = 0) : cell(cell), numConnected(0), lastUsed(lastUsed), id(id) {} //default constructor
9999

100100
std::vector<Synapse> synapses;
101101
CellIdx cell; //mother cell that this segment originates from
102102
SynapseIdx numConnected; //number of permanences from `synapses` that are >= synPermConnected, ie connected synapses
103-
Segment id;
104103
UInt32 lastUsed = 0; //last used time (iteration). Used for segment pruning by "least recently used" (LRU) in `createSegment`
104+
Segment id;
105105
};
106106

107107
/**
@@ -722,7 +722,6 @@ class Connections : public Serializable
722722
std::map<CellIdx, std::vector<Segment>> potentialSegmentsForPresynapticCell_;
723723
std::map<CellIdx, std::vector<Segment>> connectedSegmentsForPresynapticCell_;
724724

725-
std::vector<Segment> segmentOrdinals_;
726725
Segment nextSegmentOrdinal_ = 0;
727726
Synapse nextSynapseOrdinal_ = 0;
728727

0 commit comments

Comments
 (0)