@@ -40,6 +40,7 @@ std::vector<LastHeardStation> lastHeardObjects;
4040struct OutputPacketBuffer {
4141 String packet;
4242 bool isBeacon;
43+ OutputPacketBuffer (const String& p, bool b) : packet(p), isBeacon(b) {}
4344};
4445std::vector<OutputPacketBuffer> outputPacketBuffer;
4546
@@ -57,19 +58,18 @@ namespace STATION_Utils {
5758
5859 std::vector<String> loadCallsignList (const String& list) {
5960 std::vector<String> loadedList;
61+ int start = 0 ;
62+ int listLength = list.length ();
6063
61- String callsigns = list;
62- callsigns.trim ();
64+ while (start < listLength) {
65+ while (start < listLength && list[start] == ' ' ) start++; // avoid blank spaces
66+ if (start >= listLength) break ;
6367
64- while (callsigns.length () > 0 ) { // != ""
65- int spaceIndex = callsigns.indexOf (" " );
66- if (spaceIndex == -1 ) { // No more spaces, add the last part
67- loadedList.push_back (callsigns);
68- break ;
69- }
70- loadedList.push_back (callsigns.substring (0 , spaceIndex));
71- callsigns = callsigns.substring (spaceIndex + 1 );
72- callsigns.trim (); // Trim in case of multiple spaces
68+ int end = start;
69+ while (end < listLength && list[end] != ' ' ) end++; // find another blank space or reach listLength
70+
71+ loadedList.emplace_back (list.substring (start, end));
72+ start = end + 1 ; // keep on searching if listLength not reached
7373 }
7474 return loadedList;
7575 }
@@ -126,36 +126,33 @@ namespace STATION_Utils {
126126 }
127127
128128 void deleteNotHeard () {
129- std::vector<LastHeardStation> lastHeardStation_temp;
130- for (int i = 0 ; i < lastHeardStations.size (); i++) {
131- if (millis () - lastHeardStations[i].lastHeardTime < Config.rememberStationTime * 60 * 1000 ) {
132- lastHeardStation_temp.push_back (lastHeardStations[i]);
129+ uint32_t currentTime = millis ();
130+ uint32_t timeout = Config.rememberStationTime * 60UL * 1000UL ;
131+
132+ for (int i = lastHeardStations.size () - 1 ; i >= 0 ; i--) {
133+ if (currentTime - lastHeardStations[i].lastHeardTime >= timeout) {
134+ lastHeardStations.erase (lastHeardStations.begin () + i);
133135 }
134136 }
135- lastHeardStations.clear ();
136- for (int j = 0 ; j < lastHeardStation_temp.size (); j++) {
137- lastHeardStations.push_back (lastHeardStation_temp[j]);
138- }
139- lastHeardStation_temp.clear ();
140137 }
141138
142139 void updateLastHeard (const String& station) {
143140 deleteNotHeard ();
144- bool stationHeard = false ;
145- for (int i = 0 ; i < lastHeardStations.size (); i++) {
141+ uint32_t currentTime = millis () ;
142+ for (size_t i = 0 ; i < lastHeardStations.size (); i++) {
146143 if (lastHeardStations[i].station == station) {
147- lastHeardStations[i].lastHeardTime = millis () ;
148- stationHeard = true ;
149- break ;
144+ lastHeardStations[i].lastHeardTime = currentTime ;
145+ Utils::showActiveStations () ;
146+ return ;
150147 }
151148 }
152- if (!stationHeard) lastHeardStations.emplace_back (LastHeardStation{millis () , station});
149+ lastHeardStations.emplace_back (LastHeardStation{currentTime , station});
153150 Utils::showActiveStations ();
154151 }
155152
156153 bool wasHeard (const String& station) {
157154 deleteNotHeard ();
158- for (int i = 0 ; i < lastHeardStations.size (); i++) {
155+ for (size_t i = 0 ; i < lastHeardStations.size (); i++) {
159156 if (lastHeardStations[i].station == station) {
160157 Utils::println (" ---> Listened Station" );
161158 return true ;
@@ -184,9 +181,9 @@ namespace STATION_Utils {
184181 }
185182
186183 bool isIn25SegHashBuffer (const String& station, const String& textMessage) {
187- uint32_t newHash = makeHash (station, textMessage);
188- uint32_t currentTime = millis ();
189184 clean25SegHashBuffer ();
185+ uint32_t newHash = makeHash (station, textMessage);
186+ uint32_t currentTime = millis ();
190187 for (int i = 0 ; i < packet25SegBuffer.size (); i++) {
191188 if (packet25SegBuffer[i].hash == newHash) return true ;
192189 }
@@ -243,11 +240,7 @@ namespace STATION_Utils {
243240 }
244241
245242 void addToOutputPacketBuffer (const String& packet, bool flag) {
246- OutputPacketBuffer entry;
247- entry.packet = packet;
248- entry.isBeacon = flag;
249-
250- outputPacketBuffer.push_back (entry);
243+ outputPacketBuffer.emplace_back (OutputPacketBuffer{packet, flag});
251244 }
252245
253246}
0 commit comments