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/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
|
||||
{
|
||||
@ -170,9 +157,12 @@ CTerrain* CObjectManager::GetTerrain()
|
||||
|
||||
void CObjectManager::DeleteObject(CObjectEntry* entry)
|
||||
{
|
||||
std::map<ObjectKey, CObjectEntry*>::iterator it;
|
||||
while (m_Objects.end() != (it = find_if(m_Objects.begin(), m_Objects.end(), second_equals<CObjectEntry*>(entry))))
|
||||
m_Objects.erase(it);
|
||||
std::function<bool(const std::pair<ObjectKey, CObjectEntry*>&)> second_equals =
|
||||
[&entry](const std::pair<ObjectKey, CObjectEntry*>& a) { return a.second == entry; };
|
||||
|
||||
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;
|
||||
}
|
||||
@ -180,18 +170,12 @@ void CObjectManager::DeleteObject(CObjectEntry* entry)
|
||||
|
||||
void CObjectManager::UnloadObjects()
|
||||
{
|
||||
std::for_each(
|
||||
m_Objects.begin(),
|
||||
m_Objects.end(),
|
||||
delete_pair_2nd<ObjectKey, CObjectEntry*>
|
||||
);
|
||||
for (const std::pair<ObjectKey, CObjectEntry*>& p : m_Objects)
|
||||
delete p.second;
|
||||
m_Objects.clear();
|
||||
|
||||
std::for_each(
|
||||
m_ObjectBases.begin(),
|
||||
m_ObjectBases.end(),
|
||||
delete_pair_2nd<CStrW, CObjectBase*>
|
||||
);
|
||||
for (const std::pair<CStrW, CObjectBase*>& p : m_ObjectBases)
|
||||
delete p.second;
|
||||
m_ObjectBases.clear();
|
||||
}
|
||||
|
||||
|
@ -37,14 +37,6 @@
|
||||
|
||||
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()
|
||||
{
|
||||
#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
|
||||
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;
|
||||
|
||||
|
@ -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
|
||||
{
|
||||
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
|
||||
{
|
||||
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())
|
||||
return it->second;
|
||||
else
|
||||
@ -83,7 +77,8 @@ std::vector<CStr> CmdLineArgs::GetMultiple(const char* name) const
|
||||
ArgsT::const_iterator it = m_Args.begin();
|
||||
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())
|
||||
break;
|
||||
values.push_back(it->second);
|
||||
|
@ -33,32 +33,6 @@
|
||||
|
||||
#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:
|
||||
|
||||
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
|
||||
// be noticeable if they have the same priority and overlap).
|
||||
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()
|
||||
{
|
||||
std::vector<std::pair<ITerrainOverlay*, int> >::iterator newEnd =
|
||||
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());
|
||||
}
|
||||
|
||||
|
@ -31,12 +31,6 @@
|
||||
#include "ps/CLogger.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)
|
||||
{
|
||||
PROFILE2("PickEntityAtPoint");
|
||||
@ -64,7 +58,10 @@ entity_id_t EntitySelection::PickEntityAtPoint(CSimulation2& simulation, const C
|
||||
}
|
||||
|
||||
// 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);
|
||||
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()
|
||||
: m_SpeedMultiplier(0.f), m_IsTesting(false)
|
||||
{
|
||||
@ -179,7 +173,8 @@ 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()
|
||||
|
Loading…
Reference in New Issue
Block a user