mirror of
https://github.com/luanti-org/luanti.git
synced 2025-09-15 18:57:08 +00:00
Migrate to STL containers/algorithms.
This commit is contained in:
parent
e204bedf1d
commit
6a1670dbc3
63 changed files with 1330 additions and 1417 deletions
|
@ -24,6 +24,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
#include <jmutex.h>
|
||||
#include <jmutexautolock.h>
|
||||
#include "../porting.h" // For sleep_ms
|
||||
#include <list>
|
||||
#include <vector>
|
||||
|
||||
/*
|
||||
Queue with unique values with fast checking of value existence
|
||||
|
@ -43,11 +45,11 @@ public:
|
|||
bool push_back(Value value)
|
||||
{
|
||||
// Check if already exists
|
||||
if(m_map.find(value) != NULL)
|
||||
if(m_map.find(value) != m_map.end())
|
||||
return false;
|
||||
|
||||
// Add
|
||||
m_map.insert(value, 0);
|
||||
m_map[value] = 0;
|
||||
m_list.push_back(value);
|
||||
|
||||
return true;
|
||||
|
@ -55,22 +57,21 @@ public:
|
|||
|
||||
Value pop_front()
|
||||
{
|
||||
typename core::list<Value>::Iterator i = m_list.begin();
|
||||
typename std::list<Value>::iterator i = m_list.begin();
|
||||
Value value = *i;
|
||||
m_map.remove(value);
|
||||
m_map.erase(value);
|
||||
m_list.erase(i);
|
||||
return value;
|
||||
}
|
||||
|
||||
u32 size()
|
||||
{
|
||||
assert(m_list.size() == m_map.size());
|
||||
return m_list.size();
|
||||
return m_map.size();
|
||||
}
|
||||
|
||||
private:
|
||||
core::map<Value, u8> m_map;
|
||||
core::list<Value> m_list;
|
||||
std::map<Value, u8> m_map;
|
||||
std::list<Value> m_list;
|
||||
};
|
||||
|
||||
#if 1
|
||||
|
@ -95,31 +96,31 @@ public:
|
|||
{
|
||||
JMutexAutoLock lock(m_mutex);
|
||||
|
||||
typename core::map<Key, Value>::Node *n;
|
||||
typename std::map<Key, Value>::iterator n;
|
||||
n = m_values.find(name);
|
||||
|
||||
if(n == NULL)
|
||||
if(n == m_values.end())
|
||||
return false;
|
||||
|
||||
if(result != NULL)
|
||||
*result = n->getValue();
|
||||
*result = n->second;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
core::list<Value> getValues()
|
||||
std::list<Value> getValues()
|
||||
{
|
||||
core::list<Value> result;
|
||||
for(typename core::map<Key, Value>::Iterator
|
||||
i = m_values.getIterator();
|
||||
i.atEnd() == false; i++){
|
||||
result.push_back(i.getNode()->getValue());
|
||||
std::list<Value> result;
|
||||
for(typename std::map<Key, Value>::iterator
|
||||
i = m_values.begin();
|
||||
i != m_values.end(); ++i){
|
||||
result.push_back(i->second);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private:
|
||||
core::map<Key, Value> m_values;
|
||||
std::map<Key, Value> m_values;
|
||||
JMutex m_mutex;
|
||||
};
|
||||
#endif
|
||||
|
@ -163,10 +164,10 @@ public:
|
|||
u32 getId(const T &value)
|
||||
{
|
||||
JMutexAutoLock lock(m_mutex);
|
||||
typename core::map<T, u32>::Node *n;
|
||||
typename std::map<T, u32>::iterator n;
|
||||
n = m_value_to_id.find(value);
|
||||
if(n != NULL)
|
||||
return n->getValue();
|
||||
if(n != m_value_to_id.end())
|
||||
return n->second;
|
||||
m_id_to_value.push_back(value);
|
||||
u32 new_id = m_id_to_value.size();
|
||||
m_value_to_id.insert(value, new_id);
|
||||
|
@ -176,8 +177,8 @@ public:
|
|||
private:
|
||||
JMutex m_mutex;
|
||||
// Values are stored here at id-1 position (id 1 = [0])
|
||||
core::array<T> m_id_to_value;
|
||||
core::map<T, u32> m_value_to_id;
|
||||
std::vector<T> m_id_to_value;
|
||||
std::map<T, u32> m_value_to_id;
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -187,39 +188,52 @@ template<typename T>
|
|||
class Queue
|
||||
{
|
||||
public:
|
||||
Queue():
|
||||
m_list_size(0)
|
||||
{}
|
||||
|
||||
void push_back(T t)
|
||||
{
|
||||
m_list.push_back(t);
|
||||
++m_list_size;
|
||||
}
|
||||
|
||||
T pop_front()
|
||||
{
|
||||
if(m_list.size() == 0)
|
||||
if(m_list.empty())
|
||||
throw ItemNotFoundException("Queue: queue is empty");
|
||||
|
||||
typename core::list<T>::Iterator begin = m_list.begin();
|
||||
typename std::list<T>::iterator begin = m_list.begin();
|
||||
T t = *begin;
|
||||
m_list.erase(begin);
|
||||
--m_list_size;
|
||||
return t;
|
||||
}
|
||||
T pop_back()
|
||||
{
|
||||
if(m_list.size() == 0)
|
||||
if(m_list.empty())
|
||||
throw ItemNotFoundException("Queue: queue is empty");
|
||||
|
||||
typename core::list<T>::Iterator last = m_list.getLast();
|
||||
typename std::list<T>::iterator last = m_list.back();
|
||||
T t = *last;
|
||||
m_list.erase(last);
|
||||
--m_list_size;
|
||||
return t;
|
||||
}
|
||||
|
||||
u32 size()
|
||||
{
|
||||
return m_list.size();
|
||||
return m_list_size;
|
||||
}
|
||||
|
||||
bool empty()
|
||||
{
|
||||
return m_list.empty();
|
||||
}
|
||||
|
||||
protected:
|
||||
core::list<T> m_list;
|
||||
std::list<T> m_list;
|
||||
u32 m_list_size;
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -234,10 +248,10 @@ public:
|
|||
{
|
||||
m_mutex.Init();
|
||||
}
|
||||
u32 size()
|
||||
bool empty()
|
||||
{
|
||||
JMutexAutoLock lock(m_mutex);
|
||||
return m_list.size();
|
||||
return m_list.empty();
|
||||
}
|
||||
void push_back(T t)
|
||||
{
|
||||
|
@ -253,9 +267,9 @@ public:
|
|||
{
|
||||
JMutexAutoLock lock(m_mutex);
|
||||
|
||||
if(m_list.size() > 0)
|
||||
if(!m_list.empty())
|
||||
{
|
||||
typename core::list<T>::Iterator begin = m_list.begin();
|
||||
typename std::list<T>::iterator begin = m_list.begin();
|
||||
T t = *begin;
|
||||
m_list.erase(begin);
|
||||
return t;
|
||||
|
@ -279,9 +293,9 @@ public:
|
|||
{
|
||||
JMutexAutoLock lock(m_mutex);
|
||||
|
||||
if(m_list.size() > 0)
|
||||
if(!m_list.empty())
|
||||
{
|
||||
typename core::list<T>::Iterator last = m_list.getLast();
|
||||
typename std::list<T>::iterator last = m_list.back();
|
||||
T t = *last;
|
||||
m_list.erase(last);
|
||||
return t;
|
||||
|
@ -302,14 +316,14 @@ public:
|
|||
return m_mutex;
|
||||
}
|
||||
|
||||
core::list<T> & getList()
|
||||
std::list<T> & getList()
|
||||
{
|
||||
return m_list;
|
||||
}
|
||||
|
||||
protected:
|
||||
JMutex m_mutex;
|
||||
core::list<T> m_list;
|
||||
std::list<T> m_list;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -24,7 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
#include <iostream>
|
||||
|
||||
// Calculate the borders of a "d-radius" cube
|
||||
void getFacePositions(core::list<v3s16> &list, u16 d)
|
||||
void getFacePositions(std::list<v3s16> &list, u16 d)
|
||||
{
|
||||
if(d == 0)
|
||||
{
|
||||
|
|
|
@ -25,9 +25,10 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
#include "../irr_v3d.h"
|
||||
#include "../irr_aabb3d.h"
|
||||
#include <irrList.h>
|
||||
#include <list>
|
||||
|
||||
// Calculate the borders of a "d-radius" cube
|
||||
void getFacePositions(core::list<v3s16> &list, u16 d);
|
||||
void getFacePositions(std::list<v3s16> &list, u16 d);
|
||||
|
||||
class IndentationRaiser
|
||||
{
|
||||
|
|
|
@ -120,7 +120,7 @@ class GetResult
|
|||
public:
|
||||
Key key;
|
||||
T item;
|
||||
core::list<CallerInfo<Caller, CallerData> > callers;
|
||||
std::list<CallerInfo<Caller, CallerData> > callers;
|
||||
};
|
||||
|
||||
template<typename Key, typename T, typename Caller, typename CallerData>
|
||||
|
@ -152,16 +152,16 @@ public:
|
|||
|
||||
Key key;
|
||||
ResultQueue<Key, T, Caller, CallerData> *dest;
|
||||
core::list<CallerInfo<Caller, CallerData> > callers;
|
||||
std::list<CallerInfo<Caller, CallerData> > callers;
|
||||
};
|
||||
|
||||
template<typename Key, typename T, typename Caller, typename CallerData>
|
||||
class RequestQueue
|
||||
{
|
||||
public:
|
||||
u32 size()
|
||||
bool empty()
|
||||
{
|
||||
return m_queue.size();
|
||||
return m_queue.empty();
|
||||
}
|
||||
|
||||
void add(Key key, Caller caller, CallerData callerdata,
|
||||
|
@ -172,17 +172,17 @@ public:
|
|||
/*
|
||||
If the caller is already on the list, only update CallerData
|
||||
*/
|
||||
for(typename core::list< GetRequest<Key, T, Caller, CallerData> >::Iterator
|
||||
for(typename std::list< GetRequest<Key, T, Caller, CallerData> >::iterator
|
||||
i = m_queue.getList().begin();
|
||||
i != m_queue.getList().end(); i++)
|
||||
i != m_queue.getList().end(); ++i)
|
||||
{
|
||||
GetRequest<Key, T, Caller, CallerData> &request = *i;
|
||||
|
||||
if(request.key == key)
|
||||
{
|
||||
for(typename core::list< CallerInfo<Caller, CallerData> >::Iterator
|
||||
for(typename std::list< CallerInfo<Caller, CallerData> >::iterator
|
||||
i = request.callers.begin();
|
||||
i != request.callers.end(); i++)
|
||||
i != request.callers.end(); ++i)
|
||||
{
|
||||
CallerInfo<Caller, CallerData> &ca = *i;
|
||||
if(ca.caller == caller)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue