CUsers::m_Users is list

pull/1/head
Tom Early 6 years ago
parent 71a9f785ea
commit c92db03398

@ -647,9 +647,9 @@ void CReflector::WriteXmlFile(std::ofstream &xmlFile)
// lock // lock
CUsers *users = GetUsers(); CUsers *users = GetUsers();
// iterate on users // iterate on users
for ( int i = 0; i < users->GetSize(); i++ ) for ( auto it=users->begin(); it!=users->end(); it++ )
{ {
users->GetUser(i)->WriteXml(xmlFile); (*it).WriteXml(xmlFile);
} }
// unlock // unlock
ReleaseUsers(); ReleaseUsers();
@ -724,10 +724,10 @@ void CReflector::SendJsonStationsObject(CUdpSocket &Socket, CIp &Ip)
// lock // lock
CUsers *users = GetUsers(); CUsers *users = GetUsers();
// iterate on users // iterate on users
for ( int i = 0; i < users->GetSize(); i++ ) for ( auto it=users->begin(); it!=users->end(); )
{ {
users->GetUser(i)->GetJsonObject(Buffer); (*it++).GetJsonObject(Buffer);
if ( i < users->GetSize()-1 ) if ( it != users->end() )
{ {
::strcat(Buffer, ","); ::strcat(Buffer, ",");
} }

@ -4,6 +4,7 @@
// //
// Created by Jean-Luc Deltombe (LX3JL) on 13/11/2015. // Created by Jean-Luc Deltombe (LX3JL) on 13/11/2015.
// Copyright © 2015 Jean-Luc Deltombe (LX3JL). All rights reserved. // Copyright © 2015 Jean-Luc Deltombe (LX3JL). All rights reserved.
// Copyright © 2020 Thomas A. Early, N7TAE
// //
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// This file is part of xlxd. // This file is part of xlxd.
@ -29,10 +30,7 @@
//////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////
// constructor // constructor
CUsers::CUsers() CUsers::CUsers() {}
{
m_Users.reserve(LASTHEARD_USERS_MAX_SIZE);
}
//////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////
// users management // users management
@ -40,10 +38,7 @@ CUsers::CUsers()
void CUsers::AddUser(const CUser &user) void CUsers::AddUser(const CUser &user)
{ {
// add // add
m_Users.push_back(user); m_Users.push_front(user);
// sort list by descending time (fisrt is youngest)
std::sort(m_Users.begin(), m_Users.end());
// if list size too big, remove oldest // if list size too big, remove oldest
if ( m_Users.size() >= (LASTHEARD_USERS_MAX_SIZE-1) ) if ( m_Users.size() >= (LASTHEARD_USERS_MAX_SIZE-1) )
@ -67,26 +62,15 @@ void CUsers::Hearing(const CCallsign &my, const CCallsign &rpt1, const CCallsign
{ {
CUser heard(my, rpt1, rpt2, xlx); CUser heard(my, rpt1, rpt2, xlx);
// first check if we have this user listed yet // first check if this user is already listed. If so, erase him.
bool found = false; for ( auto it=begin(); it!=end(); it++ )
for ( int i = 0; (i < m_Users.size()) && !found; i++ )
{ {
found = (m_Users[i] == heard); if (*it == heard)
if ( found )
{ {
m_Users[i].HeardNow(); m_Users.erase(it);
break;
} }
} }
// if not found, add user to list
// otherwise just re-sort the list
if ( !found )
{
AddUser(heard); AddUser(heard);
} }
else
{
std::sort(m_Users.begin(), m_Users.end());
}
}

@ -4,6 +4,7 @@
// //
// Created by Jean-Luc Deltombe (LX3JL) on 13/11/2015. // Created by Jean-Luc Deltombe (LX3JL) on 13/11/2015.
// Copyright © 2015 Jean-Luc Deltombe (LX3JL). All rights reserved. // Copyright © 2015 Jean-Luc Deltombe (LX3JL). All rights reserved.
// Copyright © 2020 Thomas A. Early, N7TAE
// //
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// This file is part of xlxd. // This file is part of xlxd.
@ -45,7 +46,10 @@ public:
// management // management
int GetSize(void) const { return (int)m_Users.size(); } int GetSize(void) const { return (int)m_Users.size(); }
void AddUser(const CUser &); void AddUser(const CUser &);
CUser *GetUser(int i) { return &m_Users[i]; }
// pass-thru
std::list<CUser>::iterator begin() { return m_Users.begin(); }
std::list<CUser>::iterator end() { return m_Users.end(); }
// operation // operation
void Hearing(const CCallsign &, const CCallsign &, const CCallsign &); void Hearing(const CCallsign &, const CCallsign &, const CCallsign &);
@ -54,7 +58,7 @@ public:
protected: protected:
// data // data
std::mutex m_Mutex; std::mutex m_Mutex;
std::vector<CUser> m_Users; std::list<CUser> m_Users;
}; };
//////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////

Loading…
Cancel
Save

Powered by TurnKey Linux.