forked from 0ad/0ad
Replace some functor structs with lambdas, closures or range-based fors.
This was SVN commit r16923.
This commit is contained in:
parent
36c6b50944
commit
558d43bac5
@ -30,19 +30,6 @@
|
|||||||
#include "simulation2/components/ICmpTerrain.h"
|
#include "simulation2/components/ICmpTerrain.h"
|
||||||
#include "simulation2/components/ICmpVisual.h"
|
#include "simulation2/components/ICmpVisual.h"
|
||||||
|
|
||||||
template<typename T, typename S>
|
|
||||||
static void delete_pair_2nd(std::pair<T,S> v)
|
|
||||||
{
|
|
||||||
delete v.second;
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename T>
|
|
||||||
struct second_equals
|
|
||||||
{
|
|
||||||
T x;
|
|
||||||
second_equals(const T& x) : x(x) {}
|
|
||||||
template<typename S> bool operator()(const S& v) { return v.second == x; }
|
|
||||||
};
|
|
||||||
|
|
||||||
bool CObjectManager::ObjectKey::operator< (const CObjectManager::ObjectKey& a) const
|
bool CObjectManager::ObjectKey::operator< (const CObjectManager::ObjectKey& a) const
|
||||||
{
|
{
|
||||||
@ -170,9 +157,12 @@ CTerrain* CObjectManager::GetTerrain()
|
|||||||
|
|
||||||
void CObjectManager::DeleteObject(CObjectEntry* entry)
|
void CObjectManager::DeleteObject(CObjectEntry* entry)
|
||||||
{
|
{
|
||||||
std::map<ObjectKey, CObjectEntry*>::iterator it;
|
std::function<bool(const std::pair<ObjectKey, CObjectEntry*>&)> second_equals =
|
||||||
while (m_Objects.end() != (it = find_if(m_Objects.begin(), m_Objects.end(), second_equals<CObjectEntry*>(entry))))
|
[&entry](const std::pair<ObjectKey, CObjectEntry*>& a) { return a.second == entry; };
|
||||||
m_Objects.erase(it);
|
|
||||||
|
std::map<ObjectKey, CObjectEntry*>::iterator it = m_Objects.begin();
|
||||||
|
while (m_Objects.end() != (it = find_if(it, m_Objects.end(), second_equals)))
|
||||||
|
it = m_Objects.erase(it);
|
||||||
|
|
||||||
delete entry;
|
delete entry;
|
||||||
}
|
}
|
||||||
@ -180,18 +170,12 @@ void CObjectManager::DeleteObject(CObjectEntry* entry)
|
|||||||
|
|
||||||
void CObjectManager::UnloadObjects()
|
void CObjectManager::UnloadObjects()
|
||||||
{
|
{
|
||||||
std::for_each(
|
for (const std::pair<ObjectKey, CObjectEntry*>& p : m_Objects)
|
||||||
m_Objects.begin(),
|
delete p.second;
|
||||||
m_Objects.end(),
|
|
||||||
delete_pair_2nd<ObjectKey, CObjectEntry*>
|
|
||||||
);
|
|
||||||
m_Objects.clear();
|
m_Objects.clear();
|
||||||
|
|
||||||
std::for_each(
|
for (const std::pair<CStrW, CObjectBase*>& p : m_ObjectBases)
|
||||||
m_ObjectBases.begin(),
|
delete p.second;
|
||||||
m_ObjectBases.end(),
|
|
||||||
delete_pair_2nd<CStrW, CObjectBase*>
|
|
||||||
);
|
|
||||||
m_ObjectBases.clear();
|
m_ObjectBases.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,14 +37,6 @@
|
|||||||
|
|
||||||
TIMER_ADD_CLIENT(tc_ShaderValidation);
|
TIMER_ADD_CLIENT(tc_ShaderValidation);
|
||||||
|
|
||||||
struct revcompare2nd
|
|
||||||
{
|
|
||||||
template<typename S, typename T> bool operator()(const std::pair<S, T>& a, const std::pair<S, T>& b) const
|
|
||||||
{
|
|
||||||
return b.second < a.second;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
CShaderManager::CShaderManager()
|
CShaderManager::CShaderManager()
|
||||||
{
|
{
|
||||||
#if USE_SHADER_XML_VALIDATION
|
#if USE_SHADER_XML_VALIDATION
|
||||||
@ -498,7 +490,10 @@ bool CShaderManager::NewEffect(const char* name, const CShaderDefines& baseDefin
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Sort by preference, tie-break on order of specification
|
// Sort by preference, tie-break on order of specification
|
||||||
std::stable_sort(usableTechs.begin(), usableTechs.end(), revcompare2nd());
|
std::stable_sort(usableTechs.begin(), usableTechs.end(),
|
||||||
|
[](const std::pair<XMBElement, int>& a, const std::pair<XMBElement, int>& b) {
|
||||||
|
return b.second < a.second;
|
||||||
|
});
|
||||||
|
|
||||||
CShaderDefines techDefines = baseDefines;
|
CShaderDefines techDefines = baseDefines;
|
||||||
|
|
||||||
|
@ -55,22 +55,16 @@ CmdLineArgs::CmdLineArgs(int argc, const char* argv[])
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
|
||||||
struct first_equals
|
|
||||||
{
|
|
||||||
T x;
|
|
||||||
first_equals(const T& x) : x(x) {}
|
|
||||||
template<typename S> bool operator()(const S& v) { return v.first == x; }
|
|
||||||
};
|
|
||||||
|
|
||||||
bool CmdLineArgs::Has(const char* name) const
|
bool CmdLineArgs::Has(const char* name) const
|
||||||
{
|
{
|
||||||
return find_if(m_Args.begin(), m_Args.end(), first_equals<CStr>(name)) != m_Args.end();
|
return m_Args.end() != find_if(m_Args.begin(), m_Args.end(),
|
||||||
|
[&name](const std::pair<CStr, CStr>& a) { return a.first == name; });
|
||||||
}
|
}
|
||||||
|
|
||||||
CStr CmdLineArgs::Get(const char* name) const
|
CStr CmdLineArgs::Get(const char* name) const
|
||||||
{
|
{
|
||||||
ArgsT::const_iterator it = find_if(m_Args.begin(), m_Args.end(), first_equals<CStr>(name));
|
ArgsT::const_iterator it = find_if(m_Args.begin(), m_Args.end(),
|
||||||
|
[&name](const std::pair<CStr, CStr>& a) { return a.first == name; });
|
||||||
if (it != m_Args.end())
|
if (it != m_Args.end())
|
||||||
return it->second;
|
return it->second;
|
||||||
else
|
else
|
||||||
@ -83,7 +77,8 @@ std::vector<CStr> CmdLineArgs::GetMultiple(const char* name) const
|
|||||||
ArgsT::const_iterator it = m_Args.begin();
|
ArgsT::const_iterator it = m_Args.begin();
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
it = find_if(it, m_Args.end(), first_equals<CStr>(name));
|
it = find_if(it, m_Args.end(),
|
||||||
|
[&name](const std::pair<CStr, CStr>& a) { return a.first == name; });
|
||||||
if (it == m_Args.end())
|
if (it == m_Args.end())
|
||||||
break;
|
break;
|
||||||
values.push_back(it->second);
|
values.push_back(it->second);
|
||||||
|
@ -33,32 +33,6 @@
|
|||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
// Handy things for STL:
|
|
||||||
|
|
||||||
/// Functor for sorting pairs, using the <-ordering of their second values.
|
|
||||||
struct compare2nd
|
|
||||||
{
|
|
||||||
template<typename S, typename T> bool operator()(const std::pair<S, T>& a, const std::pair<S, T>& b) const
|
|
||||||
{
|
|
||||||
return a.second < b.second;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Functor for comparing the firsts of pairs to a specified value.
|
|
||||||
template<typename S> struct equal1st
|
|
||||||
{
|
|
||||||
const S& val;
|
|
||||||
equal1st(const S& val) : val(val) {}
|
|
||||||
template <typename T> bool operator()(const std::pair<S, T>& a) const
|
|
||||||
{
|
|
||||||
return a.first == val;
|
|
||||||
}
|
|
||||||
private:
|
|
||||||
const equal1st& operator=(const equal1st& rhs);
|
|
||||||
};
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
// Global overlay list management:
|
// Global overlay list management:
|
||||||
|
|
||||||
static std::vector<std::pair<ITerrainOverlay*, int> > g_TerrainOverlayList;
|
static std::vector<std::pair<ITerrainOverlay*, int> > g_TerrainOverlayList;
|
||||||
@ -71,14 +45,16 @@ ITerrainOverlay::ITerrainOverlay(int priority)
|
|||||||
// overlays doesn't randomly disturb all the existing ones (which would
|
// overlays doesn't randomly disturb all the existing ones (which would
|
||||||
// be noticeable if they have the same priority and overlap).
|
// be noticeable if they have the same priority and overlap).
|
||||||
std::stable_sort(g_TerrainOverlayList.begin(), g_TerrainOverlayList.end(),
|
std::stable_sort(g_TerrainOverlayList.begin(), g_TerrainOverlayList.end(),
|
||||||
compare2nd());
|
[](const std::pair<ITerrainOverlay*, int>& a, const std::pair<ITerrainOverlay*, int>& b) {
|
||||||
|
return a.second < b.second;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
ITerrainOverlay::~ITerrainOverlay()
|
ITerrainOverlay::~ITerrainOverlay()
|
||||||
{
|
{
|
||||||
std::vector<std::pair<ITerrainOverlay*, int> >::iterator newEnd =
|
std::vector<std::pair<ITerrainOverlay*, int> >::iterator newEnd =
|
||||||
std::remove_if(g_TerrainOverlayList.begin(), g_TerrainOverlayList.end(),
|
std::remove_if(g_TerrainOverlayList.begin(), g_TerrainOverlayList.end(),
|
||||||
equal1st<ITerrainOverlay*>(this));
|
[this](const std::pair<ITerrainOverlay*, int>& a) { return a.first == this; });
|
||||||
g_TerrainOverlayList.erase(newEnd, g_TerrainOverlayList.end());
|
g_TerrainOverlayList.erase(newEnd, g_TerrainOverlayList.end());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,12 +31,6 @@
|
|||||||
#include "ps/CLogger.h"
|
#include "ps/CLogger.h"
|
||||||
#include "ps/Profiler2.h"
|
#include "ps/Profiler2.h"
|
||||||
|
|
||||||
namespace {
|
|
||||||
struct SortFun {
|
|
||||||
bool operator() (std::pair<float, CEntityHandle> i, std::pair<float, CEntityHandle> j) { return (i.first<j.first);}
|
|
||||||
} sortFun;
|
|
||||||
}
|
|
||||||
|
|
||||||
entity_id_t EntitySelection::PickEntityAtPoint(CSimulation2& simulation, const CCamera& camera, int screenX, int screenY, player_id_t player, bool allowEditorSelectables)
|
entity_id_t EntitySelection::PickEntityAtPoint(CSimulation2& simulation, const CCamera& camera, int screenX, int screenY, player_id_t player, bool allowEditorSelectables)
|
||||||
{
|
{
|
||||||
PROFILE2("PickEntityAtPoint");
|
PROFILE2("PickEntityAtPoint");
|
||||||
@ -64,7 +58,10 @@ entity_id_t EntitySelection::PickEntityAtPoint(CSimulation2& simulation, const C
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Sort hits by distance
|
// Sort hits by distance
|
||||||
std::sort(hits.begin(), hits.end(), sortFun);
|
std::sort(hits.begin(), hits.end(),
|
||||||
|
[](const std::pair<float, CEntityHandle>& a, const std::pair<float, CEntityHandle>& b) {
|
||||||
|
return a.first < b.first;
|
||||||
|
});
|
||||||
|
|
||||||
CmpPtr<ICmpRangeManager> cmpRangeManager(simulation, SYSTEM_ENTITY);
|
CmpPtr<ICmpRangeManager> cmpRangeManager(simulation, SYSTEM_ENTITY);
|
||||||
ENSURE(cmpRangeManager);
|
ENSURE(cmpRangeManager);
|
||||||
|
@ -165,12 +165,6 @@ void AtlasViewActor::SetParam(const std::wstring& name, const AtlasMessage::Colo
|
|||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
template<typename T, typename S>
|
|
||||||
static void delete_pair_2nd(std::pair<T,S> v)
|
|
||||||
{
|
|
||||||
delete v.second;
|
|
||||||
}
|
|
||||||
|
|
||||||
AtlasViewGame::AtlasViewGame()
|
AtlasViewGame::AtlasViewGame()
|
||||||
: m_SpeedMultiplier(0.f), m_IsTesting(false)
|
: m_SpeedMultiplier(0.f), m_IsTesting(false)
|
||||||
{
|
{
|
||||||
@ -179,7 +173,8 @@ AtlasViewGame::AtlasViewGame()
|
|||||||
|
|
||||||
AtlasViewGame::~AtlasViewGame()
|
AtlasViewGame::~AtlasViewGame()
|
||||||
{
|
{
|
||||||
std::for_each(m_SavedStates.begin(), m_SavedStates.end(), delete_pair_2nd<std::wstring, SimState*>);
|
for (const std::pair<std::wstring, SimState*>& p : m_SavedStates)
|
||||||
|
delete p.second;
|
||||||
}
|
}
|
||||||
|
|
||||||
CSimulation2* AtlasViewGame::GetSimulation2()
|
CSimulation2* AtlasViewGame::GetSimulation2()
|
||||||
|
Loading…
Reference in New Issue
Block a user