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
CUsers *users = GetUsers();
// 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
ReleaseUsers();
@ -724,10 +724,10 @@ void CReflector::SendJsonStationsObject(CUdpSocket &Socket, CIp &Ip)
// lock
CUsers *users = GetUsers();
// iterate on users
for ( int i = 0; i < users->GetSize(); i++ )
for ( auto it=users->begin(); it!=users->end(); )
{
users->GetUser(i)->GetJsonObject(Buffer);
if ( i < users->GetSize()-1 )
(*it++).GetJsonObject(Buffer);
if ( it != users->end() )
{
::strcat(Buffer, ",");
}

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

@ -4,6 +4,7 @@
//
// Created by Jean-Luc Deltombe (LX3JL) on 13/11/2015.
// Copyright © 2015 Jean-Luc Deltombe (LX3JL). All rights reserved.
// Copyright © 2020 Thomas A. Early, N7TAE
//
// ----------------------------------------------------------------------------
// This file is part of xlxd.
@ -45,7 +46,10 @@ public:
// management
int GetSize(void) const { return (int)m_Users.size(); }
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
void Hearing(const CCallsign &, const CCallsign &, const CCallsign &);
@ -53,8 +57,8 @@ public:
protected:
// data
std::mutex m_Mutex;
std::vector<CUser> m_Users;
std::mutex m_Mutex;
std::list<CUser> m_Users;
};
////////////////////////////////////////////////////////////////////////////////////////

Loading…
Cancel
Save

Powered by TurnKey Linux.