--count;
}
- m_unformatted.erase(0, del_unformatted);
- m_formatted.erase(0, del_formatted);
+ m_unformatted.erase(m_unformatted.begin(), m_unformatted.begin() + del_unformatted);
+ m_formatted.erase(m_formatted.begin(), m_formatted.begin() + del_formatted);
}
void ChatBuffer::deleteByAge(f32 maxAge)
}
u32 ChatBuffer::formatChatLine(const ChatLine& line, u32 cols,
- core::array<ChatFormattedLine>& destination) const
+ std::vector<ChatFormattedLine>& destination) const
{
u32 num_added = 0;
- core::array<ChatFormattedFragment> next_frags;
+ std::vector<ChatFormattedFragment> next_frags;
ChatFormattedLine next_line;
ChatFormattedFragment temp_frag;
u32 out_column = 0;
frag.column = out_column;
next_line.fragments.push_back(frag);
out_column += frag.text.size();
- next_frags.erase(0, 1);
+ next_frags.erase(next_frags.begin());
}
else
{
if (!line.empty())
m_history.push_back(line);
if (m_history.size() > m_history_limit)
- m_history.erase(0);
+ m_history.erase(m_history.begin());
m_history_index = m_history.size();
m_view = 0;
m_cursor = 0;
}
}
-void ChatPrompt::nickCompletion(const core::list<std::wstring>& names, bool backwards)
+void ChatPrompt::nickCompletion(const std::list<std::wstring>& names, bool backwards)
{
// Two cases:
// (a) m_nick_completion_start == m_nick_completion_end == 0
std::wstring prefix = m_line.substr(prefix_start, prefix_end - prefix_start);
// find all names that start with the selected prefix
- core::array<std::wstring> completions;
- for (core::list<std::wstring>::ConstIterator
+ std::vector<std::wstring> completions;
+ for (std::list<std::wstring>::const_iterator
i = names.begin();
- i != names.end(); i++)
+ i != names.end(); ++i)
{
if (str_starts_with(*i, prefix, true))
{
#include "irrlichttypes_bloated.h"
#include <string>
+#include <vector>
+#include <list>
// Chat console related classes, only used by the client
struct ChatFormattedLine
{
// Array of text fragments
- core::array<ChatFormattedFragment> fragments;
+ std::vector<ChatFormattedFragment> fragments;
// true if first line of one formatted ChatLine
bool first;
};
// Appends the formatted lines to the destination array and
// returns the number of formatted lines.
u32 formatChatLine(const ChatLine& line, u32 cols,
- core::array<ChatFormattedLine>& destination) const;
+ std::vector<ChatFormattedLine>& destination) const;
protected:
s32 getTopScrollPos() const;
// Scrollback size
u32 m_scrollback;
// Array of unformatted chat lines
- core::array<ChatLine> m_unformatted;
+ std::vector<ChatLine> m_unformatted;
// Number of character columns in console
u32 m_cols;
// Scroll position (console's top line index into m_formatted)
s32 m_scroll;
// Array of formatted lines
- core::array<ChatFormattedLine> m_formatted;
+ std::vector<ChatFormattedLine> m_formatted;
// Empty formatted line, for error returns
ChatFormattedLine m_empty_formatted_line;
};
void historyNext();
// Nick completion
- void nickCompletion(const core::list<std::wstring>& names, bool backwards);
+ void nickCompletion(const std::list<std::wstring>& names, bool backwards);
// Update console size and reformat the visible portion of the prompt
void reformat(u32 cols);
// Currently edited line
std::wstring m_line;
// History buffer
- core::array<std::wstring> m_history;
+ std::vector<std::wstring> m_history;
// History index (0 <= m_history_index <= m_history.size())
u32 m_history_index;
// Maximum number of history entries
#if USE_CURL
CURL *curl;
CURLcode res;
- for (core::list<MediaRequest>::Iterator i = m_file_requests.begin();
- i != m_file_requests.end(); i++) {
+ for (std::list<MediaRequest>::iterator i = m_file_requests.begin();
+ i != m_file_requests.end(); ++i) {
curl = curl_easy_init();
assert(curl);
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
}
}
- for (core::list<MediaFetchThread*>::Iterator i = m_media_fetch_threads.begin();
- i != m_media_fetch_threads.end(); i++)
+ for (std::list<MediaFetchThread*>::iterator i = m_media_fetch_threads.begin();
+ i != m_media_fetch_threads.end(); ++i)
delete *i;
}
if(m_map_timer_and_unload_interval.step(dtime, map_timer_and_unload_dtime))
{
ScopeProfiler sp(g_profiler, "Client: map timer and unload");
- core::list<v3s16> deleted_blocks;
+ std::list<v3s16> deleted_blocks;
m_env.getMap().timerUpdate(map_timer_and_unload_dtime,
g_settings->getFloat("client_unload_unused_data_timeout"),
&deleted_blocks);
NOTE: This loop is intentionally iterated the way it is.
*/
- core::list<v3s16>::Iterator i = deleted_blocks.begin();
- core::list<v3s16> sendlist;
+ std::list<v3s16>::iterator i = deleted_blocks.begin();
+ std::list<v3s16> sendlist;
for(;;)
{
if(sendlist.size() == 255 || i == deleted_blocks.end())
writeU16(&reply[0], TOSERVER_DELETEDBLOCKS);
reply[2] = sendlist.size();
u32 k = 0;
- for(core::list<v3s16>::Iterator
+ for(std::list<v3s16>::iterator
j = sendlist.begin();
- j != sendlist.end(); j++)
+ j != sendlist.end(); ++j)
{
writeV3S16(&reply[2+1+6*k], *j);
k++;
}
sendlist.push_back(*i);
- i++;
+ ++i;
}
}
<<std::endl;*/
int num_processed_meshes = 0;
- while(m_mesh_update_thread.m_queue_out.size() > 0)
+ while(!m_mesh_update_thread.m_queue_out.empty())
{
num_processed_meshes++;
MeshUpdateResult r = m_mesh_update_thread.m_queue_out.pop_front();
*/
if (m_media_receive_started) {
bool all_stopped = true;
- for (core::list<MediaFetchThread*>::Iterator thread = m_media_fetch_threads.begin();
- thread != m_media_fetch_threads.end(); thread++) {
+ for (std::list<MediaFetchThread*>::iterator thread = m_media_fetch_threads.begin();
+ thread != m_media_fetch_threads.end(); ++thread) {
all_stopped &= !(*thread)->IsRunning();
- while ((*thread)->m_file_data.size() > 0) {
+ while (!(*thread)->m_file_data.empty()) {
std::pair <std::string, std::string> out = (*thread)->m_file_data.pop_front();
++m_media_received_count;
}
{
- core::map<std::string, std::string>::Node *n;
+ std::map<std::string, std::string>::iterator n;
n = m_media_name_sha1_map.find(out.first);
- if(n == NULL)
+ if(n == m_media_name_sha1_map.end())
errorstream<<"The server sent a file that has not "
<<"been announced."<<std::endl;
else
}
}
if (all_stopped) {
- core::list<MediaRequest> fetch_failed;
- for (core::list<MediaFetchThread*>::Iterator thread = m_media_fetch_threads.begin();
- thread != m_media_fetch_threads.end(); thread++) {
- for (core::list<MediaRequest>::Iterator request = (*thread)->m_failed.begin();
- request != (*thread)->m_failed.end(); request++)
+ std::list<MediaRequest> fetch_failed;
+ for (std::list<MediaFetchThread*>::iterator thread = m_media_fetch_threads.begin();
+ thread != m_media_fetch_threads.end(); ++thread) {
+ for (std::list<MediaRequest>::iterator request = (*thread)->m_failed.begin();
+ request != (*thread)->m_failed.end(); ++request)
fetch_failed.push_back(*request);
(*thread)->m_failed.clear();
}
string name
}
*/
-void Client::request_media(const core::list<MediaRequest> &file_requests)
+void Client::request_media(const std::list<MediaRequest> &file_requests)
{
std::ostringstream os(std::ios_base::binary);
writeU16(os, TOSERVER_REQUEST_MEDIA);
writeU16(os, file_requests.size());
- for(core::list<MediaRequest>::ConstIterator i = file_requests.begin();
- i != file_requests.end(); i++) {
+ for(std::list<MediaRequest>::const_iterator i = file_requests.begin();
+ i != file_requests.end(); ++i) {
os<<serializeString(i->name);
}
infostream<<"Client: Received media announcement: packet size: "
<<datasize<<std::endl;
- core::list<MediaRequest> file_requests;
+ std::list<MediaRequest> file_requests;
for(int i=0; i<num_files; i++)
{
std::string sha1_hex = hex_encode(sha1_raw);
std::ostringstream tmp_os(std::ios_base::binary);
bool found_in_cache = m_media_cache.load_sha1(sha1_raw, tmp_os);
- m_media_name_sha1_map.set(name, sha1_raw);
+ m_media_name_sha1_map[name] = sha1_raw;
// If found in cache, try to load it from there
if(found_in_cache)
request_media(file_requests);
} else {
#if USE_CURL
- core::list<MediaFetchThread*>::Iterator cur = m_media_fetch_threads.begin();
- for(core::list<MediaRequest>::Iterator i = file_requests.begin();
- i != file_requests.end(); i++) {
+ std::list<MediaFetchThread*>::iterator cur = m_media_fetch_threads.begin();
+ for(std::list<MediaRequest>::iterator i = file_requests.begin();
+ i != file_requests.end(); ++i) {
(*cur)->m_file_requests.push_back(*i);
cur++;
if (cur == m_media_fetch_threads.end())
cur = m_media_fetch_threads.begin();
}
- for (core::list<MediaFetchThread*>::Iterator i = m_media_fetch_threads.begin();
- i != m_media_fetch_threads.end(); i++) {
+ for (std::list<MediaFetchThread*>::iterator i = m_media_fetch_threads.begin();
+ i != m_media_fetch_threads.end(); ++i) {
(*i)->m_remote_url = remote_media;
(*i)->Start();
}
}
{
- core::map<std::string, std::string>::Node *n;
+ std::map<std::string, std::string>::iterator n;
n = m_media_name_sha1_map.find(name);
- if(n == NULL)
+ if(n == m_media_name_sha1_map.end())
errorstream<<"The server sent a file that has not "
<<"been announced."<<std::endl;
else
void Client::removeNode(v3s16 p)
{
- core::map<v3s16, MapBlock*> modified_blocks;
+ std::map<v3s16, MapBlock*> modified_blocks;
try
{
// add urgent task to update the modified node
addUpdateMeshTaskForNode(p, false, true);
- for(core::map<v3s16, MapBlock * >::Iterator
- i = modified_blocks.getIterator();
- i.atEnd() == false; i++)
+ for(std::map<v3s16, MapBlock * >::iterator
+ i = modified_blocks.begin();
+ i != modified_blocks.end(); ++i)
{
- v3s16 p = i.getNode()->getKey();
- addUpdateMeshTaskWithEdge(p);
+ addUpdateMeshTaskWithEdge(i->first);
}
}
{
TimeTaker timer1("Client::addNode()");
- core::map<v3s16, MapBlock*> modified_blocks;
+ std::map<v3s16, MapBlock*> modified_blocks;
try
{
catch(InvalidPositionException &e)
{}
- for(core::map<v3s16, MapBlock * >::Iterator
- i = modified_blocks.getIterator();
- i.atEnd() == false; i++)
+ for(std::map<v3s16, MapBlock * >::iterator
+ i = modified_blocks.begin();
+ i != modified_blocks.end(); ++i)
{
- v3s16 p = i.getNode()->getKey();
- addUpdateMeshTaskWithEdge(p);
+ addUpdateMeshTaskWithEdge(i->first);
}
}
core::line3d<f32> shootline_on_map
)
{
- core::array<DistanceSortedActiveObject> objects;
+ std::vector<DistanceSortedActiveObject> objects;
m_env.getActiveObjects(from_pos_f_on_map, max_d, objects);
// Sort them.
// After this, the closest object is the first in the array.
- objects.sort();
+ std::sort(objects.begin(), objects.end());
for(u32 i=0; i<objects.size(); i++)
{
<<std::endl;*/
}
-core::list<std::wstring> Client::getConnectedPlayerNames()
+std::list<std::wstring> Client::getConnectedPlayerNames()
{
- core::list<Player*> players = m_env.getPlayers(true);
- core::list<std::wstring> playerNames;
- for(core::list<Player*>::Iterator
+ std::list<Player*> players = m_env.getPlayers(true);
+ std::list<std::wstring> playerNames;
+ for(std::list<Player*>::iterator
i = players.begin();
- i != players.end(); i++)
+ i != players.end(); ++i)
{
Player *player = *i;
playerNames.push_back(narrow_to_wide(player->getName()));
#include "server.h"
#include "particles.h"
#include "util/pointedthing.h"
+#include <algorithm>
struct MeshMakeData;
class MapBlockMesh;
void * Thread();
- core::list<MediaRequest> m_file_requests;
+ std::list<MediaRequest> m_file_requests;
MutexedQueue<std::pair<std::string, std::string> > m_file_data;
- core::list<MediaRequest> m_failed;
+ std::list<MediaRequest> m_failed;
std::string m_remote_url;
IGameDef *m_gamedef;
};
// Prints a line or two of info
void printDebugInfo(std::ostream &os);
- core::list<std::wstring> getConnectedPlayerNames();
+ std::list<std::wstring> getConnectedPlayerNames();
float getAnimationTime();
// Insert a media file appropriately into the appropriate manager
bool loadMedia(const std::string &data, const std::string &filename);
- void request_media(const core::list<MediaRequest> &file_requests);
+ void request_media(const std::list<MediaRequest> &file_requests);
// Virtual methods from con::PeerHandler
void peerAdded(con::Peer *peer);
MtEventManager *m_event;
MeshUpdateThread m_mesh_update_thread;
- core::list<MediaFetchThread*> m_media_fetch_threads;
+ std::list<MediaFetchThread*> m_media_fetch_threads;
ClientEnvironment m_env;
con::Connection m_con;
IrrlichtDevice *m_device;
bool m_inventory_updated;
Inventory *m_inventory_from_server;
float m_inventory_from_server_age;
- core::map<v3s16, bool> m_active_blocks;
+ std::set<v3s16> m_active_blocks;
PacketCounter m_packetcounter;
// Block mesh animation parameters
float m_animation_time;
Queue<ClientEvent> m_client_event_queue;
FileCache m_media_cache;
// Mapping from media file name to SHA1 checksum
- core::map<std::string, std::string> m_media_name_sha1_map;
+ std::map<std::string, std::string> m_media_name_sha1_map;
bool m_media_receive_started;
u32 m_media_count;
u32 m_media_received_count;
#include "profiler.h"
#include "settings.h"
#include "util/mathconstants.h"
+#include <algorithm>
#define PP(x) "("<<(x).X<<","<<(x).Y<<","<<(x).Z<<")"
{
//JMutexAutoLock lock(m_sector_mutex); // Bulk comment-out
- m_sectors.insert(p2d, sector);
+ m_sectors[p2d] = sector;
}
return sector;
INodeDefManager *nodemgr = m_gamedef->ndef();
- for(core::map<v3s16, MapBlock*>::Iterator
- i = m_drawlist.getIterator();
- i.atEnd() == false; i++)
+ for(std::map<v3s16, MapBlock*>::iterator
+ i = m_drawlist.begin();
+ i != m_drawlist.end(); ++i)
{
- MapBlock *block = i.getNode()->getValue();
+ MapBlock *block = i->second;
block->refDrop();
}
m_drawlist.clear();
// Blocks from which stuff was actually drawn
//u32 blocks_without_stuff = 0;
- for(core::map<v2s16, MapSector*>::Iterator
- si = m_sectors.getIterator();
- si.atEnd() == false; si++)
+ for(std::map<v2s16, MapSector*>::iterator
+ si = m_sectors.begin();
+ si != m_sectors.end(); ++si)
{
- MapSector *sector = si.getNode()->getValue();
+ MapSector *sector = si->second;
v2s16 sp = sector->getPos();
if(m_control.range_all == false)
continue;
}
- core::list< MapBlock * > sectorblocks;
+ std::list< MapBlock * > sectorblocks;
sector->getBlocks(sectorblocks);
/*
u32 sector_blocks_drawn = 0;
- core::list< MapBlock * >::Iterator i;
+ std::list< MapBlock * >::iterator i;
for(i=sectorblocks.begin(); i!=sectorblocks.end(); i++)
{
MapBlock *block = *i;
} // foreach sectorblocks
if(sector_blocks_drawn != 0)
- m_last_drawn_sectors[sp] = true;
+ m_last_drawn_sectors.insert(sp);
}
m_control.blocks_would_have_drawn = blocks_would_have_drawn;
struct MeshBufList
{
video::SMaterial m;
- core::list<scene::IMeshBuffer*> bufs;
+ std::list<scene::IMeshBuffer*> bufs;
};
struct MeshBufListList
{
- core::list<MeshBufList> lists;
+ std::list<MeshBufList> lists;
void clear()
{
void add(scene::IMeshBuffer *buf)
{
- for(core::list<MeshBufList>::Iterator i = lists.begin();
- i != lists.end(); i++){
+ for(std::list<MeshBufList>::iterator i = lists.begin();
+ i != lists.end(); ++i){
MeshBufList &l = *i;
if(l.m == buf->getMaterial()){
l.bufs.push_back(buf);
MeshBufListList drawbufs;
- for(core::map<v3s16, MapBlock*>::Iterator
- i = m_drawlist.getIterator();
- i.atEnd() == false; i++)
+ for(std::map<v3s16, MapBlock*>::iterator
+ i = m_drawlist.begin();
+ i != m_drawlist.end(); ++i)
{
- MapBlock *block = i.getNode()->getValue();
+ MapBlock *block = i->second;
// If the mesh of the block happened to get deleted, ignore it
if(block->mesh == NULL)
}
}
- core::list<MeshBufList> &lists = drawbufs.lists;
+ std::list<MeshBufList> &lists = drawbufs.lists;
int timecheck_counter = 0;
- for(core::list<MeshBufList>::Iterator i = lists.begin();
- i != lists.end(); i++)
+ for(std::list<MeshBufList>::iterator i = lists.begin();
+ i != lists.end(); ++i)
{
{
timecheck_counter++;
driver->setMaterial(list.m);
- for(core::list<scene::IMeshBuffer*>::Iterator j = list.bufs.begin();
- j != list.bufs.end(); j++)
+ for(std::list<scene::IMeshBuffer*>::iterator j = list.bufs.begin();
+ j != list.bufs.end(); ++j)
{
scene::IMeshBuffer *buf = *j;
driver->drawMeshBuffer(buf);
float sunlight_min_d = max_d*0.8;
if(sunlight_min_d > 35*BS)
sunlight_min_d = 35*BS;
- core::array<int> values;
+ std::vector<int> values;
for(u32 i=0; i<sizeof(z_directions)/sizeof(*z_directions); i++){
v3f z_dir = z_directions[i];
z_dir.normalize();
}
int brightness_sum = 0;
int brightness_count = 0;
- values.sort();
+ std::sort(values.begin(), values.end());
u32 num_values_to_use = values.size();
if(num_values_to_use >= 10)
num_values_to_use -= num_values_to_use/2;
#include "irrlichttypes_extrabloated.h"
#include "map.h"
+#include <set>
+#include <map>
struct MapDrawControl
{
// Check if sector was drawn on last render()
bool sectorWasDrawn(v2s16 p)
{
- return (m_last_drawn_sectors.find(p) != NULL);
+ return (m_last_drawn_sectors.find(p) != m_last_drawn_sectors.end());
}
private:
f32 m_camera_fov;
JMutex m_camera_mutex;
- core::map<v3s16, MapBlock*> m_drawlist;
+ std::map<v3s16, MapBlock*> m_drawlist;
- core::map<v2s16, bool> m_last_drawn_sectors;
+ std::set<v2s16> m_last_drawn_sectors;
};
#endif
ClientEnvironment *env)
{
// Find factory function
- core::map<u16, Factory>::Node *n;
+ std::map<u16, Factory>::iterator n;
n = m_types.find(type);
- if(n == NULL)
+ if(n == m_types.end())
{
// If factory is not found, just return.
dstream<<"WARNING: ClientActiveObject: No factory for type="
return NULL;
}
- Factory f = n->getValue();
+ Factory f = n->second;
ClientActiveObject *object = (*f)(gamedef, env);
return object;
}
void ClientActiveObject::registerType(u16 type, Factory f)
{
- core::map<u16, Factory>::Node *n;
+ std::map<u16, Factory>::iterator n;
n = m_types.find(type);
- if(n)
+ if(n != m_types.end())
return;
- m_types.insert(type, f);
+ m_types[type] = f;
}
#include "irrlichttypes_extrabloated.h"
#include "activeobject.h"
+#include <map>
/*
ClientEnvironment *m_env;
private:
// Used for creating objects based on type
- static core::map<u16, Factory> m_types;
+ static std::map<u16, Factory> m_types;
};
struct DistanceSortedActiveObject
d = a_d;
}
- bool operator < (DistanceSortedActiveObject &other)
+ bool operator < (const DistanceSortedActiveObject &other) const
{
return d < other.d;
}
return b;
}
-core::list<SharedBuffer<u8> > makeSplitPacket(
+std::list<SharedBuffer<u8> > makeSplitPacket(
SharedBuffer<u8> data,
u32 chunksize_max,
u16 seqnum)
{
// Chunk packets, containing the TYPE_SPLIT header
- core::list<SharedBuffer<u8> > chunks;
+ std::list<SharedBuffer<u8> > chunks;
u32 chunk_header_size = 7;
u32 maximum_data_size = chunksize_max - chunk_header_size;
u32 start = 0;
u32 end = 0;
u32 chunk_num = 0;
+ u16 chunk_count = 0;
do{
end = start + maximum_data_size - 1;
if(end > data.getSize() - 1)
memcpy(&chunk[chunk_header_size], &data[start], payload_size);
chunks.push_back(chunk);
+ chunk_count++;
start = end + 1;
chunk_num++;
}
while(end != data.getSize() - 1);
- u16 chunk_count = chunks.getSize();
-
- core::list<SharedBuffer<u8> >::Iterator i = chunks.begin();
- for(; i != chunks.end(); i++)
+ for(std::list<SharedBuffer<u8> >::iterator i = chunks.begin();
+ i != chunks.end(); ++i)
{
// Write chunk_count
writeU16(&((*i)[3]), chunk_count);
return chunks;
}
-core::list<SharedBuffer<u8> > makeAutoSplitPacket(
+std::list<SharedBuffer<u8> > makeAutoSplitPacket(
SharedBuffer<u8> data,
u32 chunksize_max,
u16 &split_seqnum)
{
u32 original_header_size = 1;
- core::list<SharedBuffer<u8> > list;
+ std::list<SharedBuffer<u8> > list;
if(data.getSize() + original_header_size > chunksize_max)
{
list = makeSplitPacket(data, chunksize_max, split_seqnum);
ReliablePacketBuffer
*/
+ReliablePacketBuffer::ReliablePacketBuffer(): m_list_size(0) {}
+
void ReliablePacketBuffer::print()
{
- core::list<BufferedPacket>::Iterator i;
- i = m_list.begin();
- for(; i != m_list.end(); i++)
+ for(std::list<BufferedPacket>::iterator i = m_list.begin();
+ i != m_list.end();
+ ++i)
{
u16 s = readU16(&(i->data[BASE_HEADER_SIZE+1]));
dout_con<<s<<" ";
}
u32 ReliablePacketBuffer::size()
{
- return m_list.getSize();
+ return m_list_size;
}
RPBSearchResult ReliablePacketBuffer::findPacket(u16 seqnum)
{
- core::list<BufferedPacket>::Iterator i;
- i = m_list.begin();
- for(; i != m_list.end(); i++)
+ std::list<BufferedPacket>::iterator i = m_list.begin();
+ for(; i != m_list.end(); ++i)
{
u16 s = readU16(&(i->data[BASE_HEADER_SIZE+1]));
/*dout_con<<"findPacket(): finding seqnum="<<seqnum
if(empty())
throw NotFoundException("Buffer is empty");
BufferedPacket p = *m_list.begin();
- core::list<BufferedPacket>::Iterator i = m_list.begin();
- m_list.erase(i);
+ m_list.erase(m_list.begin());
+ --m_list_size;
return p;
}
BufferedPacket ReliablePacketBuffer::popSeqnum(u16 seqnum)
}
BufferedPacket p = *r;
m_list.erase(r);
+ --m_list_size;
return p;
}
void ReliablePacketBuffer::insert(BufferedPacket &p)
assert(type == TYPE_RELIABLE);
u16 seqnum = readU16(&p.data[BASE_HEADER_SIZE+1]);
+ ++m_list_size;
// Find the right place for the packet and insert it there
// If list is empty, just add it
return;
}
// Otherwise find the right place
- core::list<BufferedPacket>::Iterator i;
- i = m_list.begin();
+ std::list<BufferedPacket>::iterator i = m_list.begin();
// Find the first packet in the list which has a higher seqnum
- for(; i != m_list.end(); i++){
+ for(; i != m_list.end(); ++i){
u16 s = readU16(&(i->data[BASE_HEADER_SIZE+1]));
if(s == seqnum){
+ --m_list_size;
throw AlreadyExistsException("Same seqnum in list");
}
if(seqnum_higher(s, seqnum)){
return;
}
// Insert before i
- m_list.insert_before(i, p);
+ m_list.insert(i, p);
}
void ReliablePacketBuffer::incrementTimeouts(float dtime)
{
- core::list<BufferedPacket>::Iterator i;
- i = m_list.begin();
- for(; i != m_list.end(); i++){
+ for(std::list<BufferedPacket>::iterator i = m_list.begin();
+ i != m_list.end(); ++i)
+ {
i->time += dtime;
i->totaltime += dtime;
}
void ReliablePacketBuffer::resetTimedOuts(float timeout)
{
- core::list<BufferedPacket>::Iterator i;
- i = m_list.begin();
- for(; i != m_list.end(); i++){
+ for(std::list<BufferedPacket>::iterator i = m_list.begin();
+ i != m_list.end(); ++i)
+ {
if(i->time >= timeout)
i->time = 0.0;
}
bool ReliablePacketBuffer::anyTotaltimeReached(float timeout)
{
- core::list<BufferedPacket>::Iterator i;
- i = m_list.begin();
- for(; i != m_list.end(); i++){
+ for(std::list<BufferedPacket>::iterator i = m_list.begin();
+ i != m_list.end(); ++i)
+ {
if(i->totaltime >= timeout)
return true;
}
return false;
}
-core::list<BufferedPacket> ReliablePacketBuffer::getTimedOuts(float timeout)
+std::list<BufferedPacket> ReliablePacketBuffer::getTimedOuts(float timeout)
{
- core::list<BufferedPacket> timed_outs;
- core::list<BufferedPacket>::Iterator i;
- i = m_list.begin();
- for(; i != m_list.end(); i++)
+ std::list<BufferedPacket> timed_outs;
+ for(std::list<BufferedPacket>::iterator i = m_list.begin();
+ i != m_list.end(); ++i)
{
if(i->time >= timeout)
timed_outs.push_back(*i);
IncomingSplitBuffer::~IncomingSplitBuffer()
{
- core::map<u16, IncomingSplitPacket*>::Iterator i;
- i = m_buf.getIterator();
- for(; i.atEnd() == false; i++)
+ for(std::map<u16, IncomingSplitPacket*>::iterator i = m_buf.begin();
+ i != m_buf.end(); ++i)
{
- delete i.getNode()->getValue();
+ delete i->second;
}
}
/*
u16 chunk_num = readU16(&p.data[BASE_HEADER_SIZE+5]);
// Add if doesn't exist
- if(m_buf.find(seqnum) == NULL)
+ if(m_buf.find(seqnum) == m_buf.end())
{
IncomingSplitPacket *sp = new IncomingSplitPacket();
sp->chunk_count = chunk_count;
// If chunk already exists, ignore it.
// Sometimes two identical packets may arrive when there is network
// lag and the server re-sends stuff.
- if(sp->chunks.find(chunk_num) != NULL)
+ if(sp->chunks.find(chunk_num) != sp->chunks.end())
return SharedBuffer<u8>();
// Cut chunk data out of packet
// Calculate total size
u32 totalsize = 0;
- core::map<u16, SharedBuffer<u8> >::Iterator i;
- i = sp->chunks.getIterator();
- for(; i.atEnd() == false; i++)
+ for(std::map<u16, SharedBuffer<u8> >::iterator i = sp->chunks.begin();
+ i != sp->chunks.end(); ++i)
{
- totalsize += i.getNode()->getValue().getSize();
+ totalsize += i->second.getSize();
}
SharedBuffer<u8> fulldata(totalsize);
}
// Remove sp from buffer
- m_buf.remove(seqnum);
+ m_buf.erase(seqnum);
delete sp;
return fulldata;
}
void IncomingSplitBuffer::removeUnreliableTimedOuts(float dtime, float timeout)
{
- core::list<u16> remove_queue;
- core::map<u16, IncomingSplitPacket*>::Iterator i;
- i = m_buf.getIterator();
- for(; i.atEnd() == false; i++)
+ std::list<u16> remove_queue;
+ for(std::map<u16, IncomingSplitPacket*>::iterator i = m_buf.begin();
+ i != m_buf.end(); ++i)
{
- IncomingSplitPacket *p = i.getNode()->getValue();
+ IncomingSplitPacket *p = i->second;
// Reliable ones are not removed by timeout
if(p->reliable == true)
continue;
p->time += dtime;
if(p->time >= timeout)
- remove_queue.push_back(i.getNode()->getKey());
+ remove_queue.push_back(i->first);
}
- core::list<u16>::Iterator j;
- j = remove_queue.begin();
- for(; j != remove_queue.end(); j++)
+ for(std::list<u16>::iterator j = remove_queue.begin();
+ j != remove_queue.end(); ++j)
{
dout_con<<"NOTE: Removing timed out unreliable split packet"
<<std::endl;
delete m_buf[*j];
- m_buf.remove(*j);
+ m_buf.erase(*j);
}
}
{
stop();
// Delete peers
- for(core::map<u16, Peer*>::Iterator
- j = m_peers.getIterator();
- j.atEnd() == false; j++)
+ for(std::map<u16, Peer*>::iterator
+ j = m_peers.begin();
+ j != m_peers.end(); ++j)
{
- Peer *peer = j.getNode()->getValue();
- delete peer;
+ delete j->second;
}
}
runTimeouts(dtime);
- while(m_command_queue.size() != 0){
+ while(!m_command_queue.empty()){
ConnectionCommand c = m_command_queue.pop_front();
processCommand(c);
}
void Connection::send(float dtime)
{
- for(core::map<u16, Peer*>::Iterator
- j = m_peers.getIterator();
- j.atEnd() == false; j++)
+ for(std::map<u16, Peer*>::iterator
+ j = m_peers.begin();
+ j != m_peers.end(); ++j)
{
- Peer *peer = j.getNode()->getValue();
+ Peer *peer = j->second;
peer->m_sendtime_accu += dtime;
peer->m_num_sent = 0;
peer->m_max_num_sent = peer->m_sendtime_accu *
peer->m_max_packets_per_second;
}
Queue<OutgoingPacket> postponed_packets;
- while(m_outgoing_queue.size() != 0){
+ while(!m_outgoing_queue.empty()){
OutgoingPacket packet = m_outgoing_queue.pop_front();
Peer *peer = getPeerNoEx(packet.peer_id);
if(!peer)
postponed_packets.push_back(packet);
}
}
- while(postponed_packets.size() != 0){
+ while(!postponed_packets.empty()){
m_outgoing_queue.push_back(postponed_packets.pop_front());
}
- for(core::map<u16, Peer*>::Iterator
- j = m_peers.getIterator();
- j.atEnd() == false; j++)
+ for(std::map<u16, Peer*>::iterator
+ j = m_peers.begin();
+ j != m_peers.end(); ++j)
{
- Peer *peer = j.getNode()->getValue();
+ Peer *peer = j->second;
peer->m_sendtime_accu -= (float)peer->m_num_sent /
peer->m_max_packets_per_second;
if(peer->m_sendtime_accu > 10. / peer->m_max_packets_per_second)
Allow only entries that have has_sent_with_id==false.
*/
- core::map<u16, Peer*>::Iterator j;
- j = m_peers.getIterator();
- for(; j.atEnd() == false; j++)
+ std::map<u16, Peer*>::iterator j;
+ j = m_peers.begin();
+ for(; j != m_peers.end(); ++j)
{
- Peer *peer = j.getNode()->getValue();
+ Peer *peer = j->second;
if(peer->has_sent_with_id)
continue;
if(peer->address == sender)
If no peer was found with the same address and port,
we shall assume it is a new peer and create an entry.
*/
- if(j.atEnd())
+ if(j == m_peers.end())
{
// Pass on to adding the peer
}
// Else: A peer was found.
else
{
- Peer *peer = j.getNode()->getValue();
+ Peer *peer = j->second;
peer_id = peer->id;
PrintInfo(derr_con);
derr_con<<"WARNING: Assuming unknown peer to be "
for(;;)
{
// Check if exists
- if(m_peers.find(peer_id_new) == NULL)
+ if(m_peers.find(peer_id_new) == m_peers.end())
break;
// Check for overflow
if(peer_id_new == 65535){
// Create a peer
Peer *peer = new Peer(peer_id_new, sender);
- m_peers.insert(peer->id, peer);
+ m_peers[peer->id] = peer;
// Create peer addition event
ConnectionEvent e;
// Go on and process whatever it sent
}
- core::map<u16, Peer*>::Node *node = m_peers.find(peer_id);
+ std::map<u16, Peer*>::iterator node = m_peers.find(peer_id);
- if(node == NULL)
+ if(node == m_peers.end())
{
// Peer not found
// This means that the peer id of the sender is not PEER_ID_INEXISTENT
throw InvalidIncomingDataException("Peer not found (possible timeout)");
}
- Peer *peer = node->getValue();
+ Peer *peer = node->second;
// Validate peer address
if(peer->address != sender)
float congestion_control_min_rate
= g_settings->getFloat("congestion_control_min_rate");
- core::list<u16> timeouted_peers;
- core::map<u16, Peer*>::Iterator j;
- j = m_peers.getIterator();
- for(; j.atEnd() == false; j++)
+ std::list<u16> timeouted_peers;
+ for(std::map<u16, Peer*>::iterator j = m_peers.begin();
+ j != m_peers.end(); ++j)
{
- Peer *peer = j.getNode()->getValue();
+ Peer *peer = j->second;
// Update congestion control values
peer->congestion_control_aim_rtt = congestion_control_aim_rtt;
float resend_timeout = peer->resend_timeout;
for(u16 i=0; i<CHANNEL_COUNT; i++)
{
- core::list<BufferedPacket> timed_outs;
- core::list<BufferedPacket>::Iterator j;
+ std::list<BufferedPacket> timed_outs;
Channel *channel = &peer->channels[i];
channel->outgoing_reliables.resetTimedOuts(resend_timeout);
- j = timed_outs.begin();
- for(; j != timed_outs.end(); j++)
+ for(std::list<BufferedPacket>::iterator j = timed_outs.begin();
+ j != timed_outs.end(); ++j)
{
u16 peer_id = readPeerId(*(j->data));
u8 channel = readChannel(*(j->data));
}
// Remove timed out peers
- core::list<u16>::Iterator i = timeouted_peers.begin();
- for(; i != timeouted_peers.end(); i++)
+ for(std::list<u16>::iterator i = timeouted_peers.begin();
+ i != timeouted_peers.end(); ++i)
{
PrintInfo(derr_con);
derr_con<<"RunTimeouts(): Removing peer "<<(*i)<<std::endl;
dout_con<<getDesc()<<" connecting to "<<address.serializeString()
<<":"<<address.getPort()<<std::endl;
- core::map<u16, Peer*>::Node *node = m_peers.find(PEER_ID_SERVER);
- if(node != NULL){
+ std::map<u16, Peer*>::iterator node = m_peers.find(PEER_ID_SERVER);
+ if(node != m_peers.end()){
throw ConnectionException("Already connected to a server");
}
Peer *peer = new Peer(PEER_ID_SERVER, address);
- m_peers.insert(peer->id, peer);
+ m_peers[peer->id] = peer;
// Create event
ConnectionEvent e;
writeU8(&data[1], CONTROLTYPE_DISCO);
// Send to all
- core::map<u16, Peer*>::Iterator j;
- j = m_peers.getIterator();
- for(; j.atEnd() == false; j++)
+ for(std::map<u16, Peer*>::iterator j = m_peers.begin();
+ j != m_peers.end(); ++j)
{
- Peer *peer = j.getNode()->getValue();
+ Peer *peer = j->second;
rawSendAsPacket(peer->id, 0, data, false);
}
}
void Connection::sendToAll(u8 channelnum, SharedBuffer<u8> data, bool reliable)
{
- core::map<u16, Peer*>::Iterator j;
- j = m_peers.getIterator();
- for(; j.atEnd() == false; j++)
+ for(std::map<u16, Peer*>::iterator j = m_peers.begin();
+ j != m_peers.end(); ++j)
{
- Peer *peer = j.getNode()->getValue();
+ Peer *peer = j->second;
send(peer->id, channelnum, data, reliable);
}
}
if(reliable)
chunksize_max -= RELIABLE_HEADER_SIZE;
- core::list<SharedBuffer<u8> > originals;
+ std::list<SharedBuffer<u8> > originals;
originals = makeAutoSplitPacket(data, chunksize_max,
channel->next_outgoing_split_seqnum);
- core::list<SharedBuffer<u8> >::Iterator i;
- i = originals.begin();
- for(; i != originals.end(); i++)
+ for(std::list<SharedBuffer<u8> >::iterator i = originals.begin();
+ i != originals.end(); ++i)
{
SharedBuffer<u8> original = *i;
Peer* Connection::getPeer(u16 peer_id)
{
- core::map<u16, Peer*>::Node *node = m_peers.find(peer_id);
+ std::map<u16, Peer*>::iterator node = m_peers.find(peer_id);
- if(node == NULL){
+ if(node == m_peers.end()){
throw PeerNotFoundException("GetPeer: Peer not found (possible timeout)");
}
// Error checking
- assert(node->getValue()->id == peer_id);
+ assert(node->second->id == peer_id);
- return node->getValue();
+ return node->second;
}
Peer* Connection::getPeerNoEx(u16 peer_id)
{
- core::map<u16, Peer*>::Node *node = m_peers.find(peer_id);
+ std::map<u16, Peer*>::iterator node = m_peers.find(peer_id);
- if(node == NULL){
+ if(node == m_peers.end()){
return NULL;
}
// Error checking
- assert(node->getValue()->id == peer_id);
+ assert(node->second->id == peer_id);
- return node->getValue();
+ return node->second;
}
-core::list<Peer*> Connection::getPeers()
+std::list<Peer*> Connection::getPeers()
{
- core::list<Peer*> list;
- core::map<u16, Peer*>::Iterator j;
- j = m_peers.getIterator();
- for(; j.atEnd() == false; j++)
+ std::list<Peer*> list;
+ for(std::map<u16, Peer*>::iterator j = m_peers.begin();
+ j != m_peers.end(); ++j)
{
- Peer *peer = j.getNode()->getValue();
+ Peer *peer = j->second;
list.push_back(peer);
}
return list;
bool Connection::getFromBuffers(u16 &peer_id, SharedBuffer<u8> &dst)
{
- core::map<u16, Peer*>::Iterator j;
- j = m_peers.getIterator();
- for(; j.atEnd() == false; j++)
+ for(std::map<u16, Peer*>::iterator j = m_peers.begin();
+ j != m_peers.end(); ++j)
{
- Peer *peer = j.getNode()->getValue();
+ Peer *peer = j->second;
for(u16 i=0; i<CHANNEL_COUNT; i++)
{
Channel *channel = &peer->channels[i];
bool Connection::deletePeer(u16 peer_id, bool timeout)
{
- if(m_peers.find(peer_id) == NULL)
+ if(m_peers.find(peer_id) == m_peers.end())
return false;
Peer *peer = m_peers[peer_id];
putEvent(e);
delete m_peers[peer_id];
- m_peers.remove(peer_id);
+ m_peers.erase(peer_id);
return true;
}
ConnectionEvent Connection::getEvent()
{
- if(m_event_queue.size() == 0){
+ if(m_event_queue.empty()){
ConnectionEvent e;
e.type = CONNEVENT_NONE;
return e;
if(m_peers.size() != 1)
return false;
- core::map<u16, Peer*>::Node *node = m_peers.find(PEER_ID_SERVER);
- if(node == NULL)
+ std::map<u16, Peer*>::iterator node = m_peers.find(PEER_ID_SERVER);
+ if(node == m_peers.end())
return false;
if(m_peer_id == PEER_ID_INEXISTENT)
#include "util/thread.h"
#include <iostream>
#include <fstream>
+#include <list>
+#include <map>
namespace con
{
SharedBuffer<u8> data);
// Split data in chunks and add TYPE_SPLIT headers to them
-core::list<SharedBuffer<u8> > makeSplitPacket(
+std::list<SharedBuffer<u8> > makeSplitPacket(
SharedBuffer<u8> data,
u32 chunksize_max,
u16 seqnum);
// Depending on size, make a TYPE_ORIGINAL or TYPE_SPLIT packet
// Increments split_seqnum if a split packet is made
-core::list<SharedBuffer<u8> > makeAutoSplitPacket(
+std::list<SharedBuffer<u8> > makeAutoSplitPacket(
SharedBuffer<u8> data,
u32 chunksize_max,
u16 &split_seqnum);
reliable = false;
}
// Key is chunk number, value is data without headers
- core::map<u16, SharedBuffer<u8> > chunks;
+ std::map<u16, SharedBuffer<u8> > chunks;
u32 chunk_count;
float time; // Seconds from adding
bool reliable; // If true, isn't deleted on timeout
for fast access to the smallest one.
*/
-typedef core::list<BufferedPacket>::Iterator RPBSearchResult;
+typedef std::list<BufferedPacket>::iterator RPBSearchResult;
class ReliablePacketBuffer
{
public:
-
+ ReliablePacketBuffer();
void print();
bool empty();
u32 size();
void incrementTimeouts(float dtime);
void resetTimedOuts(float timeout);
bool anyTotaltimeReached(float timeout);
- core::list<BufferedPacket> getTimedOuts(float timeout);
+ std::list<BufferedPacket> getTimedOuts(float timeout);
private:
- core::list<BufferedPacket> m_list;
+ std::list<BufferedPacket> m_list;
+ u16 m_list_size;
};
/*
private:
// Key is seqnum
- core::map<u16, IncomingSplitPacket*> m_buf;
+ std::map<u16, IncomingSplitPacket*> m_buf;
};
class Connection;
void rawSend(const BufferedPacket &packet);
Peer* getPeer(u16 peer_id);
Peer* getPeerNoEx(u16 peer_id);
- core::list<Peer*> getPeers();
+ std::list<Peer*> getPeers();
bool getFromBuffers(u16 &peer_id, SharedBuffer<u8> &dst);
// Returns next data from a buffer if possible
// If found, returns true; if not, false.
UDPSocket m_socket;
u16 m_peer_id;
- core::map<u16, Peer*> m_peers;
+ std::map<u16, Peer*> m_peers;
JMutex m_peers_mutex;
// Backwards compatibility
actionstream<<"A sapling grows into a tree at "
<<PP(p)<<std::endl;
- core::map<v3s16, MapBlock*> modified_blocks;
+ std::map<v3s16, MapBlock*> modified_blocks;
v3s16 tree_p = p;
ManualMapVoxelManipulator vmanip(map);
v3s16 tree_blockp = getNodeBlockPos(tree_p);
vmanip.blitBackAll(&modified_blocks);
// update lighting
- core::map<v3s16, MapBlock*> lighting_modified_blocks;
- for(core::map<v3s16, MapBlock*>::Iterator
- i = modified_blocks.getIterator();
- i.atEnd() == false; i++)
- {
- lighting_modified_blocks.insert(i.getNode()->getKey(), i.getNode()->getValue());
- }
+ std::map<v3s16, MapBlock*> lighting_modified_blocks;
+ lighting_modified_blocks.insert(modified_blocks.begin(), modified_blocks.end());
map->updateLighting(lighting_modified_blocks, modified_blocks);
// Send a MEET_OTHER event
MapEditEvent event;
event.type = MEET_OTHER;
- for(core::map<v3s16, MapBlock*>::Iterator
- i = modified_blocks.getIterator();
- i.atEnd() == false; i++)
+// event.modified_blocks.insert(modified_blocks.begin(), modified_blocks.end());
+ for(std::map<v3s16, MapBlock*>::iterator
+ i = modified_blocks.begin();
+ i != modified_blocks.end(); ++i)
{
- v3s16 p = i.getNode()->getKey();
- event.modified_blocks.insert(p, true);
+ event.modified_blocks.insert(i->first);
}
map->dispatchEvent(&event);
}
#define PP(x) "("<<(x).X<<","<<(x).Y<<","<<(x).Z<<")"
-core::map<u16, ClientActiveObject::Factory> ClientActiveObject::m_types;
+std::map<u16, ClientActiveObject::Factory> ClientActiveObject::m_types;
/*
SmoothTranslator
// Neighbor liquid levels (key = relative position)
// Includes current node
- core::map<v3s16, f32> neighbor_levels;
- core::map<v3s16, content_t> neighbor_contents;
- core::map<v3s16, u8> neighbor_flags;
+ std::map<v3s16, f32> neighbor_levels;
+ std::map<v3s16, content_t> neighbor_contents;
+ std::map<v3s16, u8> neighbor_flags;
const u8 neighborflag_top_is_same_liquid = 0x01;
v3s16 neighbor_dirs[9] = {
v3s16(0,0,0),
flags |= neighborflag_top_is_same_liquid;
}
- neighbor_levels.insert(neighbor_dirs[i], level);
- neighbor_contents.insert(neighbor_dirs[i], content);
- neighbor_flags.insert(neighbor_dirs[i], flags);
+ neighbor_levels[neighbor_dirs[i]] = level;
+ neighbor_contents[neighbor_dirs[i]] = content;
+ neighbor_flags[neighbor_dirs[i]] = flags;
}
// Corner heights (average between four liquids)
#include "genericobject.h"
#include "util/serialize.h"
-core::map<u16, ServerActiveObject::Factory> ServerActiveObject::m_types;
+std::map<u16, ServerActiveObject::Factory> ServerActiveObject::m_types;
/*
DummyLoadSAO
os<<"Probably overflown."<<std::endl;
}
-core::map<threadid_t, DebugStack*> g_debug_stacks;
+std::map<threadid_t, DebugStack*> g_debug_stacks;
JMutex g_debug_stacks_mutex;
void debug_stacks_init()
os<<"Debug stacks:"<<std::endl;
- for(core::map<threadid_t, DebugStack*>::Iterator
- i = g_debug_stacks.getIterator();
- i.atEnd() == false; i++)
+ for(std::map<threadid_t, DebugStack*>::iterator
+ i = g_debug_stacks.begin();
+ i != g_debug_stacks.end(); ++i)
{
- DebugStack *stack = i.getNode()->getValue();
- stack->print(os, false);
+ i->second->print(os, false);
}
}
DEBUGPRINT("Debug stacks:\n");
- for(core::map<threadid_t, DebugStack*>::Iterator
- i = g_debug_stacks.getIterator();
- i.atEnd() == false; i++)
+ for(std::map<threadid_t, DebugStack*>::iterator
+ i = g_debug_stacks.begin();
+ i != g_debug_stacks.end(); ++i)
{
- DebugStack *stack = i.getNode()->getValue();
+ DebugStack *stack = i->second;
for(int i=0; i<DEBUGSTREAM_COUNT; i++)
{
JMutexAutoLock lock(g_debug_stacks_mutex);
- core::map<threadid_t, DebugStack*>::Node *n;
+ std::map<threadid_t, DebugStack*>::iterator n;
n = g_debug_stacks.find(threadid);
- if(n != NULL)
+ if(n != g_debug_stacks.end())
{
- m_stack = n->getValue();
+ m_stack = n->second;
}
else
{
/*DEBUGPRINT("Creating new debug stack for thread %x\n",
(unsigned int)threadid);*/
m_stack = new DebugStack(threadid);
- g_debug_stacks.insert(threadid, m_stack);
+ g_debug_stacks[threadid] = m_stack;
}
if(m_stack->stack_i >= DEBUG_STACK_SIZE)
/*DEBUGPRINT("Deleting debug stack for thread %x\n",
(unsigned int)threadid);*/
delete m_stack;
- g_debug_stacks.remove(threadid);
+ g_debug_stacks.erase(threadid);
}
}
#include "threads.h"
#include "gettime.h"
#include "exceptions.h"
+#include <map>
#ifdef _WIN32
#define WIN32_LEAN_AND_MEAN
int stack_max_i; // Highest i that was seen
};
-extern core::map<threadid_t, DebugStack*> g_debug_stacks;
+extern std::map<threadid_t, DebugStack*> g_debug_stacks;
extern JMutex g_debug_stacks_mutex;
extern void debug_stacks_init();
void add(u16 command)
{
- core::map<u16, u16>::Node *n = m_packets.find(command);
- if(n == NULL)
+ std::map<u16, u16>::iterator n = m_packets.find(command);
+ if(n == m_packets.end())
{
m_packets[command] = 1;
}
else
{
- n->setValue(n->getValue()+1);
+ n->second++;
}
}
void clear()
{
- for(core::map<u16, u16>::Iterator
- i = m_packets.getIterator();
- i.atEnd() == false; i++)
+ for(std::map<u16, u16>::iterator
+ i = m_packets.begin();
+ i != m_packets.end(); ++i)
{
- i.getNode()->setValue(0);
+ i->second = 0;
}
}
void print(std::ostream &o)
{
- for(core::map<u16, u16>::Iterator
- i = m_packets.getIterator();
- i.atEnd() == false; i++)
+ for(std::map<u16, u16>::iterator
+ i = m_packets.begin();
+ i != m_packets.end(); ++i)
{
- o<<"cmd "<<i.getNode()->getKey()
- <<" count "<<i.getNode()->getValue()
+ o<<"cmd "<<i->first
+ <<" count "<<i->second
<<std::endl;
}
}
private:
// command, count
- core::map<u16, u16> m_packets;
+ std::map<u16, u16> m_packets;
};
/*
*/
BlockMakeData data;
MapBlock *block = NULL;
- core::map<v3s16, MapBlock *> modified_blocks;
+ std::map<v3s16, MapBlock *> modified_blocks;
if (getBlockOrStartGen(p, &block, &data, allow_generate)) {
{
JMutexAutoLock lock(m_server->m_con_mutex);
// Add the originally fetched block to the modified list
if (block)
- modified_blocks.insert(p, block);
+ modified_blocks[p] = block;
// Set the modified blocks unsent for all the clients
- for (core::map<u16, RemoteClient*>::Iterator
- i = m_server->m_clients.getIterator();
- i.atEnd() == false; i++) {
- RemoteClient *client = i.getNode()->getValue();
+ for (std::map<u16, RemoteClient*>::iterator
+ i = m_server->m_clients.begin();
+ i != m_server->m_clients.end(); ++i) {
+ RemoteClient *client = i->second;
if (modified_blocks.size() > 0) {
// Remove block from sent history
client->SetBlocksNotSent(modified_blocks);
Environment::~Environment()
{
// Deallocate players
- for(core::list<Player*>::Iterator i = m_players.begin();
- i != m_players.end(); i++)
+ for(std::list<Player*>::iterator i = m_players.begin();
+ i != m_players.end(); ++i)
{
delete (*i);
}
{
DSTACK(__FUNCTION_NAME);
re_search:
- for(core::list<Player*>::Iterator i = m_players.begin();
- i != m_players.end(); i++)
+ for(std::list<Player*>::iterator i = m_players.begin();
+ i != m_players.end(); ++i)
{
Player *player = *i;
if(player->peer_id != peer_id)
Player * Environment::getPlayer(u16 peer_id)
{
- for(core::list<Player*>::Iterator i = m_players.begin();
- i != m_players.end(); i++)
+ for(std::list<Player*>::iterator i = m_players.begin();
+ i != m_players.end(); ++i)
{
Player *player = *i;
if(player->peer_id == peer_id)
Player * Environment::getPlayer(const char *name)
{
- for(core::list<Player*>::Iterator i = m_players.begin();
- i != m_players.end(); i++)
+ for(std::list<Player*>::iterator i = m_players.begin();
+ i != m_players.end(); ++i)
{
Player *player = *i;
if(strcmp(player->getName(), name) == 0)
Player * Environment::getRandomConnectedPlayer()
{
- core::list<Player*> connected_players = getPlayers(true);
+ std::list<Player*> connected_players = getPlayers(true);
u32 chosen_one = myrand() % connected_players.size();
u32 j = 0;
- for(core::list<Player*>::Iterator
+ for(std::list<Player*>::iterator
i = connected_players.begin();
- i != connected_players.end(); i++)
+ i != connected_players.end(); ++i)
{
if(j == chosen_one)
{
Player * Environment::getNearestConnectedPlayer(v3f pos)
{
- core::list<Player*> connected_players = getPlayers(true);
+ std::list<Player*> connected_players = getPlayers(true);
f32 nearest_d = 0;
Player *nearest_player = NULL;
- for(core::list<Player*>::Iterator
+ for(std::list<Player*>::iterator
i = connected_players.begin();
- i != connected_players.end(); i++)
+ i != connected_players.end(); ++i)
{
Player *player = *i;
f32 d = player->getPosition().getDistanceFrom(pos);
return nearest_player;
}
-core::list<Player*> Environment::getPlayers()
+std::list<Player*> Environment::getPlayers()
{
return m_players;
}
-core::list<Player*> Environment::getPlayers(bool ignore_disconnected)
+std::list<Player*> Environment::getPlayers(bool ignore_disconnected)
{
- core::list<Player*> newlist;
- for(core::list<Player*>::Iterator
+ std::list<Player*> newlist;
+ for(std::list<Player*>::iterator
i = m_players.begin();
- i != m_players.end(); i++)
+ i != m_players.end(); ++i)
{
Player *player = *i;
void Environment::printPlayers(std::ostream &o)
{
o<<"Players in environment:"<<std::endl;
- for(core::list<Player*>::Iterator i = m_players.begin();
+ for(std::list<Player*>::iterator i = m_players.begin();
i != m_players.end(); i++)
{
Player *player = *i;
ActiveBlockList
*/
-void fillRadiusBlock(v3s16 p0, s16 r, core::map<v3s16, bool> &list)
+void fillRadiusBlock(v3s16 p0, s16 r, std::set<v3s16> &list)
{
v3s16 p;
for(p.X=p0.X-r; p.X<=p0.X+r; p.X++)
for(p.Z=p0.Z-r; p.Z<=p0.Z+r; p.Z++)
{
// Set in list
- list[p] = true;
+ list.insert(p);
}
}
-void ActiveBlockList::update(core::list<v3s16> &active_positions,
+void ActiveBlockList::update(std::list<v3s16> &active_positions,
s16 radius,
- core::map<v3s16, bool> &blocks_removed,
- core::map<v3s16, bool> &blocks_added)
+ std::set<v3s16> &blocks_removed,
+ std::set<v3s16> &blocks_added)
{
/*
Create the new list
*/
- core::map<v3s16, bool> newlist;
- for(core::list<v3s16>::Iterator i = active_positions.begin();
- i != active_positions.end(); i++)
+ std::set<v3s16> newlist;
+ for(std::list<v3s16>::iterator i = active_positions.begin();
+ i != active_positions.end(); ++i)
{
fillRadiusBlock(*i, radius, newlist);
}
Find out which blocks on the old list are not on the new list
*/
// Go through old list
- for(core::map<v3s16, bool>::Iterator i = m_list.getIterator();
- i.atEnd()==false; i++)
+ for(std::set<v3s16>::iterator i = m_list.begin();
+ i != m_list.end(); ++i)
{
- v3s16 p = i.getNode()->getKey();
+ v3s16 p = *i;
// If not on new list, it's been removed
- if(newlist.find(p) == NULL)
- blocks_removed.insert(p, true);
+ if(newlist.find(p) == newlist.end())
+ blocks_removed.insert(p);
}
/*
Find out which blocks on the new list are not on the old list
*/
// Go through new list
- for(core::map<v3s16, bool>::Iterator i = newlist.getIterator();
- i.atEnd()==false; i++)
+ for(std::set<v3s16>::iterator i = newlist.begin();
+ i != newlist.end(); ++i)
{
- v3s16 p = i.getNode()->getKey();
+ v3s16 p = *i;
// If not on old list, it's been added
- if(m_list.find(p) == NULL)
- blocks_added.insert(p, true);
+ if(m_list.find(p) == m_list.end())
+ blocks_added.insert(p);
}
/*
Update m_list
*/
m_list.clear();
- for(core::map<v3s16, bool>::Iterator i = newlist.getIterator();
- i.atEnd()==false; i++)
+ for(std::set<v3s16>::iterator i = newlist.begin();
+ i != newlist.end(); ++i)
{
- v3s16 p = i.getNode()->getKey();
- m_list.insert(p, true);
+ v3s16 p = *i;
+ m_list.insert(p);
}
}
m_map->drop();
// Delete ActiveBlockModifiers
- for(core::list<ABMWithState>::Iterator
- i = m_abms.begin(); i != m_abms.end(); i++){
+ for(std::list<ABMWithState>::iterator
+ i = m_abms.begin(); i != m_abms.end(); ++i){
delete i->abm;
}
}
std::string players_path = savedir + "/players";
fs::CreateDir(players_path);
- core::map<Player*, bool> saved_players;
+ std::set<Player*> saved_players;
std::vector<fs::DirListNode> player_files = fs::GetDirListing(players_path);
for(u32 i=0; i<player_files.size(); i++)
continue;
}
player->serialize(os);
- saved_players.insert(player, true);
+ saved_players.insert(player);
}
}
- for(core::list<Player*>::Iterator i = m_players.begin();
- i != m_players.end(); i++)
+ for(std::list<Player*>::iterator i = m_players.begin();
+ i != m_players.end(); ++i)
{
Player *player = *i;
- if(saved_players.find(player) != NULL)
+ if(saved_players.find(player) != saved_players.end())
{
/*infostream<<"Player "<<player->getName()
<<" was already saved."<<std::endl;*/
continue;
}
player->serialize(os);
- saved_players.insert(player, true);
+ saved_players.insert(player);
}
}
{
std::string players_path = savedir + "/players";
- core::map<Player*, bool> saved_players;
-
std::vector<fs::DirListNode> player_files = fs::GetDirListing(players_path);
for(u32 i=0; i<player_files.size(); i++)
{
ServerEnvironment *m_env;
std::map<content_t, std::list<ActiveABM> > m_aabms;
public:
- ABMHandler(core::list<ABMWithState> &abms,
+ ABMHandler(std::list<ABMWithState> &abms,
float dtime_s, ServerEnvironment *env,
bool use_timers):
m_env(env)
if(dtime_s < 0.001)
return;
INodeDefManager *ndef = env->getGameDef()->ndef();
- for(core::list<ABMWithState>::Iterator
- i = abms.begin(); i != abms.end(); i++){
+ for(std::list<ABMWithState>::iterator
+ i = abms.begin(); i != abms.end(); ++i){
ActiveBlockModifier *abm = i->abm;
float trigger_interval = abm->getTriggerInterval();
if(trigger_interval < 0.001)
std::set<u16> ServerEnvironment::getObjectsInsideRadius(v3f pos, float radius)
{
std::set<u16> objects;
- for(core::map<u16, ServerActiveObject*>::Iterator
- i = m_active_objects.getIterator();
- i.atEnd()==false; i++)
+ for(std::map<u16, ServerActiveObject*>::iterator
+ i = m_active_objects.begin();
+ i != m_active_objects.end(); ++i)
{
- ServerActiveObject* obj = i.getNode()->getValue();
- u16 id = i.getNode()->getKey();
+ ServerActiveObject* obj = i->second;
+ u16 id = i->first;
v3f objectpos = obj->getBasePosition();
if(objectpos.getDistanceFrom(pos) > radius)
continue;
{
infostream<<"ServerEnvironment::clearAllObjects(): "
<<"Removing all active objects"<<std::endl;
- core::list<u16> objects_to_remove;
- for(core::map<u16, ServerActiveObject*>::Iterator
- i = m_active_objects.getIterator();
- i.atEnd()==false; i++)
+ std::list<u16> objects_to_remove;
+ for(std::map<u16, ServerActiveObject*>::iterator
+ i = m_active_objects.begin();
+ i != m_active_objects.end(); ++i)
{
- ServerActiveObject* obj = i.getNode()->getValue();
+ ServerActiveObject* obj = i->second;
if(obj->getType() == ACTIVEOBJECT_TYPE_PLAYER)
continue;
- u16 id = i.getNode()->getKey();
- v3f objectpos = obj->getBasePosition();
+ u16 id = i->first;
+ v3f objectpos = obj->getBasePosition();
// Delete static object if block is loaded
if(obj->m_static_exists){
MapBlock *block = m_map->getBlockNoCreateNoEx(obj->m_static_block);
objects_to_remove.push_back(id);
}
// Remove references from m_active_objects
- for(core::list<u16>::Iterator i = objects_to_remove.begin();
- i != objects_to_remove.end(); i++)
+ for(std::list<u16>::iterator i = objects_to_remove.begin();
+ i != objects_to_remove.end(); ++i)
{
- m_active_objects.remove(*i);
+ m_active_objects.erase(*i);
}
- core::list<v3s16> loadable_blocks;
+ std::list<v3s16> loadable_blocks;
infostream<<"ServerEnvironment::clearAllObjects(): "
<<"Listing all loadable blocks"<<std::endl;
m_map->listAllLoadableBlocks(loadable_blocks);
u32 num_blocks_checked = 0;
u32 num_blocks_cleared = 0;
u32 num_objs_cleared = 0;
- for(core::list<v3s16>::Iterator i = loadable_blocks.begin();
- i != loadable_blocks.end(); i++)
+ for(std::list<v3s16>::iterator i = loadable_blocks.begin();
+ i != loadable_blocks.end(); ++i)
{
v3s16 p = *i;
MapBlock *block = m_map->emergeBlock(p, false);
*/
{
ScopeProfiler sp(g_profiler, "SEnv: handle players avg", SPT_AVG);
- for(core::list<Player*>::Iterator i = m_players.begin();
- i != m_players.end(); i++)
+ for(std::list<Player*>::iterator i = m_players.begin();
+ i != m_players.end(); ++i)
{
Player *player = *i;
/*
Get player block positions
*/
- core::list<v3s16> players_blockpos;
- for(core::list<Player*>::Iterator
+ std::list<v3s16> players_blockpos;
+ for(std::list<Player*>::iterator
i = m_players.begin();
- i != m_players.end(); i++)
+ i != m_players.end(); ++i)
{
Player *player = *i;
// Ignore disconnected players
Update list of active blocks, collecting changes
*/
const s16 active_block_range = g_settings->getS16("active_block_range");
- core::map<v3s16, bool> blocks_removed;
- core::map<v3s16, bool> blocks_added;
+ std::set<v3s16> blocks_removed;
+ std::set<v3s16> blocks_added;
m_active_blocks.update(players_blockpos, active_block_range,
blocks_removed, blocks_added);
// Convert active objects that are no more in active blocks to static
deactivateFarObjects(false);
- for(core::map<v3s16, bool>::Iterator
- i = blocks_removed.getIterator();
- i.atEnd()==false; i++)
+ for(std::set<v3s16>::iterator
+ i = blocks_removed.begin();
+ i != blocks_removed.end(); ++i)
{
- v3s16 p = i.getNode()->getKey();
+ v3s16 p = *i;
/*infostream<<"Server: Block ("<<p.X<<","<<p.Y<<","<<p.Z
<<") became inactive"<<std::endl;*/
Handle added blocks
*/
- for(core::map<v3s16, bool>::Iterator
- i = blocks_added.getIterator();
- i.atEnd()==false; i++)
+ for(std::set<v3s16>::iterator
+ i = blocks_added.begin();
+ i != blocks_added.end(); ++i)
{
- v3s16 p = i.getNode()->getKey();
+ v3s16 p = *i;
/*infostream<<"Server: Block ("<<p.X<<","<<p.Y<<","<<p.Z
<<") became active"<<std::endl;*/
if(block==NULL){
// Block needs to be fetched first
m_emerger->queueBlockEmerge(p, false);
- m_active_blocks.m_list.remove(p);
+ m_active_blocks.m_list.erase(p);
continue;
}
float dtime = 1.0;
- for(core::map<v3s16, bool>::Iterator
- i = m_active_blocks.m_list.getIterator();
- i.atEnd()==false; i++)
+ for(std::set<v3s16>::iterator
+ i = m_active_blocks.m_list.begin();
+ i != m_active_blocks.m_list.end(); ++i)
{
- v3s16 p = i.getNode()->getKey();
+ v3s16 p = *i;
/*infostream<<"Server: Block ("<<p.X<<","<<p.Y<<","<<p.Z
<<") being handled"<<std::endl;*/
// Initialize handling of ActiveBlockModifiers
ABMHandler abmhandler(m_abms, abm_interval, this, true);
- for(core::map<v3s16, bool>::Iterator
- i = m_active_blocks.m_list.getIterator();
- i.atEnd()==false; i++)
+ for(std::set<v3s16>::iterator
+ i = m_active_blocks.m_list.begin();
+ i != m_active_blocks.m_list.end(); ++i)
{
- v3s16 p = i.getNode()->getKey();
+ v3s16 p = *i;
/*infostream<<"Server: Block ("<<p.X<<","<<p.Y<<","<<p.Z
<<") being handled"<<std::endl;*/
send_recommended = true;
}
- for(core::map<u16, ServerActiveObject*>::Iterator
- i = m_active_objects.getIterator();
- i.atEnd()==false; i++)
+ for(std::map<u16, ServerActiveObject*>::iterator
+ i = m_active_objects.begin();
+ i != m_active_objects.end(); ++i)
{
- ServerActiveObject* obj = i.getNode()->getValue();
+ ServerActiveObject* obj = i->second;
// Remove non-peaceful mobs on peaceful mode
if(g_settings->getBool("only_peaceful_mobs")){
if(!obj->isPeaceful())
// Step object
obj->step(dtime, send_recommended);
// Read messages from object
- while(obj->m_messages_out.size() > 0)
+ while(!obj->m_messages_out.empty())
{
m_active_object_messages.push_back(
obj->m_messages_out.pop_front());
ServerActiveObject* ServerEnvironment::getActiveObject(u16 id)
{
- core::map<u16, ServerActiveObject*>::Node *n;
+ std::map<u16, ServerActiveObject*>::iterator n;
n = m_active_objects.find(id);
- if(n == NULL)
+ if(n == m_active_objects.end())
return NULL;
- return n->getValue();
+ return n->second;
}
bool isFreeServerActiveObjectId(u16 id,
- core::map<u16, ServerActiveObject*> &objects)
+ std::map<u16, ServerActiveObject*> &objects)
{
if(id == 0)
return false;
-
- for(core::map<u16, ServerActiveObject*>::Iterator
- i = objects.getIterator();
- i.atEnd()==false; i++)
- {
- if(i.getNode()->getKey() == id)
- return false;
- }
- return true;
+
+ return objects.find(id) == objects.end();
}
u16 getFreeServerActiveObjectId(
- core::map<u16, ServerActiveObject*> &objects)
+ std::map<u16, ServerActiveObject*> &objects)
{
u16 new_id = 1;
for(;;)
inside a radius around a position
*/
void ServerEnvironment::getAddedActiveObjects(v3s16 pos, s16 radius,
- core::map<u16, bool> ¤t_objects,
- core::map<u16, bool> &added_objects)
+ std::set<u16> ¤t_objects,
+ std::set<u16> &added_objects)
{
v3f pos_f = intToFloat(pos, BS);
f32 radius_f = radius * BS;
- discard objects that are found in current_objects.
- add remaining objects to added_objects
*/
- for(core::map<u16, ServerActiveObject*>::Iterator
- i = m_active_objects.getIterator();
- i.atEnd()==false; i++)
+ for(std::map<u16, ServerActiveObject*>::iterator
+ i = m_active_objects.begin();
+ i != m_active_objects.end(); ++i)
{
- u16 id = i.getNode()->getKey();
+ u16 id = i->first;
// Get object
- ServerActiveObject *object = i.getNode()->getValue();
+ ServerActiveObject *object = i->second;
if(object == NULL)
continue;
// Discard if removed
continue;
}
// Discard if already on current_objects
- core::map<u16, bool>::Node *n;
+ std::set<u16>::iterator n;
n = current_objects.find(id);
- if(n != NULL)
+ if(n != current_objects.end())
continue;
// Add to added_objects
- added_objects.insert(id, false);
+ added_objects.insert(id);
}
}
inside a radius around a position
*/
void ServerEnvironment::getRemovedActiveObjects(v3s16 pos, s16 radius,
- core::map<u16, bool> ¤t_objects,
- core::map<u16, bool> &removed_objects)
+ std::set<u16> ¤t_objects,
+ std::set<u16> &removed_objects)
{
v3f pos_f = intToFloat(pos, BS);
f32 radius_f = radius * BS;
- object has m_removed=true, or
- object is too far away
*/
- for(core::map<u16, bool>::Iterator
- i = current_objects.getIterator();
- i.atEnd()==false; i++)
+ for(std::set<u16>::iterator
+ i = current_objects.begin();
+ i != current_objects.end(); ++i)
{
- u16 id = i.getNode()->getKey();
+ u16 id = *i;
ServerActiveObject *object = getActiveObject(id);
if(object == NULL){
infostream<<"ServerEnvironment::getRemovedActiveObjects():"
<<" object in current_objects is NULL"<<std::endl;
- removed_objects.insert(id, false);
+ removed_objects.insert(id);
continue;
}
if(object->m_removed)
{
- removed_objects.insert(id, false);
+ removed_objects.insert(id);
continue;
}
if(distance_f >= radius_f)
{
- removed_objects.insert(id, false);
+ removed_objects.insert(id);
continue;
}
ActiveObjectMessage ServerEnvironment::getActiveObjectMessage()
{
- if(m_active_object_messages.size() == 0)
+ if(m_active_object_messages.empty())
return ActiveObjectMessage(0);
return m_active_object_messages.pop_front();
/*infostream<<"ServerEnvironment::addActiveObjectRaw(): "
<<"added (id="<<object->getId()<<")"<<std::endl;*/
- m_active_objects.insert(object->getId(), object);
+ m_active_objects[object->getId()] = object;
verbosestream<<"ServerEnvironment::addActiveObjectRaw(): "
<<"Added id="<<object->getId()<<"; there are now "
MapBlock *block = m_map->getBlockNoCreateNoEx(blockpos);
if(block)
{
- block->m_static_objects.m_active.insert(object->getId(), s_obj);
+ block->m_static_objects.m_active[object->getId()] = s_obj;
object->m_static_exists = true;
object->m_static_block = blockpos;
*/
void ServerEnvironment::removeRemovedObjects()
{
- core::list<u16> objects_to_remove;
- for(core::map<u16, ServerActiveObject*>::Iterator
- i = m_active_objects.getIterator();
- i.atEnd()==false; i++)
+ std::list<u16> objects_to_remove;
+ for(std::map<u16, ServerActiveObject*>::iterator
+ i = m_active_objects.begin();
+ i != m_active_objects.end(); ++i)
{
- u16 id = i.getNode()->getKey();
- ServerActiveObject* obj = i.getNode()->getValue();
+ u16 id = i->first;
+ ServerActiveObject* obj = i->second;
// This shouldn't happen but check it
if(obj == NULL)
{
objects_to_remove.push_back(id);
}
// Remove references from m_active_objects
- for(core::list<u16>::Iterator i = objects_to_remove.begin();
- i != objects_to_remove.end(); i++)
+ for(std::list<u16>::iterator i = objects_to_remove.begin();
+ i != objects_to_remove.end(); ++i)
{
- m_active_objects.remove(*i);
+ m_active_objects.erase(*i);
}
}
}
// A list for objects that couldn't be converted to active for some
// reason. They will be stored back.
- core::list<StaticObject> new_stored;
+ std::list<StaticObject> new_stored;
// Loop through stored static objects
- for(core::list<StaticObject>::Iterator
+ for(std::list<StaticObject>::iterator
i = block->m_static_objects.m_stored.begin();
- i != block->m_static_objects.m_stored.end(); i++)
+ i != block->m_static_objects.m_stored.end(); ++i)
{
/*infostream<<"Server: Creating an active object from "
<<"static data"<<std::endl;*/
// Clear stored list
block->m_static_objects.m_stored.clear();
// Add leftover failed stuff to stored list
- for(core::list<StaticObject>::Iterator
+ for(std::list<StaticObject>::iterator
i = new_stored.begin();
- i != new_stored.end(); i++)
+ i != new_stored.end(); ++i)
{
StaticObject &s_obj = *i;
block->m_static_objects.m_stored.push_back(s_obj);
*/
void ServerEnvironment::deactivateFarObjects(bool force_delete)
{
- core::list<u16> objects_to_remove;
- for(core::map<u16, ServerActiveObject*>::Iterator
- i = m_active_objects.getIterator();
- i.atEnd()==false; i++)
+ std::list<u16> objects_to_remove;
+ for(std::map<u16, ServerActiveObject*>::iterator
+ i = m_active_objects.begin();
+ i != m_active_objects.end(); ++i)
{
- ServerActiveObject* obj = i.getNode()->getValue();
+ ServerActiveObject* obj = i->second;
assert(obj);
// Do not deactivate if static data creation not allowed
if(!force_delete && obj->m_pending_deactivation)
continue;
- u16 id = i.getNode()->getKey();
+ u16 id = i->first;
v3f objectpos = obj->getBasePosition();
// The block in which the object resides in
MapBlock *block = m_map->emergeBlock(obj->m_static_block, false);
- core::map<u16, StaticObject>::Node *n =
+ std::map<u16, StaticObject>::iterator n =
block->m_static_objects.m_active.find(id);
- if(n){
- StaticObject static_old = n->getValue();
+ if(n != block->m_static_objects.m_active.end()){
+ StaticObject static_old = n->second;
float save_movem = obj->getMinimumSavedMovement();
// This shouldn't happen, but happens rarely for some
// unknown reason. Unsuccessful attempts have been made to
// find said reason.
- if(new_id && block->m_static_objects.m_active.find(new_id)){
+ if(new_id && block->m_static_objects.m_active.find(new_id) != block->m_static_objects.m_active.end()){
infostream<<"ServerEnv: WARNING: Performing hack #83274"
<<std::endl;
block->m_static_objects.remove(new_id);
}
// Remove references from m_active_objects
- for(core::list<u16>::Iterator i = objects_to_remove.begin();
- i != objects_to_remove.end(); i++)
+ for(std::list<u16>::iterator i = objects_to_remove.begin();
+ i != objects_to_remove.end(); ++i)
{
- m_active_objects.remove(*i);
+ m_active_objects.erase(*i);
}
}
ClientEnvironment::~ClientEnvironment()
{
// delete active objects
- for(core::map<u16, ClientActiveObject*>::Iterator
- i = m_active_objects.getIterator();
- i.atEnd()==false; i++)
+ for(std::map<u16, ClientActiveObject*>::iterator
+ i = m_active_objects.begin();
+ i != m_active_objects.end(); ++i)
{
- delete i.getNode()->getValue();
+ delete i->second;
}
- for(core::list<ClientSimpleObject*>::Iterator
- i = m_simple_objects.begin(); i != m_simple_objects.end(); i++)
+ for(std::list<ClientSimpleObject*>::iterator
+ i = m_simple_objects.begin(); i != m_simple_objects.end(); ++i)
{
delete *i;
}
LocalPlayer * ClientEnvironment::getLocalPlayer()
{
- for(core::list<Player*>::Iterator i = m_players.begin();
- i != m_players.end(); i++)
+ for(std::list<Player*>::iterator i = m_players.begin();
+ i != m_players.end(); ++i)
{
Player *player = *i;
if(player->isLocal())
LocalPlayer *lplayer = getLocalPlayer();
assert(lplayer);
// collision info queue
- core::list<CollisionInfo> player_collisions;
+ std::list<CollisionInfo> player_collisions;
/*
Get the speed the player is going
//std::cout<<"Looped "<<loopcount<<" times."<<std::endl;
- for(core::list<CollisionInfo>::Iterator
+ for(std::list<CollisionInfo>::iterator
i = player_collisions.begin();
- i != player_collisions.end(); i++)
+ i != player_collisions.end(); ++i)
{
CollisionInfo &info = *i;
v3f speed_diff = info.new_speed - info.old_speed;;
/*
Stuff that can be done in an arbitarily large dtime
*/
- for(core::list<Player*>::Iterator i = m_players.begin();
- i != m_players.end(); i++)
+ for(std::list<Player*>::iterator i = m_players.begin();
+ i != m_players.end(); ++i)
{
Player *player = *i;
v3f playerpos = player->getPosition();
*/
bool update_lighting = m_active_object_light_update_interval.step(dtime, 0.21);
- for(core::map<u16, ClientActiveObject*>::Iterator
- i = m_active_objects.getIterator();
- i.atEnd()==false; i++)
+ for(std::map<u16, ClientActiveObject*>::iterator
+ i = m_active_objects.begin();
+ i != m_active_objects.end(); ++i)
{
- ClientActiveObject* obj = i.getNode()->getValue();
+ ClientActiveObject* obj = i->second;
// Step object
obj->step(dtime, this);
/*
Step and handle simple objects
*/
- for(core::list<ClientSimpleObject*>::Iterator
+ for(std::list<ClientSimpleObject*>::iterator
i = m_simple_objects.begin(); i != m_simple_objects.end();)
{
ClientSimpleObject *simple = *i;
- core::list<ClientSimpleObject*>::Iterator cur = i;
- i++;
+ std::list<ClientSimpleObject*>::iterator cur = i;
+ ++i;
simple->step(dtime);
if(simple->m_to_be_removed){
delete simple;
ClientActiveObject* ClientEnvironment::getActiveObject(u16 id)
{
- core::map<u16, ClientActiveObject*>::Node *n;
+ std::map<u16, ClientActiveObject*>::iterator n;
n = m_active_objects.find(id);
- if(n == NULL)
+ if(n == m_active_objects.end())
return NULL;
- return n->getValue();
+ return n->second;
}
bool isFreeClientActiveObjectId(u16 id,
- core::map<u16, ClientActiveObject*> &objects)
+ std::map<u16, ClientActiveObject*> &objects)
{
if(id == 0)
return false;
-
- for(core::map<u16, ClientActiveObject*>::Iterator
- i = objects.getIterator();
- i.atEnd()==false; i++)
- {
- if(i.getNode()->getKey() == id)
- return false;
- }
- return true;
+
+ return objects.find(id) == objects.end();
}
u16 getFreeClientActiveObjectId(
- core::map<u16, ClientActiveObject*> &objects)
+ std::map<u16, ClientActiveObject*> &objects)
{
u16 new_id = 1;
for(;;)
}
infostream<<"ClientEnvironment::addActiveObject(): "
<<"added (id="<<object->getId()<<")"<<std::endl;
- m_active_objects.insert(object->getId(), object);
+ m_active_objects[object->getId()] = object;
object->addToScene(m_smgr, m_texturesource, m_irr);
{ // Update lighting immediately
u8 light = 0;
}
obj->removeFromScene(true);
delete obj;
- m_active_objects.remove(id);
+ m_active_objects.erase(id);
}
void ClientEnvironment::processActiveObjectMessage(u16 id,
*/
void ClientEnvironment::getActiveObjects(v3f origin, f32 max_d,
- core::array<DistanceSortedActiveObject> &dest)
+ std::vector<DistanceSortedActiveObject> &dest)
{
- for(core::map<u16, ClientActiveObject*>::Iterator
- i = m_active_objects.getIterator();
- i.atEnd()==false; i++)
+ for(std::map<u16, ClientActiveObject*>::iterator
+ i = m_active_objects.begin();
+ i != m_active_objects.end(); ++i)
{
- ClientActiveObject* obj = i.getNode()->getValue();
+ ClientActiveObject* obj = i->second;
f32 d = (obj->getPosition() - origin).getLength();
ClientEnvEvent ClientEnvironment::getClientEvent()
{
- if(m_client_event_queue.size() == 0)
+ if(m_client_event_queue.empty())
{
ClientEnvEvent event;
event.type = CEE_NONE;
*/
#include <set>
+#include <list>
#include "irrlichttypes_extrabloated.h"
#include "player.h"
#include <ostream>
Player * getPlayer(const char *name);
Player * getRandomConnectedPlayer();
Player * getNearestConnectedPlayer(v3f pos);
- core::list<Player*> getPlayers();
- core::list<Player*> getPlayers(bool ignore_disconnected);
+ std::list<Player*> getPlayers();
+ std::list<Player*> getPlayers(bool ignore_disconnected);
void printPlayers(std::ostream &o);
u32 getDayNightRatio();
protected:
// peer_ids in here should be unique, except that there may be many 0s
- core::list<Player*> m_players;
+ std::list<Player*> m_players;
// Time of day in milli-hours (0-23999); determines day and night
u32 m_time_of_day;
// Time of day in 0...1
class ActiveBlockList
{
public:
- void update(core::list<v3s16> &active_positions,
+ void update(std::list<v3s16> &active_positions,
s16 radius,
- core::map<v3s16, bool> &blocks_removed,
- core::map<v3s16, bool> &blocks_added);
+ std::set<v3s16> &blocks_removed,
+ std::set<v3s16> &blocks_added);
bool contains(v3s16 p){
- return (m_list.find(p) != NULL);
+ return (m_list.find(p) != m_list.end());
}
void clear(){
m_list.clear();
}
- core::map<v3s16, bool> m_list;
+ std::set<v3s16> m_list;
private:
};
inside a radius around a position
*/
void getAddedActiveObjects(v3s16 pos, s16 radius,
- core::map<u16, bool> ¤t_objects,
- core::map<u16, bool> &added_objects);
+ std::set<u16> ¤t_objects,
+ std::set<u16> &added_objects);
/*
Find out what new objects have been removed from
inside a radius around a position
*/
void getRemovedActiveObjects(v3s16 pos, s16 radius,
- core::map<u16, bool> ¤t_objects,
- core::map<u16, bool> &removed_objects);
+ std::set<u16> ¤t_objects,
+ std::set<u16> &removed_objects);
/*
Get the next message emitted by some active object.
// Background block emerger (the server, in practice)
IBackgroundBlockEmerger *m_emerger;
// Active object list
- core::map<u16, ServerActiveObject*> m_active_objects;
+ std::map<u16, ServerActiveObject*> m_active_objects;
// Outgoing network message buffer for active objects
Queue<ActiveObjectMessage> m_active_object_messages;
// Some timers
u32 m_game_time;
// A helper variable for incrementing the latter
float m_game_time_fraction_counter;
- core::list<ABMWithState> m_abms;
+ std::list<ABMWithState> m_abms;
// An interval for generally sending object positions and stuff
float m_recommended_send_interval;
};
// Get all nearby objects
void getActiveObjects(v3f origin, f32 max_d,
- core::array<DistanceSortedActiveObject> &dest);
+ std::vector<DistanceSortedActiveObject> &dest);
// Get event from queue. CEE_NONE is returned if queue is empty.
ClientEnvEvent getClientEvent();
ITextureSource *m_texturesource;
IGameDef *m_gamedef;
IrrlichtDevice *m_irr;
- core::map<u16, ClientActiveObject*> m_active_objects;
- core::list<ClientSimpleObject*> m_simple_objects;
+ std::map<u16, ClientActiveObject*> m_active_objects;
+ std::list<ClientSimpleObject*> m_simple_objects;
Queue<ClientEnvEvent> m_client_event_queue;
IntervalLimiter m_active_object_light_update_interval;
IntervalLimiter m_lava_hurt_interval;
float have_sand;
float tree_amount;
};
-core::map<v2s16, HeightPoint> g_heights;
+std::map<v2s16, HeightPoint> g_heights;
HeightPoint ground_height(u64 seed, v2s16 p2d)
{
- core::map<v2s16, HeightPoint>::Node *n = g_heights.find(p2d);
- if(n)
- return n->getValue();
+ std::map<v2s16, HeightPoint>::iterator n = g_heights.find(p2d);
+ if(n != g_heights.end())
+ return n->second;
HeightPoint hp;
s16 level = Mapgen::find_ground_level_from_noise(seed, p2d, 3);
hp.gh = (level-4)*BS;
#include "irrlichttypes_extrabloated.h"
#include <string>
#include "keycode.h"
+#include <list>
-class KeyList : protected core::list<KeyPress>
+class KeyList : protected std::list<KeyPress>
{
- typedef core::list<KeyPress> super;
- typedef super::Iterator Iterator;
- typedef super::ConstIterator ConstIterator;
+ typedef std::list<KeyPress> super;
+ typedef super::iterator iterator;
+ typedef super::const_iterator const_iterator;
- virtual ConstIterator find(const KeyPress &key) const
+ virtual const_iterator find(const KeyPress &key) const
{
- ConstIterator f(begin());
- ConstIterator e(end());
+ const_iterator f(begin());
+ const_iterator e(end());
while (f!=e) {
if (*f == key)
return f;
return e;
}
- virtual Iterator find(const KeyPress &key)
+ virtual iterator find(const KeyPress &key)
{
- Iterator f(begin());
- Iterator e(end());
+ iterator f(begin());
+ iterator e(end());
while (f!=e) {
if (*f == key)
return f;
void unset(const KeyPress &key)
{
- Iterator p(find(key));
+ iterator p(find(key));
if (p != end())
erase(p);
}
void toggle(const KeyPress &key)
{
- Iterator p(this->find(key));
+ iterator p(this->find(key));
if (p != end())
erase(p);
else
{
// Tab or Shift-Tab pressed
// Nick completion
- core::list<std::wstring> names = m_client->getConnectedPlayerNames();
+ std::list<std::wstring> names = m_client->getConnectedPlayerNames();
bool backwards = event.KeyInput.Shift;
m_chat_backend->getPrompt().nickCompletion(names, backwards);
return true;
IFormSource *m_form_src;
TextDest *m_text_dst;
- core::array<ListDrawSpec> m_inventorylists;
- core::array<ImageDrawSpec> m_backgrounds;
- core::array<ImageDrawSpec> m_images;
- core::array<ImageDrawSpec> m_itemimages;
- core::array<FieldSpec> m_fields;
+ std::vector<ListDrawSpec> m_inventorylists;
+ std::vector<ImageDrawSpec> m_backgrounds;
+ std::vector<ImageDrawSpec> m_images;
+ std::vector<ImageDrawSpec> m_itemimages;
+ std::vector<FieldSpec> m_fields;
ItemSpec *m_selected_item;
u32 m_selected_amount;
virtual ~CItemDefManager()
{
#ifndef SERVER
- const core::list<ClientCached*> &values = m_clientcached.getValues();
- for(core::list<ClientCached*>::ConstIterator
+ const std::list<ClientCached*> &values = m_clientcached.getValues();
+ for(std::list<ClientCached*>::const_iterator
i = values.begin(); i != values.end(); ++i)
{
ClientCached *cc = *i;
void processQueue(IGameDef *gamedef)
{
#ifndef SERVER
- while(m_get_clientcached_queue.size() > 0)
+ while(!m_get_clientcached_queue.empty())
{
GetRequest<std::string, ClientCached*, u8, u8>
request = m_get_clientcached_queue.pop();
*/
// A simple cache for quicker lookup
-core::map<std::string, KeyPress> g_key_setting_cache;
+std::map<std::string, KeyPress> g_key_setting_cache;
KeyPress getKeySetting(const char *settingname)
{
- core::map<std::string, KeyPress>::Node *n;
+ std::map<std::string, KeyPress>::iterator n;
n = g_key_setting_cache.find(settingname);
- if(n)
- return n->getValue();
- g_key_setting_cache.insert(settingname,
- g_settings->get(settingname).c_str());
- return g_key_setting_cache.find(settingname)->getValue();
+ if(n != g_key_setting_cache.end())
+ return n->second;
+ g_key_setting_cache[settingname] = g_settings->get(settingname).c_str();
+ return g_key_setting_cache.find(settingname)->second;
}
void clearKeyCache()
}
void LocalPlayer::move(f32 dtime, Map &map, f32 pos_max_d,
- core::list<CollisionInfo> *collision_info)
+ std::list<CollisionInfo> *collision_info)
{
INodeDefManager *nodemgr = m_gamedef->ndef();
#define LOCALPLAYER_HEADER
#include "player.h"
+#include <list>
class LocalPlayer : public Player
{
v3f overridePosition;
void move(f32 dtime, Map &map, f32 pos_max_d,
- core::list<CollisionInfo> *collision_info);
+ std::list<CollisionInfo> *collision_info);
void move(f32 dtime, Map &map, f32 pos_max_d);
void applyControl(float dtime);
}
{
- TimeTaker timer("Testing core::map speed");
+ TimeTaker timer("Testing std::map speed");
- core::map<v2s16, f32> map1;
+ std::map<v2s16, f32> map1;
tempf = -324;
const s16 ii=300;
for(s16 y=0; y<ii; y++){
for(s16 x=0; x<ii; x++){
- map1.insert(v2s16(x,y), tempf);
+ map1[v2s16(x,y)] = tempf;
tempf += 1;
}
}
*/
// List all allowed options
- core::map<std::string, ValueSpec> allowed_options;
- allowed_options.insert("help", ValueSpec(VALUETYPE_FLAG,
- _("Show allowed options")));
- allowed_options.insert("config", ValueSpec(VALUETYPE_STRING,
- _("Load configuration from specified file")));
- allowed_options.insert("port", ValueSpec(VALUETYPE_STRING,
- _("Set network port (UDP)")));
- allowed_options.insert("disable-unittests", ValueSpec(VALUETYPE_FLAG,
- _("Disable unit tests")));
- allowed_options.insert("enable-unittests", ValueSpec(VALUETYPE_FLAG,
- _("Enable unit tests")));
- allowed_options.insert("map-dir", ValueSpec(VALUETYPE_STRING,
- _("Same as --world (deprecated)")));
- allowed_options.insert("world", ValueSpec(VALUETYPE_STRING,
- _("Set world path (implies local game) ('list' lists all)")));
- allowed_options.insert("worldname", ValueSpec(VALUETYPE_STRING,
- _("Set world by name (implies local game)")));
- allowed_options.insert("info", ValueSpec(VALUETYPE_FLAG,
- _("Print more information to console")));
- allowed_options.insert("verbose", ValueSpec(VALUETYPE_FLAG,
- _("Print even more information to console")));
- allowed_options.insert("trace", ValueSpec(VALUETYPE_FLAG,
- _("Print enormous amounts of information to log and console")));
- allowed_options.insert("logfile", ValueSpec(VALUETYPE_STRING,
- _("Set logfile path ('' = no logging)")));
- allowed_options.insert("gameid", ValueSpec(VALUETYPE_STRING,
- _("Set gameid (\"--gameid list\" prints available ones)")));
+ std::map<std::string, ValueSpec> allowed_options;
+ allowed_options.insert(std::make_pair("help", ValueSpec(VALUETYPE_FLAG,
+ _("Show allowed options"))));
+ allowed_options.insert(std::make_pair("config", ValueSpec(VALUETYPE_STRING,
+ _("Load configuration from specified file"))));
+ allowed_options.insert(std::make_pair("port", ValueSpec(VALUETYPE_STRING,
+ _("Set network port (UDP)"))));
+ allowed_options.insert(std::make_pair("disable-unittests", ValueSpec(VALUETYPE_FLAG,
+ _("Disable unit tests"))));
+ allowed_options.insert(std::make_pair("enable-unittests", ValueSpec(VALUETYPE_FLAG,
+ _("Enable unit tests"))));
+ allowed_options.insert(std::make_pair("map-dir", ValueSpec(VALUETYPE_STRING,
+ _("Same as --world (deprecated)"))));
+ allowed_options.insert(std::make_pair("world", ValueSpec(VALUETYPE_STRING,
+ _("Set world path (implies local game) ('list' lists all)"))));
+ allowed_options.insert(std::make_pair("worldname", ValueSpec(VALUETYPE_STRING,
+ _("Set world by name (implies local game)"))));
+ allowed_options.insert(std::make_pair("info", ValueSpec(VALUETYPE_FLAG,
+ _("Print more information to console"))));
+ allowed_options.insert(std::make_pair("verbose", ValueSpec(VALUETYPE_FLAG,
+ _("Print even more information to console"))));
+ allowed_options.insert(std::make_pair("trace", ValueSpec(VALUETYPE_FLAG,
+ _("Print enormous amounts of information to log and console"))));
+ allowed_options.insert(std::make_pair("logfile", ValueSpec(VALUETYPE_STRING,
+ _("Set logfile path ('' = no logging)"))));
+ allowed_options.insert(std::make_pair("gameid", ValueSpec(VALUETYPE_STRING,
+ _("Set gameid (\"--gameid list\" prints available ones)"))));
#ifndef SERVER
- allowed_options.insert("speedtests", ValueSpec(VALUETYPE_FLAG,
- _("Run speed tests")));
- allowed_options.insert("address", ValueSpec(VALUETYPE_STRING,
- _("Address to connect to. ('' = local game)")));
- allowed_options.insert("random-input", ValueSpec(VALUETYPE_FLAG,
- _("Enable random user input, for testing")));
- allowed_options.insert("server", ValueSpec(VALUETYPE_FLAG,
- _("Run dedicated server")));
- allowed_options.insert("name", ValueSpec(VALUETYPE_STRING,
- _("Set player name")));
- allowed_options.insert("password", ValueSpec(VALUETYPE_STRING,
- _("Set password")));
- allowed_options.insert("go", ValueSpec(VALUETYPE_FLAG,
- _("Disable main menu")));
+ allowed_options.insert(std::make_pair("speedtests", ValueSpec(VALUETYPE_FLAG,
+ _("Run speed tests"))));
+ allowed_options.insert(std::make_pair("address", ValueSpec(VALUETYPE_STRING,
+ _("Address to connect to. ('' = local game)"))));
+ allowed_options.insert(std::make_pair("random-input", ValueSpec(VALUETYPE_FLAG,
+ _("Enable random user input, for testing"))));
+ allowed_options.insert(std::make_pair("server", ValueSpec(VALUETYPE_FLAG,
+ _("Run dedicated server"))));
+ allowed_options.insert(std::make_pair("name", ValueSpec(VALUETYPE_STRING,
+ _("Set player name"))));
+ allowed_options.insert(std::make_pair("password", ValueSpec(VALUETYPE_STRING,
+ _("Set password"))));
+ allowed_options.insert(std::make_pair("go", ValueSpec(VALUETYPE_FLAG,
+ _("Disable main menu"))));
#endif
Settings cmd_args;
if(ret == false || cmd_args.getFlag("help") || cmd_args.exists("nonopt1"))
{
dstream<<_("Allowed options:")<<std::endl;
- for(core::map<std::string, ValueSpec>::Iterator
- i = allowed_options.getIterator();
- i.atEnd() == false; i++)
+ for(std::map<std::string, ValueSpec>::iterator
+ i = allowed_options.begin();
+ i != allowed_options.end(); ++i)
{
std::ostringstream os1(std::ios::binary);
- os1<<" --"<<i.getNode()->getKey();
- if(i.getNode()->getValue().type == VALUETYPE_FLAG)
+ os1<<" --"<<i->first;
+ if(i->second.type == VALUETYPE_FLAG)
{}
else
os1<<_(" <value>");
dstream<<padStringRight(os1.str(), 24);
- if(i.getNode()->getValue().help != NULL)
- dstream<<i.getNode()->getValue().help;
+ if(i->second.help != NULL)
+ dstream<<i->second.help;
dstream<<std::endl;
}
}
else
{
- core::array<std::string> filenames;
+ std::vector<std::string> filenames;
filenames.push_back(porting::path_user +
DIR_DELIM + "minetest.conf");
// Legacy configuration file location
#include "debug.h" // assert
#include "modalMenu.h"
#include "guiPauseMenu.h" //For IGameCallback
+#include <list>
extern gui::IGUIEnvironment* guienv;
extern gui::IGUIStaticText *guiroot;
public:
virtual void createdMenu(GUIModalMenu *menu)
{
- for(core::list<GUIModalMenu*>::Iterator
+ for(std::list<GUIModalMenu*>::iterator
i = m_stack.begin();
- i != m_stack.end(); i++)
+ i != m_stack.end(); ++i)
{
assert(*i != menu);
}
if(m_stack.size() != 0)
- (*m_stack.getLast())->setVisible(false);
+ m_stack.back()->setVisible(false);
m_stack.push_back(menu);
}
bool removed_entry;
do{
removed_entry = false;
- for(core::list<GUIModalMenu*>::Iterator
+ for(std::list<GUIModalMenu*>::iterator
i = m_stack.begin();
- i != m_stack.end(); i++)
+ i != m_stack.end(); ++i)
{
if(*i == menu)
{
m_stack.erase(i);*/
if(m_stack.size() != 0)
- (*m_stack.getLast())->setVisible(true);
+ m_stack.back()->setVisible(true);
}
u32 menuCount()
return m_stack.size();
}
- core::list<GUIModalMenu*> m_stack;
+ std::list<GUIModalMenu*> m_stack;
};
extern MainMenuManager g_menumgr;
/*
Free all MapSectors
*/
- core::map<v2s16, MapSector*>::Iterator i = m_sectors.getIterator();
- for(; i.atEnd() == false; i++)
+ for(std::map<v2s16, MapSector*>::iterator i = m_sectors.begin();
+ i != m_sectors.end(); ++i)
{
- MapSector *sector = i.getNode()->getValue();
- delete sector;
+ delete i->second;
}
}
void Map::addEventReceiver(MapEventReceiver *event_receiver)
{
- m_event_receivers.insert(event_receiver, false);
+ m_event_receivers.insert(event_receiver);
}
void Map::removeEventReceiver(MapEventReceiver *event_receiver)
{
- if(m_event_receivers.find(event_receiver) == NULL)
- return;
- m_event_receivers.remove(event_receiver);
+ m_event_receivers.erase(event_receiver);
}
void Map::dispatchEvent(MapEditEvent *event)
{
- for(core::map<MapEventReceiver*, bool>::Iterator
- i = m_event_receivers.getIterator();
- i.atEnd()==false; i++)
+ for(std::set<MapEventReceiver*>::iterator
+ i = m_event_receivers.begin();
+ i != m_event_receivers.end(); ++i)
{
- MapEventReceiver* event_receiver = i.getNode()->getKey();
- event_receiver->onMapEditEvent(event);
+ (*i)->onMapEditEvent(event);
}
}
return sector;
}
- core::map<v2s16, MapSector*>::Node *n = m_sectors.find(p);
+ std::map<v2s16, MapSector*>::iterator n = m_sectors.find(p);
- if(n == NULL)
+ if(n == m_sectors.end())
return NULL;
- MapSector *sector = n->getValue();
+ MapSector *sector = n->second;
// Cache the last result
m_sector_cache_p = p;
values of from_nodes are lighting values.
*/
void Map::unspreadLight(enum LightBank bank,
- core::map<v3s16, u8> & from_nodes,
- core::map<v3s16, bool> & light_sources,
- core::map<v3s16, MapBlock*> & modified_blocks)
+ std::map<v3s16, u8> & from_nodes,
+ std::set<v3s16> & light_sources,
+ std::map<v3s16, MapBlock*> & modified_blocks)
{
INodeDefManager *nodemgr = m_gamedef->ndef();
u32 blockchangecount = 0;
- core::map<v3s16, u8> unlighted_nodes;
- core::map<v3s16, u8>::Iterator j;
- j = from_nodes.getIterator();
+ std::map<v3s16, u8> unlighted_nodes;
/*
Initialize block cache
// Cache this a bit, too
bool block_checked_in_modified = false;
- for(; j.atEnd() == false; j++)
+ for(std::map<v3s16, u8>::iterator j = from_nodes.begin();
+ j != from_nodes.end(); ++j)
{
- v3s16 pos = j.getNode()->getKey();
+ v3s16 pos = j->first;
v3s16 blockpos = getNodeBlockPos(pos);
// Only fetch a new block if the block position has changed
// Get node straight from the block
MapNode n = block->getNode(relpos);
- u8 oldlight = j.getNode()->getValue();
+ u8 oldlight = j->second;
// Loop through 6 neighbors
for(u16 i=0; i<6; i++)
n2.setLight(bank, 0, nodemgr);
block->setNode(relpos, n2);
- unlighted_nodes.insert(n2pos, current_light);
+ unlighted_nodes[n2pos] = current_light;
changed = true;
/*
light_sources.remove(n2pos);*/
}
else{
- light_sources.insert(n2pos, true);
+ light_sources.insert(n2pos);
}
// Add to modified_blocks
if(changed == true && block_checked_in_modified == false)
{
// If the block is not found in modified_blocks, add.
- if(modified_blocks.find(blockpos) == NULL)
+ if(modified_blocks.find(blockpos) == modified_blocks.end())
{
- modified_blocks.insert(blockpos, block);
+ modified_blocks[blockpos] = block;
}
block_checked_in_modified = true;
}
*/
void Map::unLightNeighbors(enum LightBank bank,
v3s16 pos, u8 lightwas,
- core::map<v3s16, bool> & light_sources,
- core::map<v3s16, MapBlock*> & modified_blocks)
+ std::set<v3s16> & light_sources,
+ std::map<v3s16, MapBlock*> & modified_blocks)
{
- core::map<v3s16, u8> from_nodes;
- from_nodes.insert(pos, lightwas);
+ std::map<v3s16, u8> from_nodes;
+ from_nodes[pos] = lightwas;
unspreadLight(bank, from_nodes, light_sources, modified_blocks);
}
goes on recursively.
*/
void Map::spreadLight(enum LightBank bank,
- core::map<v3s16, bool> & from_nodes,
- core::map<v3s16, MapBlock*> & modified_blocks)
+ std::set<v3s16> & from_nodes,
+ std::map<v3s16, MapBlock*> & modified_blocks)
{
INodeDefManager *nodemgr = m_gamedef->ndef();
u32 blockchangecount = 0;
- core::map<v3s16, bool> lighted_nodes;
- core::map<v3s16, bool>::Iterator j;
- j = from_nodes.getIterator();
+ std::set<v3s16> lighted_nodes;
/*
Initialize block cache
// Cache this a bit, too
bool block_checked_in_modified = false;
- for(; j.atEnd() == false; j++)
- //for(; j != from_nodes.end(); j++)
+ for(std::set<v3s16>::iterator j = from_nodes.begin();
+ j != from_nodes.end(); ++j)
{
- v3s16 pos = j.getNode()->getKey();
- //v3s16 pos = *j;
- //infostream<<"pos=("<<pos.X<<","<<pos.Y<<","<<pos.Z<<")"<<std::endl;
+ v3s16 pos = *j;
v3s16 blockpos = getNodeBlockPos(pos);
// Only fetch a new block if the block position has changed
*/
if(n2.getLight(bank, nodemgr) > undiminish_light(oldlight))
{
- lighted_nodes.insert(n2pos, true);
- //lighted_nodes.push_back(n2pos);
+ lighted_nodes.insert(n2pos);
changed = true;
}
/*
{
n2.setLight(bank, newlight, nodemgr);
block->setNode(relpos, n2);
- lighted_nodes.insert(n2pos, true);
- //lighted_nodes.push_back(n2pos);
+ lighted_nodes.insert(n2pos);
changed = true;
}
}
if(changed == true && block_checked_in_modified == false)
{
// If the block is not found in modified_blocks, add.
- if(modified_blocks.find(blockpos) == NULL)
+ if(modified_blocks.find(blockpos) == modified_blocks.end())
{
- modified_blocks.insert(blockpos, block);
+ modified_blocks[blockpos] = block;
}
block_checked_in_modified = true;
}
*/
void Map::lightNeighbors(enum LightBank bank,
v3s16 pos,
- core::map<v3s16, MapBlock*> & modified_blocks)
+ std::map<v3s16, MapBlock*> & modified_blocks)
{
- core::map<v3s16, bool> from_nodes;
- from_nodes.insert(pos, true);
+ std::set<v3s16> from_nodes;
+ from_nodes.insert(pos);
spreadLight(bank, from_nodes, modified_blocks);
}
Mud is turned into grass in where the sunlight stops.
*/
s16 Map::propagateSunlight(v3s16 start,
- core::map<v3s16, MapBlock*> & modified_blocks)
+ std::map<v3s16, MapBlock*> & modified_blocks)
{
INodeDefManager *nodemgr = m_gamedef->ndef();
n.setLight(LIGHTBANK_DAY, LIGHT_SUN, nodemgr);
block->setNode(relpos, n);
- modified_blocks.insert(blockpos, block);
+ modified_blocks[blockpos] = block;
}
else
{
}
void Map::updateLighting(enum LightBank bank,
- core::map<v3s16, MapBlock*> & a_blocks,
- core::map<v3s16, MapBlock*> & modified_blocks)
+ std::map<v3s16, MapBlock*> & a_blocks,
+ std::map<v3s16, MapBlock*> & modified_blocks)
{
INodeDefManager *nodemgr = m_gamedef->ndef();
//bool debug=true;
//u32 count_was = modified_blocks.size();
- core::map<v3s16, MapBlock*> blocks_to_update;
+ std::map<v3s16, MapBlock*> blocks_to_update;
- core::map<v3s16, bool> light_sources;
+ std::set<v3s16> light_sources;
- core::map<v3s16, u8> unlight_from;
+ std::map<v3s16, u8> unlight_from;
int num_bottom_invalid = 0;
{
//TimeTaker t("first stuff");
- core::map<v3s16, MapBlock*>::Iterator i;
- i = a_blocks.getIterator();
- for(; i.atEnd() == false; i++)
+ for(std::map<v3s16, MapBlock*>::iterator i = a_blocks.begin();
+ i != a_blocks.end(); ++i)
{
- MapBlock *block = i.getNode()->getValue();
+ MapBlock *block = i->second;
for(;;)
{
v3s16 pos = block->getPos();
v3s16 posnodes = block->getPosRelative();
- modified_blocks.insert(pos, block);
-
- blocks_to_update.insert(pos, block);
+ modified_blocks[pos] = block;
+ blocks_to_update[pos] = block;
/*
Clear all light from block
// If node sources light, add to list
u8 source = nodemgr->get(n).light_source;
if(source != 0)
- light_sources[p + posnodes] = true;
+ light_sources.insert(p + posnodes);
// Collect borders for unlighting
if((x==0 || x == MAP_BLOCKSIZE-1
&& oldlight != 0)
{
v3s16 p_map = p + posnodes;
- unlight_from.insert(p_map, oldlight);
+ unlight_from[p_map] = oldlight;
}
}
catch(InvalidPositionException &e)
//m_dout<<"Done ("<<getTimestamp()<<")"<<std::endl;
}
-void Map::updateLighting(core::map<v3s16, MapBlock*> & a_blocks,
- core::map<v3s16, MapBlock*> & modified_blocks)
+void Map::updateLighting(std::map<v3s16, MapBlock*> & a_blocks,
+ std::map<v3s16, MapBlock*> & modified_blocks)
{
updateLighting(LIGHTBANK_DAY, a_blocks, modified_blocks);
updateLighting(LIGHTBANK_NIGHT, a_blocks, modified_blocks);
/*
Update information about whether day and night light differ
*/
- for(core::map<v3s16, MapBlock*>::Iterator
- i = modified_blocks.getIterator();
- i.atEnd() == false; i++)
+ for(std::map<v3s16, MapBlock*>::iterator
+ i = modified_blocks.begin();
+ i != modified_blocks.end(); ++i)
{
- MapBlock *block = i.getNode()->getValue();
+ MapBlock *block = i->second;
block->expireDayNightDiff();
}
}
/*
*/
void Map::addNodeAndUpdate(v3s16 p, MapNode n,
- core::map<v3s16, MapBlock*> &modified_blocks)
+ std::map<v3s16, MapBlock*> &modified_blocks)
{
INodeDefManager *ndef = m_gamedef->ndef();
v3s16 bottompos = p + v3s16(0,-1,0);
bool node_under_sunlight = true;
- core::map<v3s16, bool> light_sources;
+ std::set<v3s16> light_sources;
/*
Collect old node for rollback
v3s16 blockpos = getNodeBlockPos(p);
MapBlock * block = getBlockNoCreate(blockpos);
assert(block != NULL);
- modified_blocks.insert(blockpos, block);
+ modified_blocks[blockpos] = block;
assert(isValidPosition(p));
/*
Update information about whether day and night light differ
*/
- for(core::map<v3s16, MapBlock*>::Iterator
- i = modified_blocks.getIterator();
- i.atEnd() == false; i++)
+ for(std::map<v3s16, MapBlock*>::iterator
+ i = modified_blocks.begin();
+ i != modified_blocks.end(); ++i)
{
- MapBlock *block = i.getNode()->getValue();
- block->expireDayNightDiff();
+ i->second->expireDayNightDiff();
}
/*
/*
*/
void Map::removeNodeAndUpdate(v3s16 p,
- core::map<v3s16, MapBlock*> &modified_blocks)
+ std::map<v3s16, MapBlock*> &modified_blocks)
{
INodeDefManager *ndef = m_gamedef->ndef();
{
}
- core::map<v3s16, bool> light_sources;
+ std::set<v3s16> light_sources;
enum LightBank banks[] =
{
v3s16 blockpos = getNodeBlockPos(p);
MapBlock * block = getBlockNoCreate(blockpos);
assert(block != NULL);
- modified_blocks.insert(blockpos, block);
+ modified_blocks[blockpos] = block;
/*
If the removed node was under sunlight, propagate the
/*
Update information about whether day and night light differ
*/
- for(core::map<v3s16, MapBlock*>::Iterator
- i = modified_blocks.getIterator();
- i.atEnd() == false; i++)
+ for(std::map<v3s16, MapBlock*>::iterator
+ i = modified_blocks.begin();
+ i != modified_blocks.end(); ++i)
{
- MapBlock *block = i.getNode()->getValue();
- block->expireDayNightDiff();
+ i->second->expireDayNightDiff();
}
/*
bool succeeded = true;
try{
- core::map<v3s16, MapBlock*> modified_blocks;
+ std::map<v3s16, MapBlock*> modified_blocks;
addNodeAndUpdate(p, n, modified_blocks);
// Copy modified_blocks to event
- for(core::map<v3s16, MapBlock*>::Iterator
- i = modified_blocks.getIterator();
- i.atEnd()==false; i++)
+ for(std::map<v3s16, MapBlock*>::iterator
+ i = modified_blocks.begin();
+ i != modified_blocks.end(); ++i)
{
- event.modified_blocks.insert(i.getNode()->getKey(), false);
+ event.modified_blocks.erase(i->first);
}
}
catch(InvalidPositionException &e){
bool succeeded = true;
try{
- core::map<v3s16, MapBlock*> modified_blocks;
+ std::map<v3s16, MapBlock*> modified_blocks;
removeNodeAndUpdate(p, modified_blocks);
// Copy modified_blocks to event
- for(core::map<v3s16, MapBlock*>::Iterator
- i = modified_blocks.getIterator();
- i.atEnd()==false; i++)
+ for(std::map<v3s16, MapBlock*>::iterator
+ i = modified_blocks.begin();
+ i != modified_blocks.end(); ++i)
{
- event.modified_blocks.insert(i.getNode()->getKey(), false);
+ event.modified_blocks.erase(i->first);
}
}
catch(InvalidPositionException &e){
Updates usage timers
*/
void Map::timerUpdate(float dtime, float unload_timeout,
- core::list<v3s16> *unloaded_blocks)
+ std::list<v3s16> *unloaded_blocks)
{
bool save_before_unloading = (mapType() == MAPTYPE_SERVER);
// Profile modified reasons
Profiler modprofiler;
- core::list<v2s16> sector_deletion_queue;
+ std::list<v2s16> sector_deletion_queue;
u32 deleted_blocks_count = 0;
u32 saved_blocks_count = 0;
u32 block_count_all = 0;
- core::map<v2s16, MapSector*>::Iterator si;
-
beginSave();
- si = m_sectors.getIterator();
- for(; si.atEnd() == false; si++)
+ for(std::map<v2s16, MapSector*>::iterator si = m_sectors.begin();
+ si != m_sectors.end(); ++si)
{
- MapSector *sector = si.getNode()->getValue();
+ MapSector *sector = si->second;
bool all_blocks_deleted = true;
- core::list<MapBlock*> blocks;
+ std::list<MapBlock*> blocks;
sector->getBlocks(blocks);
- for(core::list<MapBlock*>::Iterator i = blocks.begin();
- i != blocks.end(); i++)
+ for(std::list<MapBlock*>::iterator i = blocks.begin();
+ i != blocks.end(); ++i)
{
MapBlock *block = (*i);
if(all_blocks_deleted)
{
- sector_deletion_queue.push_back(si.getNode()->getKey());
+ sector_deletion_queue.push_back(si->first);
}
}
endSave();
}
}
-void Map::deleteSectors(core::list<v2s16> &list)
+void Map::deleteSectors(std::list<v2s16> &list)
{
- core::list<v2s16>::Iterator j;
- for(j=list.begin(); j!=list.end(); j++)
+ for(std::list<v2s16>::iterator j = list.begin();
+ j != list.end(); ++j)
{
MapSector *sector = m_sectors[*j];
// If sector is in sector cache, remove it from there
if(m_sector_cache == sector)
m_sector_cache = NULL;
// Remove from map and delete
- m_sectors.remove(*j);
+ m_sectors.erase(*j);
delete sector;
}
}
#define D_TOP 6
#define D_SELF 1
-void Map::transformLiquidsFinite(core::map<v3s16, MapBlock*> & modified_blocks)
+void Map::transformLiquidsFinite(std::map<v3s16, MapBlock*> & modified_blocks)
{
INodeDefManager *nodemgr = m_gamedef->ndef();
UniqueQueue<v3s16> must_reflow, must_reflow_second;
// List of MapBlocks that will require a lighting update (due to lava)
- core::map<v3s16, MapBlock*> lighting_modified_blocks;
+ std::map<v3s16, MapBlock*> lighting_modified_blocks;
while(m_transforming_liquid.size() > 0)
{
v3s16 blockpos = getNodeBlockPos(p0);
MapBlock *block = getBlockNoCreateNoEx(blockpos);
if(block != NULL) {
- modified_blocks.insert(blockpos, block);
+ modified_blocks[blockpos] = block;
// If node emits light, MapBlock requires lighting update
if(nodemgr->get(n0).light_source != 0)
lighting_modified_blocks[block->getPos()] = block;
updateLighting(lighting_modified_blocks, modified_blocks);
}
-void Map::transformLiquids(core::map<v3s16, MapBlock*> & modified_blocks)
+void Map::transformLiquids(std::map<v3s16, MapBlock*> & modified_blocks)
{
if (g_settings->getBool("liquid_finite")) return Map::transformLiquidsFinite(modified_blocks);
-
+
INodeDefManager *nodemgr = m_gamedef->ndef();
DSTACK(__FUNCTION_NAME);
UniqueQueue<v3s16> must_reflow;
// List of MapBlocks that will require a lighting update (due to lava)
- core::map<v3s16, MapBlock*> lighting_modified_blocks;
+ std::map<v3s16, MapBlock*> lighting_modified_blocks;
while(m_transforming_liquid.size() != 0)
{
v3s16 blockpos = getNodeBlockPos(p0);
MapBlock *block = getBlockNoCreateNoEx(blockpos);
if(block != NULL) {
- modified_blocks.insert(blockpos, block);
+ modified_blocks[blockpos] = block;
// If node emits light, MapBlock requires lighting update
if(nodemgr->get(n0).light_source != 0)
lighting_modified_blocks[block->getPos()] = block;
}
MapBlock* ServerMap::finishBlockMake(BlockMakeData *data,
- core::map<v3s16, MapBlock*> &changed_blocks)
+ std::map<v3s16, MapBlock*> &changed_blocks)
{
v3s16 blockpos_min = data->blockpos_min;
v3s16 blockpos_max = data->blockpos_max;
/*
Go through changed blocks
*/
- for(core::map<v3s16, MapBlock*>::Iterator i = changed_blocks.getIterator();
- i.atEnd() == false; i++)
+ for(std::map<v3s16, MapBlock*>::iterator i = changed_blocks.begin();
+ i != changed_blocks.end(); ++i)
{
- MapBlock *block = i.getNode()->getValue();
+ MapBlock *block = i->second;
assert(block);
/*
Update day/night difference cache of the MapBlocks
/*
Insert to container
*/
- m_sectors.insert(p2d, sector);
+ m_sectors[p2d] = sector;
return sector;
}
*/
MapBlock * ServerMap::generateBlock(
v3s16 p,
- core::map<v3s16, MapBlock*> &modified_blocks
+ std::map<v3s16, MapBlock*> &modified_blocks
)
{
DSTACKF("%s: p=(%d,%d,%d)", __FUNCTION_NAME, p.X, p.Y, p.Z);
}
/*if(allow_generate)
{
- core::map<v3s16, MapBlock*> modified_blocks;
+ std::map<v3s16, MapBlock*> modified_blocks;
MapBlock *block = generateBlock(p, modified_blocks);
if(block)
{
event.p = p;
// Copy modified_blocks to event
- for(core::map<v3s16, MapBlock*>::Iterator
- i = modified_blocks.getIterator();
- i.atEnd()==false; i++)
+ for(std::map<v3s16, MapBlock*>::iterator
+ i = modified_blocks.begin();
+ i != modified_blocks.end(); ++i)
{
- event.modified_blocks.insert(i.getNode()->getKey(), false);
+ event.modified_blocks.erase(i->first);
}
// Queue event
// Don't do anything with sqlite unless something is really saved
bool save_started = false;
- core::map<v2s16, MapSector*>::Iterator i = m_sectors.getIterator();
- for(; i.atEnd() == false; i++)
+ for(std::map<v2s16, MapSector*>::iterator i = m_sectors.begin();
+ i != m_sectors.end(); ++i)
{
- ServerMapSector *sector = (ServerMapSector*)i.getNode()->getValue();
+ ServerMapSector *sector = (ServerMapSector*)i->second;
assert(sector->getId() == MAPSECTOR_SERVER);
if(sector->differs_from_disk || save_level == MOD_STATE_CLEAN)
saveSectorMeta(sector);
sector_meta_count++;
}
- core::list<MapBlock*> blocks;
+ std::list<MapBlock*> blocks;
sector->getBlocks(blocks);
- core::list<MapBlock*>::Iterator j;
- for(j=blocks.begin(); j!=blocks.end(); j++)
+ for(std::list<MapBlock*>::iterator j = blocks.begin();
+ j != blocks.end(); ++j)
{
MapBlock *block = *j;
return v3s16(x,y,z);
}
-void ServerMap::listAllLoadableBlocks(core::list<v3s16> &dst)
+void ServerMap::listAllLoadableBlocks(std::list<v3s16> &dst)
{
if(loadFromFolders()){
errorstream<<"Map::listAllLoadableBlocks(): Result will be missing "
<<" Continuing with a sector with no metadata."
<<std::endl;*/
sector = new ServerMapSector(this, p2d, m_gamedef);
- m_sectors.insert(p2d, sector);
+ m_sectors[p2d] = sector;
}
else
{
u8 flags = 0;
MapBlock *block;
v3s16 p(x,y,z);
- core::map<v3s16, u8>::Node *n;
+ std::map<v3s16, u8>::iterator n;
n = m_loaded_blocks.find(p);
- if(n != NULL)
+ if(n != m_loaded_blocks.end())
continue;
bool block_data_inexistent = false;
if(block_data_inexistent)
{
flags |= VMANIP_BLOCK_DATA_INEXIST;
-
+
VoxelArea a(p*MAP_BLOCKSIZE, (p+1)*MAP_BLOCKSIZE-v3s16(1,1,1));
// Fill with VOXELFLAG_INEXISTENT
for(s32 z=a.MinEdge.Z; z<=a.MaxEdge.Z; z++)
flags |= VMANIP_BLOCK_CONTAINS_CIGNORE;
}*/
- m_loaded_blocks.insert(p, flags);
+ m_loaded_blocks[p] = flags;
}
//infostream<<"emerge done"<<std::endl;
run on background.
*/
void MapVoxelManipulator::blitBack
- (core::map<v3s16, MapBlock*> & modified_blocks)
+ (std::map<v3s16, MapBlock*> & modified_blocks)
{
if(m_area.getExtent() == v3s16(0,0,0))
return;
u8 flags = 0;
MapBlock *block;
v3s16 p(x,y,z);
- core::map<v3s16, u8>::Node *n;
+ std::map<v3s16, u8>::iterator n;
n = m_loaded_blocks.find(p);
- if(n != NULL)
+ if(n != m_loaded_blocks.end())
continue;
bool block_data_inexistent = false;
flags |= VMANIP_BLOCK_CONTAINS_CIGNORE;
}*/
- m_loaded_blocks.insert(p, flags);
+ m_loaded_blocks[p] = flags;
}
}
void ManualMapVoxelManipulator::blitBackAll(
- core::map<v3s16, MapBlock*> * modified_blocks)
+ std::map<v3s16, MapBlock*> * modified_blocks)
{
if(m_area.getExtent() == v3s16(0,0,0))
return;
/*
Copy data of all blocks
*/
- for(core::map<v3s16, u8>::Iterator
- i = m_loaded_blocks.getIterator();
- i.atEnd() == false; i++)
+ for(std::map<v3s16, u8>::iterator
+ i = m_loaded_blocks.begin();
+ i != m_loaded_blocks.end(); ++i)
{
- v3s16 p = i.getNode()->getKey();
- u8 flags = i.getNode()->getValue();
-
- bool existed = !(flags & VMANIP_BLOCK_DATA_INEXIST);
- if(existed == false)
- {
- // The Great Bug was found using this
- /*infostream<<"ManualMapVoxelManipulator::blitBackAll: "
- <<"Inexistent ("<<p.X<<","<<p.Y<<","<<p.Z<<")"
- <<std::endl;*/
- continue;
- }
-
+ v3s16 p = i->first;
MapBlock *block = m_map->getBlockNoCreateNoEx(p);
- if(block == NULL)
+ bool existed = !(i->second & VMANIP_BLOCK_DATA_INEXIST);
+ if(existed == false)
{
- infostream<<"WARNING: "<<__FUNCTION_NAME
- <<": got NULL block "
- <<"("<<p.X<<","<<p.Y<<","<<p.Z<<")"
- <<std::endl;
continue;
}
block->copyFrom(*this);
-
+
if(modified_blocks)
- modified_blocks->insert(p, block);
+ (*modified_blocks)[p] = block;
}
}
#include <jthread.h>
#include <iostream>
#include <sstream>
+#include <set>
+#include <map>
+#include <list>
#include "irrlichttypes_bloated.h"
#include "mapnode.h"
MapEditEventType type;
v3s16 p;
MapNode n;
- core::map<v3s16, bool> modified_blocks;
+ std::set<v3s16> modified_blocks;
u16 already_known_by_peer;
MapEditEvent():
event->type = type;
event->p = p;
event->n = n;
- for(core::map<v3s16, bool>::Iterator
- i = modified_blocks.getIterator();
- i.atEnd()==false; i++)
- {
- v3s16 p = i.getNode()->getKey();
- bool v = i.getNode()->getValue();
- event->modified_blocks.insert(p, v);
- }
+ event->modified_blocks = modified_blocks;
return event;
}
case MEET_OTHER:
{
VoxelArea a;
- for(core::map<v3s16, bool>::Iterator
- i = modified_blocks.getIterator();
- i.atEnd()==false; i++)
+ for(std::set<v3s16>::iterator
+ i = modified_blocks.begin();
+ i != modified_blocks.end(); ++i)
{
- v3s16 p = i.getNode()->getKey();
+ v3s16 p = *i;
v3s16 np1 = p*MAP_BLOCKSIZE;
v3s16 np2 = np1 + v3s16(1,1,1)*MAP_BLOCKSIZE - v3s16(1,1,1);
a.addPoint(np1);
*/
virtual MapSector * emergeSector(v2s16 p){ return NULL; }
virtual MapSector * emergeSector(v2s16 p,
- core::map<v3s16, MapBlock*> &changed_blocks){ return NULL; }
+ std::map<v3s16, MapBlock*> &changed_blocks){ return NULL; }
// Returns InvalidPositionException if not found
MapBlock * getBlockNoCreate(v3s16 p);
MapNode getNodeNoEx(v3s16 p);
void unspreadLight(enum LightBank bank,
- core::map<v3s16, u8> & from_nodes,
- core::map<v3s16, bool> & light_sources,
- core::map<v3s16, MapBlock*> & modified_blocks);
+ std::map<v3s16, u8> & from_nodes,
+ std::set<v3s16> & light_sources,
+ std::map<v3s16, MapBlock*> & modified_blocks);
void unLightNeighbors(enum LightBank bank,
v3s16 pos, u8 lightwas,
- core::map<v3s16, bool> & light_sources,
- core::map<v3s16, MapBlock*> & modified_blocks);
+ std::set<v3s16> & light_sources,
+ std::map<v3s16, MapBlock*> & modified_blocks);
void spreadLight(enum LightBank bank,
- core::map<v3s16, bool> & from_nodes,
- core::map<v3s16, MapBlock*> & modified_blocks);
+ std::set<v3s16> & from_nodes,
+ std::map<v3s16, MapBlock*> & modified_blocks);
void lightNeighbors(enum LightBank bank,
v3s16 pos,
- core::map<v3s16, MapBlock*> & modified_blocks);
+ std::map<v3s16, MapBlock*> & modified_blocks);
v3s16 getBrightestNeighbour(enum LightBank bank, v3s16 p);
s16 propagateSunlight(v3s16 start,
- core::map<v3s16, MapBlock*> & modified_blocks);
+ std::map<v3s16, MapBlock*> & modified_blocks);
void updateLighting(enum LightBank bank,
- core::map<v3s16, MapBlock*> & a_blocks,
- core::map<v3s16, MapBlock*> & modified_blocks);
+ std::map<v3s16, MapBlock*> & a_blocks,
+ std::map<v3s16, MapBlock*> & modified_blocks);
- void updateLighting(core::map<v3s16, MapBlock*> & a_blocks,
- core::map<v3s16, MapBlock*> & modified_blocks);
+ void updateLighting(std::map<v3s16, MapBlock*> & a_blocks,
+ std::map<v3s16, MapBlock*> & modified_blocks);
/*
These handle lighting but not faces.
*/
void addNodeAndUpdate(v3s16 p, MapNode n,
- core::map<v3s16, MapBlock*> &modified_blocks);
+ std::map<v3s16, MapBlock*> &modified_blocks);
void removeNodeAndUpdate(v3s16 p,
- core::map<v3s16, MapBlock*> &modified_blocks);
+ std::map<v3s16, MapBlock*> &modified_blocks);
/*
Wrappers for the latter ones.
Saves modified blocks before unloading on MAPTYPE_SERVER.
*/
void timerUpdate(float dtime, float unload_timeout,
- core::list<v3s16> *unloaded_blocks=NULL);
+ std::list<v3s16> *unloaded_blocks=NULL);
// Deletes sectors and their blocks from memory
// Takes cache into account
// If deleted sector is in sector cache, clears cache
- void deleteSectors(core::list<v2s16> &list);
+ void deleteSectors(std::list<v2s16> &list);
#if 0
/*
// For debug printing. Prints "Map: ", "ServerMap: " or "ClientMap: "
virtual void PrintInfo(std::ostream &out);
- void transformLiquids(core::map<v3s16, MapBlock*> & modified_blocks);
- void transformLiquidsFinite(core::map<v3s16, MapBlock*> & modified_blocks);
+ void transformLiquids(std::map<v3s16, MapBlock*> & modified_blocks);
+ void transformLiquidsFinite(std::map<v3s16, MapBlock*> & modified_blocks);
/*
Node metadata
/*
Misc.
*/
- core::map<v2s16, MapSector*> *getSectorsPtr(){return &m_sectors;}
+ std::map<v2s16, MapSector*> *getSectorsPtr(){return &m_sectors;}
/*
Variables
IGameDef *m_gamedef;
- core::map<MapEventReceiver*, bool> m_event_receivers;
+ std::set<MapEventReceiver*> m_event_receivers;
- core::map<v2s16, MapSector*> m_sectors;
+ std::map<v2s16, MapSector*> m_sectors;
// Be sure to set this to NULL when the cached sector is deleted
MapSector *m_sector_cache;
*/
bool initBlockMake(BlockMakeData *data, v3s16 blockpos);
MapBlock *finishBlockMake(BlockMakeData *data,
- core::map<v3s16, MapBlock*> &changed_blocks);
-
- // A non-threaded wrapper to the above - DEFUNCT
-/* MapBlock * generateBlock(
- v3s16 p,
- core::map<v3s16, MapBlock*> &modified_blocks
- );*/
+ std::map<v3s16, MapBlock*> &changed_blocks);
/*
Get a block from somewhere.
void save(ModifiedState save_level);
//void loadAll();
-
- void listAllLoadableBlocks(core::list<v3s16> &dst);
-
+ void listAllLoadableBlocks(std::list<v3s16> &dst);
// Saves map seed and possibly other stuff
void saveMapMeta();
void loadMapMeta();
virtual void emerge(VoxelArea a, s32 caller_id=-1);
- void blitBack(core::map<v3s16, MapBlock*> & modified_blocks);
-
+ void blitBack(std::map<v3s16, MapBlock*> & modified_blocks);
+
+protected:
+ Map *m_map;
/*
key = blockpos
value = flags describing the block
*/
- core::map<v3s16, u8> m_loaded_blocks;
-protected:
- Map *m_map;
+ std::map<v3s16, u8> m_loaded_blocks;
};
class ManualMapVoxelManipulator : public MapVoxelManipulator
void initialEmerge(v3s16 blockpos_min, v3s16 blockpos_max);
// This is much faster with big chunks of generated data
- void blitBackAll(core::map<v3s16, MapBlock*> * modified_blocks);
+ void blitBackAll(std::map<v3s16, MapBlock*> * modified_blocks);
protected:
bool m_create_area;
if black_air_left!=NULL, it is set to true if non-sunlighted
air is left in block.
*/
-bool MapBlock::propagateSunlight(core::map<v3s16, bool> & light_sources,
+bool MapBlock::propagateSunlight(std::set<v3s16> & light_sources,
bool remove_light, bool *black_air_left)
{
INodeDefManager *nodemgr = m_gamedef->ndef();
if(diminish_light(current_light) != 0)
{
- light_sources.insert(pos_relative + pos, true);
+ light_sources.insert(pos_relative + pos);
}
if(current_light == 0 && stopped_to_solid_object)
#include <jmutex.h>
#include <jmutexautolock.h>
#include <exception>
+#include <set>
#include "debug.h"
#include "irrlichttypes.h"
#include "irr_v3d.h"
}
// See comments in mapblock.cpp
- bool propagateSunlight(core::map<v3s16, bool> & light_sources,
+ bool propagateSunlight(std::set<v3s16> & light_sources,
bool remove_light=false, bool *black_air_left=NULL);
// Copies data to VoxelManipulator to getPosRelative()
};
static void makeFastFace(TileSpec tile, u16 li0, u16 li1, u16 li2, u16 li3,
- v3f p, v3s16 dir, v3f scale, u8 light_source, core::array<FastFace> &dest)
+ v3f p, v3s16 dir, v3f scale, u8 light_source, std::vector<FastFace> &dest)
{
FastFace face;
v3f translate_dir_f,
v3s16 face_dir,
v3f face_dir_f,
- core::array<FastFace> &dest)
+ std::vector<FastFace> &dest)
{
v3s16 p = startpos;
}
static void updateAllFastFaceRows(MeshMakeData *data,
- core::array<FastFace> &dest)
+ std::vector<FastFace> &dest)
{
/*
Go through every y,z and get top(y+) faces in rows of x+
// 24-155ms for MAP_BLOCKSIZE=32 (NOTE: probably outdated)
//TimeTaker timer1("MapBlockMesh()");
- core::array<FastFace> fastfaces_new;
+ std::vector<FastFace> fastfaces_new;
/*
We are including the faces of the trailing edges of the block.
m_mesh->addMeshBuffer(buf);
// Mesh grabbed it
buf->drop();
- buf->append(p.vertices.pointer(), p.vertices.size(),
- p.indices.pointer(), p.indices.size());
+ buf->append(&p.vertices[0], p.vertices.size(),
+ &p.indices[0], p.indices.size());
}
/*
struct PreMeshBuffer
{
TileSpec tile;
- core::array<u16> indices;
- core::array<video::S3DVertex> vertices;
+ std::vector<u16> indices;
+ std::vector<video::S3DVertex> vertices;
};
struct MeshCollector
{
- core::array<PreMeshBuffer> prebuffers;
+ std::vector<PreMeshBuffer> prebuffers;
void append(const TileSpec &material,
const video::S3DVertex *vertices, u32 numVertices,
{
enum LightBank bank = banks[i];
- core::map<v3s16, bool> light_sources;
- core::map<v3s16, u8> unlight_from;
+ std::set<v3s16> light_sources;
+ std::map<v3s16, u8> unlight_from;
voxalgo::clearLightAndCollectSources(vmanip, a, bank, ndef,
light_sources, unlight_from);
{
enum LightBank bank = banks[i];
- core::map<v3s16, bool> light_sources;
- core::map<v3s16, u8> unlight_from;
+ std::set<v3s16> light_sources;
+ std::map<v3s16, u8> unlight_from;
voxalgo::clearLightAndCollectSources(vmanip, a, bank, ndef,
light_sources, unlight_from);
m_block_cache = NULL;
// Delete all
- core::map<s16, MapBlock*>::Iterator i = m_blocks.getIterator();
- for(; i.atEnd() == false; i++)
+ for(std::map<s16, MapBlock*>::iterator i = m_blocks.begin();
+ i != m_blocks.end(); ++i)
{
- delete i.getNode()->getValue();
+ delete i->second;
}
// Clear container
}
// If block doesn't exist, return NULL
- core::map<s16, MapBlock*>::Node *n = m_blocks.find(y);
- if(n == NULL)
+ std::map<s16, MapBlock*>::iterator n = m_blocks.find(y);
+ if(n == m_blocks.end())
{
block = NULL;
}
// If block exists, return it
else{
- block = n->getValue();
+ block = n->second;
}
// Cache the last result
{
MapBlock *block = createBlankBlockNoInsert(y);
- m_blocks.insert(y, block);
+ m_blocks[y] = block;
return block;
}
assert(p2d == m_pos);
// Insert into container
- m_blocks.insert(block_y, block);
+ m_blocks[block_y] = block;
}
void MapSector::deleteBlock(MapBlock *block)
m_block_cache = NULL;
// Remove from container
- m_blocks.remove(block_y);
+ m_blocks.erase(block_y);
// Delete
delete block;
}
-void MapSector::getBlocks(core::list<MapBlock*> &dest)
+void MapSector::getBlocks(std::list<MapBlock*> &dest)
{
- core::list<MapBlock*> ref_list;
-
- core::map<s16, MapBlock*>::Iterator bi;
-
- bi = m_blocks.getIterator();
- for(; bi.atEnd() == false; bi++)
+ for(std::map<s16, MapBlock*>::iterator bi = m_blocks.begin();
+ bi != m_blocks.end(); ++bi)
{
- MapBlock *b = bi.getNode()->getValue();
- dest.push_back(b);
+ dest.push_back(bi->second);
}
}
std::istream &is,
Map *parent,
v2s16 p2d,
- core::map<v2s16, MapSector*> & sectors,
+ std::map<v2s16, MapSector*> & sectors,
IGameDef *gamedef
)
{
ServerMapSector *sector = NULL;
- core::map<v2s16, MapSector*>::Node *n = sectors.find(p2d);
+ std::map<v2s16, MapSector*>::iterator n = sectors.find(p2d);
- if(n != NULL)
+ if(n != sectors.end())
{
dstream<<"WARNING: deSerializing existent sectors not supported "
"at the moment, because code hasn't been tested."
<<std::endl;
- MapSector *sector = n->getValue();
+ MapSector *sector = n->second;
assert(sector->getId() == MAPSECTOR_SERVER);
return (ServerMapSector*)sector;
}
else
{
sector = new ServerMapSector(parent, p2d, gamedef);
- sectors.insert(p2d, sector);
+ sectors[p2d] = sector;
}
/*
#include "irrlichttypes_bloated.h"
#include "exceptions.h"
#include <ostream>
+#include <map>
+#include <list>
class MapBlock;
class Map;
void deleteBlock(MapBlock *block);
- void getBlocks(core::list<MapBlock*> &dest);
+ void getBlocks(std::list<MapBlock*> &dest);
// Always false at the moment, because sector contains no metadata.
bool differs_from_disk;
protected:
// The pile of MapBlocks
- core::map<s16, MapBlock*> m_blocks;
+ std::map<s16, MapBlock*> m_blocks;
Map *m_parent;
// Position on parent (in MapBlock widths)
std::istream &is,
Map *parent,
v2s16 p2d,
- core::map<v2s16, MapSector*> & sectors,
+ std::map<v2s16, MapSector*> & sectors,
IGameDef *gamedef
);
#include <string>
#include <map>
#include <exception>
+#include <list>
class ModError : public std::exception
{
{}
};
-
std::map<std::string,ModSpec> getModsInPath(std::string path);
// expands modpack contents, but does not replace them.
};
-
#endif
-
#include "irrlichttypes_bloated.h"
#include <iostream>
#include <map>
+#include <vector>
struct ObjectProperties
{
std::string visual;
std::string mesh;
v2f visual_size;
- core::array<std::string> textures;
- core::array<video::SColor> colors;
+ std::vector<std::string> textures;
+ std::vector<video::SColor> colors;
v2s16 spritediv;
v2s16 initial_sprite_basepos;
bool is_visible;
JMutexAutoLock lock(m_mutex);
{
/* No average shall have been used; mark add used as -2 */
- core::map<std::string, int>::Node *n = m_avgcounts.find(name);
- if(n == NULL)
+ std::map<std::string, int>::iterator n = m_avgcounts.find(name);
+ if(n == m_avgcounts.end())
m_avgcounts[name] = -2;
else{
- if(n->getValue() == -1)
- n->setValue(-2);
- assert(n->getValue() == -2);
+ if(n->second == -1)
+ n->second = -2;
+ assert(n->second == -2);
}
}
{
- core::map<std::string, float>::Node *n = m_data.find(name);
- if(n == NULL)
+ std::map<std::string, float>::iterator n = m_data.find(name);
+ if(n == m_data.end())
m_data[name] = value;
else
- n->setValue(n->getValue() + value);
+ n->second += value;
}
}
{
JMutexAutoLock lock(m_mutex);
{
- core::map<std::string, int>::Node *n = m_avgcounts.find(name);
- if(n == NULL)
+ std::map<std::string, int>::iterator n = m_avgcounts.find(name);
+ if(n == m_avgcounts.end())
m_avgcounts[name] = 1;
else{
/* No add shall have been used */
- assert(n->getValue() != -2);
- if(n->getValue() <= 0)
- n->setValue(1);
- else
- n->setValue(n->getValue() + 1);
+ assert(n->second != -2);
+ n->second = std::max(n->second, 0) + 1;
}
}
{
- core::map<std::string, float>::Node *n = m_data.find(name);
- if(n == NULL)
+ std::map<std::string, float>::iterator n = m_data.find(name);
+ if(n == m_data.end())
m_data[name] = value;
else
- n->setValue(n->getValue() + value);
+ n->second += value;
}
}
void clear()
{
JMutexAutoLock lock(m_mutex);
- for(core::map<std::string, float>::Iterator
- i = m_data.getIterator();
- i.atEnd() == false; i++)
+ for(std::map<std::string, float>::iterator
+ i = m_data.begin();
+ i != m_data.end(); ++i)
{
- i.getNode()->setValue(0);
+ i->second = 0;
}
m_avgcounts.clear();
}
u32 minindex, maxindex;
paging(m_data.size(), page, pagecount, minindex, maxindex);
- for(core::map<std::string, float>::Iterator
- i = m_data.getIterator();
- i.atEnd() == false; i++)
+ for(std::map<std::string, float>::iterator
+ i = m_data.begin();
+ i != m_data.end(); ++i)
{
if(maxindex == 0)
break;
continue;
}
- std::string name = i.getNode()->getKey();
+ std::string name = i->first;
int avgcount = 1;
- core::map<std::string, int>::Node *n = m_avgcounts.find(name);
- if(n){
- if(n->getValue() >= 1)
- avgcount = n->getValue();
+ std::map<std::string, int>::iterator n = m_avgcounts.find(name);
+ if(n != m_avgcounts.end()){
+ if(n->second >= 1)
+ avgcount = n->second;
}
o<<" "<<name<<": ";
s32 clampsize = 40;
else
o<<" ";
}
- o<<(i.getNode()->getValue() / avgcount);
+ o<<(i->second / avgcount);
o<<std::endl;
}
}
private:
JMutex m_mutex;
- core::map<std::string, float> m_data;
- core::map<std::string, int> m_avgcounts;
+ std::map<std::string, float> m_data;
+ std::map<std::string, int> m_avgcounts;
std::map<std::string, float> m_graphvalues;
};
static int l_get_modnames(lua_State *L)
{
// Get a list of mods
- core::list<std::string> mods_unsorted, mods_sorted;
+ std::list<std::string> mods_unsorted, mods_sorted;
get_server(L)->getModNames(mods_unsorted);
// Take unsorted items from mods_unsorted and sort them into
// mods_sorted; not great performance but the number of mods on a
// server will likely be small.
- for(core::list<std::string>::Iterator i = mods_unsorted.begin();
- i != mods_unsorted.end(); i++)
+ for(std::list<std::string>::iterator i = mods_unsorted.begin();
+ i != mods_unsorted.end(); ++i)
{
bool added = false;
- for(core::list<std::string>::Iterator x = mods_sorted.begin();
- x != mods_unsorted.end(); x++)
+ for(std::list<std::string>::iterator x = mods_sorted.begin();
+ x != mods_unsorted.end(); ++x)
{
// I doubt anybody using Minetest will be using
// anything not ASCII based :)
if((*i).compare(*x) <= 0)
{
- mods_sorted.insert_before(x, *i);
+ mods_sorted.insert(x, *i);
added = true;
break;
}
// Package them up for Lua
lua_newtable(L);
int new_table = lua_gettop(L);
- core::list<std::string>::Iterator i = mods_sorted.begin();
+ std::list<std::string>::iterator i = mods_sorted.begin();
while(i != mods_sorted.end())
{
lua_pushvalue(L, insertion_func);
{
script_error(L, "error: %s", lua_tostring(L, -1));
}
- i++;
+ ++i;
}
return 1;
}
}
for(int d=1; d<=radius; d++){
- core::list<v3s16> list;
+ std::list<v3s16> list;
getFacePositions(list, d);
- for(core::list<v3s16>::Iterator i = list.begin();
- i != list.end(); i++){
+ for(std::list<v3s16>::iterator i = list.begin();
+ i != list.end(); ++i){
v3s16 p = pos + (*i);
content_t c = env->getMap().getNodeNoEx(p).getContent();
if(filter.count(c) != 0){
}
void RemoteClient::GetNextBlocks(Server *server, float dtime,
- core::array<PrioritySortedBlockTransfer> &dest)
+ std::vector<PrioritySortedBlockTransfer> &dest)
{
DSTACK(__FUNCTION_NAME);
Get the border/face dot coordinates of a "d-radiused"
box
*/
- core::list<v3s16> list;
+ std::list<v3s16> list;
getFacePositions(list, d);
- core::list<v3s16>::Iterator li;
- for(li=list.begin(); li!=list.end(); li++)
+ std::list<v3s16>::iterator li;
+ for(li=list.begin(); li!=list.end(); ++li)
{
v3s16 p = *li + center;
}
// Don't send blocks that are currently being transferred
- if(m_blocks_sending.find(p) != NULL)
+ if(m_blocks_sending.find(p) != m_blocks_sending.end())
continue;
/*
Don't send already sent blocks
*/
{
- if(m_blocks_sent.find(p) != NULL)
+ if(m_blocks_sent.find(p) != m_blocks_sent.end())
{
continue;
}
void RemoteClient::GotBlock(v3s16 p)
{
- if(m_blocks_sending.find(p) != NULL)
- m_blocks_sending.remove(p);
+ if(m_blocks_sending.find(p) != m_blocks_sending.end())
+ m_blocks_sending.erase(p);
else
{
/*infostream<<"RemoteClient::GotBlock(): Didn't find in"
" m_blocks_sending"<<std::endl;*/
m_excess_gotblocks++;
}
- m_blocks_sent.insert(p, true);
+ m_blocks_sent.insert(p);
}
void RemoteClient::SentBlock(v3s16 p)
{
- if(m_blocks_sending.find(p) == NULL)
- m_blocks_sending.insert(p, 0.0);
+ if(m_blocks_sending.find(p) == m_blocks_sending.end())
+ m_blocks_sending[p] = 0.0;
else
infostream<<"RemoteClient::SentBlock(): Sent block"
" already in m_blocks_sending"<<std::endl;
{
m_nearest_unsent_d = 0;
- if(m_blocks_sending.find(p) != NULL)
- m_blocks_sending.remove(p);
- if(m_blocks_sent.find(p) != NULL)
- m_blocks_sent.remove(p);
+ if(m_blocks_sending.find(p) != m_blocks_sending.end())
+ m_blocks_sending.erase(p);
+ if(m_blocks_sent.find(p) != m_blocks_sent.end())
+ m_blocks_sent.erase(p);
}
-void RemoteClient::SetBlocksNotSent(core::map<v3s16, MapBlock*> &blocks)
+void RemoteClient::SetBlocksNotSent(std::map<v3s16, MapBlock*> &blocks)
{
m_nearest_unsent_d = 0;
- for(core::map<v3s16, MapBlock*>::Iterator
- i = blocks.getIterator();
- i.atEnd()==false; i++)
+ for(std::map<v3s16, MapBlock*>::iterator
+ i = blocks.begin();
+ i != blocks.end(); ++i)
{
- v3s16 p = i.getNode()->getKey();
+ v3s16 p = i->first;
- if(m_blocks_sending.find(p) != NULL)
- m_blocks_sending.remove(p);
- if(m_blocks_sent.find(p) != NULL)
- m_blocks_sent.remove(p);
+ if(m_blocks_sending.find(p) != m_blocks_sending.end())
+ m_blocks_sending.erase(p);
+ if(m_blocks_sent.find(p) != m_blocks_sent.end())
+ m_blocks_sent.erase(p);
}
}
/*
Send the message to clients
*/
- for(core::map<u16, RemoteClient*>::Iterator
- i = m_clients.getIterator();
- i.atEnd() == false; i++)
+ for(std::map<u16, RemoteClient*>::iterator
+ i = m_clients.begin();
+ i != m_clients.end(); ++i)
{
// Get client and check that it is valid
- RemoteClient *client = i.getNode()->getValue();
- assert(client->peer_id == i.getNode()->getKey());
+ RemoteClient *client = i->second;
+ assert(client->peer_id == i->first);
if(client->serialization_version == SER_FMT_VER_INVALID)
continue;
{
JMutexAutoLock clientslock(m_con_mutex);
- for(core::map<u16, RemoteClient*>::Iterator
- i = m_clients.getIterator();
- i.atEnd() == false; i++)
+ for(std::map<u16, RemoteClient*>::iterator
+ i = m_clients.begin();
+ i != m_clients.end(); ++i)
{
// Delete client
- delete i.getNode()->getValue();
+ delete i->second;
}
}
//JMutexAutoLock envlock(m_env_mutex);
JMutexAutoLock conlock(m_con_mutex);
- for(core::map<u16, RemoteClient*>::Iterator
- i = m_clients.getIterator();
- i.atEnd() == false; i++)
+ for(std::map<u16, RemoteClient*>::iterator
+ i = m_clients.begin();
+ i != m_clients.end(); ++i)
{
- RemoteClient *client = i.getNode()->getValue();
+ RemoteClient *client = i->second;
SharedBuffer<u8> data = makePacket_TOCLIENT_TIME_OF_DAY(
m_env->getTimeOfDay(), g_settings->getFloat("time_speed"));
// Send as reliable
ScopeProfiler sp(g_profiler, "Server: handle players");
- for(core::map<u16, RemoteClient*>::Iterator
- i = m_clients.getIterator();
- i.atEnd() == false; i++)
+ for(std::map<u16, RemoteClient*>::iterator
+ i = m_clients.begin();
+ i != m_clients.end(); ++i)
{
- RemoteClient *client = i.getNode()->getValue();
+ RemoteClient *client = i->second;
PlayerSAO *playersao = getPlayerSAO(client->peer_id);
if(playersao == NULL)
continue;
ScopeProfiler sp(g_profiler, "Server: liquid transform");
- core::map<v3s16, MapBlock*> modified_blocks;
+ std::map<v3s16, MapBlock*> modified_blocks;
m_env->getMap().transformLiquids(modified_blocks);
#if 0
/*
JMutexAutoLock lock2(m_con_mutex);
- for(core::map<u16, RemoteClient*>::Iterator
- i = m_clients.getIterator();
- i.atEnd() == false; i++)
+ for(std::map<u16, RemoteClient*>::iterator
+ i = m_clients.begin();
+ i != m_clients.end(); ++i)
{
- RemoteClient *client = i.getNode()->getValue();
+ RemoteClient *client = i->second;
if(modified_blocks.size() > 0)
{
m_clients_number = 0;
if(m_clients.size() != 0)
infostream<<"Players:"<<std::endl;
- for(core::map<u16, RemoteClient*>::Iterator
- i = m_clients.getIterator();
- i.atEnd() == false; i++)
+ for(std::map<u16, RemoteClient*>::iterator
+ i = m_clients.begin();
+ i != m_clients.end(); ++i)
{
//u16 peer_id = i.getNode()->getKey();
- RemoteClient *client = i.getNode()->getValue();
+ RemoteClient *client = i->second;
Player *player = m_env->getPlayer(client->peer_id);
if(player==NULL)
continue;
s16 radius = g_settings->getS16("active_object_send_range_blocks");
radius *= MAP_BLOCKSIZE;
- for(core::map<u16, RemoteClient*>::Iterator
- i = m_clients.getIterator();
- i.atEnd() == false; i++)
+ for(std::map<u16, RemoteClient*>::iterator
+ i = m_clients.begin();
+ i != m_clients.end(); ++i)
{
- RemoteClient *client = i.getNode()->getValue();
+ RemoteClient *client = i->second;
// If definitions and textures have not been sent, don't
// send objects either
}
v3s16 pos = floatToInt(player->getPosition(), BS);
- core::map<u16, bool> removed_objects;
- core::map<u16, bool> added_objects;
+ std::set<u16> removed_objects;
+ std::set<u16> added_objects;
m_env->getRemovedActiveObjects(pos, radius,
client->m_known_objects, removed_objects);
m_env->getAddedActiveObjects(pos, radius,
// Handle removed objects
writeU16((u8*)buf, removed_objects.size());
data_buffer.append(buf, 2);
- for(core::map<u16, bool>::Iterator
- i = removed_objects.getIterator();
- i.atEnd()==false; i++)
+ for(std::set<u16>::iterator
+ i = removed_objects.begin();
+ i != removed_objects.end(); ++i)
{
// Get object
- u16 id = i.getNode()->getKey();
+ u16 id = *i;
ServerActiveObject* obj = m_env->getActiveObject(id);
// Add to data buffer for sending
- writeU16((u8*)buf, i.getNode()->getKey());
+ writeU16((u8*)buf, id);
data_buffer.append(buf, 2);
// Remove from known objects
- client->m_known_objects.remove(i.getNode()->getKey());
+ client->m_known_objects.erase(id);
if(obj && obj->m_known_by_count > 0)
obj->m_known_by_count--;
// Handle added objects
writeU16((u8*)buf, added_objects.size());
data_buffer.append(buf, 2);
- for(core::map<u16, bool>::Iterator
- i = added_objects.getIterator();
- i.atEnd()==false; i++)
+ for(std::set<u16>::iterator
+ i = added_objects.begin();
+ i != added_objects.end(); ++i)
{
// Get object
- u16 id = i.getNode()->getKey();
+ u16 id = *i;
ServerActiveObject* obj = m_env->getActiveObject(id);
// Get object type
data_buffer.append(serializeLongString(""));
// Add to known objects
- client->m_known_objects.insert(i.getNode()->getKey(), false);
+ client->m_known_objects.insert(id);
if(obj)
obj->m_known_by_count++;
// Key = object id
// Value = data sent by object
- core::map<u16, core::list<ActiveObjectMessage>* > buffered_messages;
+ std::map<u16, std::list<ActiveObjectMessage>* > buffered_messages;
// Get active object messages from environment
for(;;)
if(aom.id == 0)
break;
- core::list<ActiveObjectMessage>* message_list = NULL;
- core::map<u16, core::list<ActiveObjectMessage>* >::Node *n;
+ std::list<ActiveObjectMessage>* message_list = NULL;
+ std::map<u16, std::list<ActiveObjectMessage>* >::iterator n;
n = buffered_messages.find(aom.id);
- if(n == NULL)
+ if(n == buffered_messages.end())
{
- message_list = new core::list<ActiveObjectMessage>;
- buffered_messages.insert(aom.id, message_list);
+ message_list = new std::list<ActiveObjectMessage>;
+ buffered_messages[aom.id] = message_list;
}
else
{
- message_list = n->getValue();
+ message_list = n->second;
}
message_list->push_back(aom);
}
// Route data to every client
- for(core::map<u16, RemoteClient*>::Iterator
- i = m_clients.getIterator();
- i.atEnd()==false; i++)
+ for(std::map<u16, RemoteClient*>::iterator
+ i = m_clients.begin();
+ i != m_clients.end(); ++i)
{
- RemoteClient *client = i.getNode()->getValue();
+ RemoteClient *client = i->second;
std::string reliable_data;
std::string unreliable_data;
// Go through all objects in message buffer
- for(core::map<u16, core::list<ActiveObjectMessage>* >::Iterator
- j = buffered_messages.getIterator();
- j.atEnd()==false; j++)
+ for(std::map<u16, std::list<ActiveObjectMessage>* >::iterator
+ j = buffered_messages.begin();
+ j != buffered_messages.end(); ++j)
{
// If object is not known by client, skip it
- u16 id = j.getNode()->getKey();
- if(client->m_known_objects.find(id) == NULL)
+ u16 id = j->first;
+ if(client->m_known_objects.find(id) == client->m_known_objects.end())
continue;
// Get message list of object
- core::list<ActiveObjectMessage>* list = j.getNode()->getValue();
+ std::list<ActiveObjectMessage>* list = j->second;
// Go through every message
- for(core::list<ActiveObjectMessage>::Iterator
- k = list->begin(); k != list->end(); k++)
+ for(std::list<ActiveObjectMessage>::iterator
+ k = list->begin(); k != list->end(); ++k)
{
// Compose the full new data with header
ActiveObjectMessage aom = *k;
}
// Clear buffered_messages
- for(core::map<u16, core::list<ActiveObjectMessage>* >::Iterator
- i = buffered_messages.getIterator();
- i.atEnd()==false; i++)
+ for(std::map<u16, std::list<ActiveObjectMessage>* >::iterator
+ i = buffered_messages.begin();
+ i != buffered_messages.end(); ++i)
{
- delete i.getNode()->getValue();
+ delete i->second;
}
}
// Players far away from the change are stored here.
// Instead of sending the changes, MapBlocks are set not sent
// for them.
- core::list<u16> far_players;
+ std::list<u16> far_players;
if(event->type == MEET_ADDNODE)
{
{
infostream<<"Server: MEET_OTHER"<<std::endl;
prof.add("MEET_OTHER", 1);
- for(core::map<v3s16, bool>::Iterator
- i = event->modified_blocks.getIterator();
- i.atEnd()==false; i++)
+ for(std::set<v3s16>::iterator
+ i = event->modified_blocks.begin();
+ i != event->modified_blocks.end(); ++i)
{
- v3s16 p = i.getNode()->getKey();
- setBlockNotSent(p);
+ setBlockNotSent(*i);
}
}
else
if(far_players.size() > 0)
{
// Convert list format to that wanted by SetBlocksNotSent
- core::map<v3s16, MapBlock*> modified_blocks2;
- for(core::map<v3s16, bool>::Iterator
- i = event->modified_blocks.getIterator();
- i.atEnd()==false; i++)
+ std::map<v3s16, MapBlock*> modified_blocks2;
+ for(std::set<v3s16>::iterator
+ i = event->modified_blocks.begin();
+ i != event->modified_blocks.end(); ++i)
{
- v3s16 p = i.getNode()->getKey();
- modified_blocks2.insert(p,
- m_env->getMap().getBlockNoCreateNoEx(p));
+ modified_blocks2[*i] =
+ m_env->getMap().getBlockNoCreateNoEx(*i);
}
// Set blocks not sent
- for(core::list<u16>::Iterator
+ for(std::list<u16>::iterator
i = far_players.begin();
- i != far_players.end(); i++)
+ i != far_players.end(); ++i)
{
u16 peer_id = *i;
RemoteClient *client = getClient(peer_id);
u8 client_max = data[2];
u8 our_max = SER_FMT_VER_HIGHEST;
// Use the highest version supported by both
- u8 deployed = core::min_(client_max, our_max);
+ u8 deployed = std::min(client_max, our_max);
// If it's lower than the lowest supported, give up.
if(deployed < SER_FMT_VER_LOWEST)
deployed = SER_FMT_VER_INVALID;
*/
{
std::ostringstream os(std::ios_base::binary);
- for(core::map<u16, RemoteClient*>::Iterator
- i = m_clients.getIterator();
- i.atEnd() == false; i++)
+ for(std::map<u16, RemoteClient*>::iterator
+ i = m_clients.begin();
+ i != m_clients.end(); ++i)
{
- RemoteClient *client = i.getNode()->getValue();
- assert(client->peer_id == i.getNode()->getKey());
+ RemoteClient *client = i->second;
+ assert(client->peer_id == i->first);
if(client->serialization_version == SER_FMT_VER_INVALID)
continue;
// Get player
/*
Send the message to clients
*/
- for(core::map<u16, RemoteClient*>::Iterator
- i = m_clients.getIterator();
- i.atEnd() == false; i++)
+ for(std::map<u16, RemoteClient*>::iterator
+ i = m_clients.begin();
+ i != m_clients.end(); ++i)
{
// Get client and check that it is valid
- RemoteClient *client = i.getNode()->getValue();
- assert(client->peer_id == i.getNode()->getKey());
+ RemoteClient *client = i->second;
+ assert(client->peer_id == i->first);
if(client->serialization_version == SER_FMT_VER_INVALID)
continue;
std::string datastring((char*)&data[2], datasize-2);
std::istringstream is(datastring, std::ios_base::binary);
- core::list<MediaRequest> tosend;
+ std::list<MediaRequest> tosend;
u16 numfiles = readU16(is);
infostream<<"Sending "<<numfiles<<" files to "
}
}
-core::list<PlayerInfo> Server::getPlayerInfo()
+std::list<PlayerInfo> Server::getPlayerInfo()
{
DSTACK(__FUNCTION_NAME);
JMutexAutoLock envlock(m_env_mutex);
JMutexAutoLock conlock(m_con_mutex);
- core::list<PlayerInfo> list;
+ std::list<PlayerInfo> list;
- core::list<Player*> players = m_env->getPlayers();
+ std::list<Player*> players = m_env->getPlayers();
- core::list<Player*>::Iterator i;
+ std::list<Player*>::iterator i;
for(i = players.begin();
- i != players.end(); i++)
+ i != players.end(); ++i)
{
PlayerInfo info;
void Server::BroadcastChatMessage(const std::wstring &message)
{
- for(core::map<u16, RemoteClient*>::Iterator
- i = m_clients.getIterator();
- i.atEnd() == false; i++)
+ for(std::map<u16, RemoteClient*>::iterator
+ i = m_clients.begin();
+ i != m_clients.end(); ++i)
{
// Get client and check that it is valid
- RemoteClient *client = i.getNode()->getValue();
- assert(client->peer_id == i.getNode()->getKey());
+ RemoteClient *client = i->second;
+ assert(client->peer_id == i->first);
if(client->serialization_version == SER_FMT_VER_INVALID)
continue;
}
else
{
- for(core::map<u16, RemoteClient*>::Iterator
- i = m_clients.getIterator(); i.atEnd() == false; i++)
+ for(std::map<u16, RemoteClient*>::iterator
+ i = m_clients.begin(); i != m_clients.end(); ++i)
{
- RemoteClient *client = i.getNode()->getValue();
+ RemoteClient *client = i->second;
Player *player = m_env->getPlayer(client->peer_id);
if(!player)
continue;
}
void Server::sendRemoveNode(v3s16 p, u16 ignore_id,
- core::list<u16> *far_players, float far_d_nodes)
+ std::list<u16> *far_players, float far_d_nodes)
{
float maxd = far_d_nodes*BS;
v3f p_f = intToFloat(p, BS);
writeS16(&reply[4], p.Y);
writeS16(&reply[6], p.Z);
- for(core::map<u16, RemoteClient*>::Iterator
- i = m_clients.getIterator();
- i.atEnd() == false; i++)
+ for(std::map<u16, RemoteClient*>::iterator
+ i = m_clients.begin();
+ i != m_clients.end(); ++i)
{
// Get client and check that it is valid
- RemoteClient *client = i.getNode()->getValue();
- assert(client->peer_id == i.getNode()->getKey());
+ RemoteClient *client = i->second;
+ assert(client->peer_id == i->first);
if(client->serialization_version == SER_FMT_VER_INVALID)
continue;
}
void Server::sendAddNode(v3s16 p, MapNode n, u16 ignore_id,
- core::list<u16> *far_players, float far_d_nodes)
+ std::list<u16> *far_players, float far_d_nodes)
{
float maxd = far_d_nodes*BS;
v3f p_f = intToFloat(p, BS);
- for(core::map<u16, RemoteClient*>::Iterator
- i = m_clients.getIterator();
- i.atEnd() == false; i++)
+ for(std::map<u16, RemoteClient*>::iterator
+ i = m_clients.begin();
+ i != m_clients.end(); ++i)
{
// Get client and check that it is valid
- RemoteClient *client = i.getNode()->getValue();
- assert(client->peer_id == i.getNode()->getKey());
+ RemoteClient *client = i->second;
+ assert(client->peer_id == i->first);
if(client->serialization_version == SER_FMT_VER_INVALID)
continue;
void Server::setBlockNotSent(v3s16 p)
{
- for(core::map<u16, RemoteClient*>::Iterator
- i = m_clients.getIterator();
- i.atEnd()==false; i++)
+ for(std::map<u16, RemoteClient*>::iterator
+ i = m_clients.begin();
+ i != m_clients.end(); ++i)
{
- RemoteClient *client = i.getNode()->getValue();
+ RemoteClient *client = i->second;
client->SetBlockNotSent(p);
}
}
ScopeProfiler sp(g_profiler, "Server: sel and send blocks to clients");
- core::array<PrioritySortedBlockTransfer> queue;
+ std::vector<PrioritySortedBlockTransfer> queue;
s32 total_sending = 0;
{
ScopeProfiler sp(g_profiler, "Server: selecting blocks for sending");
- for(core::map<u16, RemoteClient*>::Iterator
- i = m_clients.getIterator();
- i.atEnd() == false; i++)
+ for(std::map<u16, RemoteClient*>::iterator
+ i = m_clients.begin();
+ i != m_clients.end(); ++i)
{
- RemoteClient *client = i.getNode()->getValue();
- assert(client->peer_id == i.getNode()->getKey());
+ RemoteClient *client = i->second;
+ assert(client->peer_id == i->first);
// If definitions and textures have not been sent, don't
// send MapBlocks either
// Sort.
// Lowest priority number comes first.
// Lowest is most important.
- queue.sort();
+ std::sort(queue.begin(), queue.end());
for(u32 i=0; i<queue.size(); i++)
{
verbosestream<<"Server: Announcing files to id("<<peer_id<<")"
<<std::endl;
- core::list<SendableMediaAnnouncement> file_announcements;
+ std::list<SendableMediaAnnouncement> file_announcements;
for(std::map<std::string, MediaInfo>::iterator i = m_media.begin();
i != m_media.end(); i++){
writeU16(os, TOCLIENT_ANNOUNCE_MEDIA);
writeU16(os, file_announcements.size());
- for(core::list<SendableMediaAnnouncement>::Iterator
+ for(std::list<SendableMediaAnnouncement>::iterator
j = file_announcements.begin();
- j != file_announcements.end(); j++){
+ j != file_announcements.end(); ++j){
os<<serializeString(j->name);
os<<serializeString(j->sha1_digest);
}
};
void Server::sendRequestedMedia(u16 peer_id,
- const core::list<MediaRequest> &tosend)
+ const std::list<MediaRequest> &tosend)
{
DSTACK(__FUNCTION_NAME);
// Put 5kB in one bunch (this is not accurate)
u32 bytes_per_bunch = 5000;
- core::array< core::list<SendableMedia> > file_bunches;
- file_bunches.push_back(core::list<SendableMedia>());
+ std::vector< std::list<SendableMedia> > file_bunches;
+ file_bunches.push_back(std::list<SendableMedia>());
u32 file_size_bunch_total = 0;
- for(core::list<MediaRequest>::ConstIterator i = tosend.begin();
- i != tosend.end(); i++)
+ for(std::list<MediaRequest>::const_iterator i = tosend.begin();
+ i != tosend.end(); ++i)
{
if(m_media.find(i->name) == m_media.end()){
errorstream<<"Server::sendRequestedMedia(): Client asked for "
// Start next bunch if got enough data
if(file_size_bunch_total >= bytes_per_bunch){
- file_bunches.push_back(core::list<SendableMedia>());
+ file_bunches.push_back(std::list<SendableMedia>());
file_size_bunch_total = 0;
}
writeU16(os, i);
writeU32(os, file_bunches[i].size());
- for(core::list<SendableMedia>::Iterator
+ for(std::list<SendableMedia>::iterator
j = file_bunches[i].begin();
- j != file_bunches[i].end(); j++){
+ j != file_bunches[i].end(); ++j){
os<<serializeString(j->name);
os<<serializeLongString(j->data);
}
{
DSTACK(__FUNCTION_NAME);
- for(core::map<u16, RemoteClient*>::Iterator
- i = m_clients.getIterator();
- i.atEnd() == false; i++){
- RemoteClient *client = i.getNode()->getValue();
+ for(std::map<u16, RemoteClient*>::iterator
+ i = m_clients.begin();
+ i != m_clients.end(); ++i){
+ RemoteClient *client = i->second;
sendDetachedInventory(name, client->peer_id);
}
}
{
DSTACK(__FUNCTION_NAME);
//JMutexAutoLock lock(m_con_mutex);
- core::map<u16, RemoteClient*>::Node *n;
+ std::map<u16, RemoteClient*>::iterator n;
n = m_clients.find(peer_id);
// A client should exist for all peers
- assert(n != NULL);
- return n->getValue();
+ assert(n != m_clients.end());
+ return n->second;
}
std::wstring Server::getStatusString()
// Uptime
os<<L", uptime="<<m_uptime.get();
// Information about clients
- core::map<u16, RemoteClient*>::Iterator i;
+ std::map<u16, RemoteClient*>::iterator i;
bool first;
os<<L", clients={";
- for(i = m_clients.getIterator(), first = true;
- i.atEnd() == false; i++)
+ for(i = m_clients.begin(), first = true;
+ i != m_clients.end(); ++i)
{
// Get client and check that it is valid
- RemoteClient *client = i.getNode()->getValue();
- assert(client->peer_id == i.getNode()->getKey());
+ RemoteClient *client = i->second;
+ assert(client->peer_id == i->first);
if(client->serialization_version == SER_FMT_VER_INVALID)
continue;
// Get player
void Server::reportPrivsModified(const std::string &name)
{
if(name == ""){
- for(core::map<u16, RemoteClient*>::Iterator
- i = m_clients.getIterator();
- i.atEnd() == false; i++){
- RemoteClient *client = i.getNode()->getValue();
+ for(std::map<u16, RemoteClient*>::iterator
+ i = m_clients.begin();
+ i != m_clients.end(); ++i){
+ RemoteClient *client = i->second;
Player *player = m_env->getPlayer(client->peer_id);
reportPrivsModified(player->getName());
}
}
return NULL;
}
-void Server::getModNames(core::list<std::string> &modlist)
+void Server::getModNames(std::list<std::string> &modlist)
{
for(std::vector<ModSpec>::iterator i = m_mods.begin(); i != m_mods.end(); i++)
{
- modlist.push_back((*i).name);
+ modlist.push_back(i->name);
}
}
std::string Server::getBuiltinLuaPath()
*/
// Error check
- core::map<u16, RemoteClient*>::Node *n;
+ std::map<u16, RemoteClient*>::iterator n;
n = m_clients.find(c.peer_id);
// The client shouldn't already exist
- assert(n == NULL);
+ assert(n == m_clients.end());
// Create client
RemoteClient *client = new RemoteClient();
client->peer_id = c.peer_id;
- m_clients.insert(client->peer_id, client);
+ m_clients[client->peer_id] = client;
} // PEER_ADDED
else if(c.type == PEER_REMOVED)
*/
// Error check
- core::map<u16, RemoteClient*>::Node *n;
+ std::map<u16, RemoteClient*>::iterator n;
n = m_clients.find(c.peer_id);
// The client should exist
- assert(n != NULL);
+ assert(n != m_clients.end());
/*
Mark objects to be not known by the client
*/
- RemoteClient *client = n->getValue();
+ RemoteClient *client = n->second;
// Handle objects
- for(core::map<u16, bool>::Iterator
- i = client->m_known_objects.getIterator();
- i.atEnd()==false; i++)
+ for(std::set<u16>::iterator
+ i = client->m_known_objects.begin();
+ i != client->m_known_objects.end(); ++i)
{
// Get object
- u16 id = i.getNode()->getKey();
+ u16 id = *i;
ServerActiveObject* obj = m_env->getActiveObject(id);
if(obj && obj->m_known_by_count > 0)
if(player != NULL)
{
std::ostringstream os(std::ios_base::binary);
- for(core::map<u16, RemoteClient*>::Iterator
- i = m_clients.getIterator();
- i.atEnd() == false; i++)
+ for(std::map<u16, RemoteClient*>::iterator
+ i = m_clients.begin();
+ i != m_clients.end(); ++i)
{
- RemoteClient *client = i.getNode()->getValue();
- assert(client->peer_id == i.getNode()->getKey());
+ RemoteClient *client = i->second;
+ assert(client->peer_id == i->first);
if(client->serialization_version == SER_FMT_VER_INVALID)
continue;
// Get player
// Delete client
delete m_clients[c.peer_id];
- m_clients.remove(c.peer_id);
+ m_clients.erase(c.peer_id);
// Send player info to all remaining clients
//SendPlayerInfos();
#include "util/string.h"
#include "rollback_interface.h" // Needed for rollbackRevertActions()
#include <list> // Needed for rollbackRevertActions()
+#include <algorithm>
#define PP(x) "("<<(x).X<<","<<(x).Y<<","<<(x).Z<<")"
pos = a_pos;
peer_id = a_peer_id;
}
- bool operator < (PrioritySortedBlockTransfer &other)
+ bool operator < (const PrioritySortedBlockTransfer &other) const
{
return priority < other.priority;
}
dtime is used for resetting send radius at slow interval
*/
void GetNextBlocks(Server *server, float dtime,
- core::array<PrioritySortedBlockTransfer> &dest);
+ std::vector<PrioritySortedBlockTransfer> &dest);
void GotBlock(v3s16 p);
void SentBlock(v3s16 p);
void SetBlockNotSent(v3s16 p);
- void SetBlocksNotSent(core::map<v3s16, MapBlock*> &blocks);
+ void SetBlocksNotSent(std::map<v3s16, MapBlock*> &blocks);
s32 SendingCount()
{
List of active objects that the client knows of.
Value is dummy.
*/
- core::map<u16, bool> m_known_objects;
+ std::set<u16> m_known_objects;
private:
/*
Key is position, value is dummy.
No MapBlock* is stored here because the blocks can get deleted.
*/
- core::map<v3s16, bool> m_blocks_sent;
+ std::set<v3s16> m_blocks_sent;
s16 m_nearest_unsent_d;
v3s16 m_last_center;
float m_nearest_unsent_reset_timer;
Block is removed when GOTBLOCKS is received.
Value is time from sending. (not used at the moment)
*/
- core::map<v3s16, float> m_blocks_sending;
+ std::map<v3s16, float> m_blocks_sending;
/*
Count of excess GotBlocks().
void Receive();
void ProcessData(u8 *data, u32 datasize, u16 peer_id);
- core::list<PlayerInfo> getPlayerInfo();
+ std::list<PlayerInfo> getPlayerInfo();
// Environment must be locked when called
void setTimeOfDay(u32 time)
IWritableCraftDefManager* getWritableCraftDefManager();
const ModSpec* getModSpec(const std::string &modname);
- void getModNames(core::list<std::string> &modlist);
+ void getModNames(std::list<std::string> &modlist);
std::string getBuiltinLuaPath();
std::string getWorldPath(){ return m_path_world; }
*/
// Envlock and conlock should be locked when calling these
void sendRemoveNode(v3s16 p, u16 ignore_id=0,
- core::list<u16> *far_players=NULL, float far_d_nodes=100);
+ std::list<u16> *far_players=NULL, float far_d_nodes=100);
void sendAddNode(v3s16 p, MapNode n, u16 ignore_id=0,
- core::list<u16> *far_players=NULL, float far_d_nodes=100);
+ std::list<u16> *far_players=NULL, float far_d_nodes=100);
void setBlockNotSent(v3s16 p);
// Environment and Connection must be locked when called
void fillMediaCache();
void sendMediaAnnouncement(u16 peer_id);
void sendRequestedMedia(u16 peer_id,
- const core::list<MediaRequest> &tosend);
+ const std::list<MediaRequest> &tosend);
void sendDetachedInventory(const std::string &name, u16 peer_id);
void sendDetachedInventoryToAll(const std::string &name);
con::Connection m_con;
JMutex m_con_mutex;
// Connected clients (behind the con mutex)
- core::map<u16, RemoteClient*> m_clients;
+ std::map<u16, RemoteClient*> m_clients;
u16 m_clients_number; //for announcing masterserver
// Bann checking
*/
// Mod parent directory paths
- core::list<std::string> m_modspaths;
+ std::list<std::string> m_modspaths;
bool m_shutdown_requested;
const std::string &data)
{
// Find factory function
- core::map<u16, Factory>::Node *n;
+ std::map<u16, Factory>::iterator n;
n = m_types.find(type);
- if(n == NULL)
+ if(n == m_types.end())
{
// If factory is not found, just return.
dstream<<"WARNING: ServerActiveObject: No factory for type="
return NULL;
}
- Factory f = n->getValue();
+ Factory f = n->second;
ServerActiveObject *object = (*f)(env, pos, data);
return object;
}
void ServerActiveObject::registerType(u16 type, Factory f)
{
- core::map<u16, Factory>::Node *n;
+ std::map<u16, Factory>::iterator n;
n = m_types.find(type);
- if(n)
+ if(n != m_types.end())
return;
- m_types.insert(type, f);
+ m_types[type] = f;
}
float ServerActiveObject::getMinimumSavedMovement()
private:
// Used for creating objects based on type
- static core::map<u16, Factory> m_types;
+ static std::map<u16, Factory> m_types;
};
#endif
#include "log.h"
#include "util/string.h"
#include "porting.h"
+#include <list>
+#include <map>
+#include <set>
enum ValueType
{
{
JMutexAutoLock lock(m_mutex);
- for(core::map<std::string, std::string>::Iterator
- i = m_settings.getIterator();
- i.atEnd() == false; i++)
+ for(std::map<std::string, std::string>::iterator
+ i = m_settings.begin();
+ i != m_settings.end(); ++i)
{
- std::string name = i.getNode()->getKey();
- std::string value = i.getNode()->getValue();
+ std::string name = i->first;
+ std::string value = i->second;
os<<name<<" = "<<value<<"\n";
}
}
// return all keys used
std::vector<std::string> getNames(){
std::vector<std::string> names;
- for(core::map<std::string, std::string>::Iterator
- i = m_settings.getIterator();
- i.atEnd() == false; i++)
+ for(std::map<std::string, std::string>::iterator
+ i = m_settings.begin();
+ i != m_settings.end(); ++i)
{
- std::string name = i.getNode()->getKey();
- names.push_back(name);
+ names.push_back(i->first);
}
return names;
}
// remove a setting
bool remove(const std::string& name)
{
- return m_settings.remove(name);
+ return m_settings.erase(name);
}
Returns false on EOF
*/
bool getUpdatedConfigObject(std::istream &is,
- core::list<std::string> &dst,
- core::map<std::string, bool> &updated,
+ std::list<std::string> &dst,
+ std::set<std::string> &updated,
bool &value_changed)
{
JMutexAutoLock lock(m_mutex);
std::string value = sf.next("\n");
value = trim(value);
- if(m_settings.find(name))
+ if(m_settings.find(name) != m_settings.end())
{
std::string newvalue = m_settings[name];
dst.push_back(name + " = " + newvalue + line_end);
- updated[name] = true;
+ updated.insert(name);
}
else //file contains a setting which is not in m_settings
value_changed=true;
infostream<<"Updating configuration file: \""
<<filename<<"\""<<std::endl;
- core::list<std::string> objects;
- core::map<std::string, bool> updated;
+ std::list<std::string> objects;
+ std::set<std::string> updated;
bool something_actually_changed = false;
// Read and modify stuff
// If something not yet determined to have been changed, check if
// any new stuff was added
if(!something_actually_changed){
- for(core::map<std::string, std::string>::Iterator
- i = m_settings.getIterator();
- i.atEnd() == false; i++)
+ for(std::map<std::string, std::string>::iterator
+ i = m_settings.begin();
+ i != m_settings.end(); ++i)
{
- if(updated.find(i.getNode()->getKey()))
+ if(updated.find(i->first) != updated.end())
continue;
something_actually_changed = true;
break;
/*
Write updated stuff
*/
- for(core::list<std::string>::Iterator
+ for(std::list<std::string>::iterator
i = objects.begin();
- i != objects.end(); i++)
+ i != objects.end(); ++i)
{
os<<(*i);
}
/*
Write stuff that was not already in the file
*/
- for(core::map<std::string, std::string>::Iterator
- i = m_settings.getIterator();
- i.atEnd() == false; i++)
+ for(std::map<std::string, std::string>::iterator
+ i = m_settings.begin();
+ i != m_settings.end(); ++i)
{
- if(updated.find(i.getNode()->getKey()))
+ if(updated.find(i->first) != updated.end())
continue;
- std::string name = i.getNode()->getKey();
- std::string value = i.getNode()->getValue();
+ std::string name = i->first;
+ std::string value = i->second;
infostream<<"Adding \""<<name<<"\" = \""<<value<<"\""
<<std::endl;
os<<name<<" = "<<value<<"\n";
returns true on success
*/
bool parseCommandLine(int argc, char *argv[],
- core::map<std::string, ValueSpec> &allowed_options)
+ std::map<std::string, ValueSpec> &allowed_options)
{
int nonopt_index = 0;
int i=1;
std::string name = argname.substr(2);
- core::map<std::string, ValueSpec>::Node *n;
+ std::map<std::string, ValueSpec>::iterator n;
n = allowed_options.find(name);
- if(n == NULL)
+ if(n == allowed_options.end())
{
errorstream<<"Unknown command-line parameter \""
<<argname<<"\""<<std::endl;
return false;
}
- ValueType type = n->getValue().type;
+ ValueType type = n->second.type;
std::string value = "";
{
JMutexAutoLock lock(m_mutex);
- return (m_settings.find(name) || m_defaults.find(name));
+ return (m_settings.find(name) != m_settings.end() || m_defaults.find(name) != m_defaults.end());
}
std::string get(std::string name)
{
JMutexAutoLock lock(m_mutex);
- core::map<std::string, std::string>::Node *n;
+ std::map<std::string, std::string>::iterator n;
n = m_settings.find(name);
- if(n == NULL)
+ if(n == m_settings.end())
{
n = m_defaults.find(name);
- if(n == NULL)
+ if(n == m_defaults.end())
{
throw SettingNotFoundException("Setting not found");
}
}
- return n->getValue();
+ return n->second;
}
bool getBool(std::string name)
if(&other == this)
return;
- for(core::map<std::string, std::string>::Iterator
- i = other.m_settings.getIterator();
- i.atEnd() == false; i++)
- {
- m_settings[i.getNode()->getKey()] = i.getNode()->getValue();
- }
-
- for(core::map<std::string, std::string>::Iterator
- i = other.m_defaults.getIterator();
- i.atEnd() == false; i++)
- {
- m_defaults[i.getNode()->getKey()] = i.getNode()->getValue();
- }
+ m_settings.insert(other.m_settings.begin(), other.m_settings.end());
+ m_defaults.insert(other.m_defaults.begin(), other.m_defaults.end());
return;
}
if(&other == this)
return *this;
- for(core::map<std::string, std::string>::Iterator
- i = other.m_settings.getIterator();
- i.atEnd() == false; i++)
- {
- m_settings.insert(i.getNode()->getKey(),
- i.getNode()->getValue());
- }
-
- for(core::map<std::string, std::string>::Iterator
- i = other.m_defaults.getIterator();
- i.atEnd() == false; i++)
- {
- m_defaults.insert(i.getNode()->getKey(),
- i.getNode()->getValue());
- }
+ update(other);
return *this;
}
private:
- core::map<std::string, std::string> m_settings;
- core::map<std::string, std::string> m_defaults;
+ std::map<std::string, std::string> m_settings;
+ std::map<std::string, std::string> m_defaults;
// All methods that access m_settings/m_defaults directly should lock this.
JMutex m_mutex;
};
const std::string &filename)
{
std::string combined = name_of_shader + DIR_DELIM + filename;
- core::map<std::string, std::string>::Node *n;
+ std::map<std::string, std::string>::iterator n;
n = m_programs.find(combined);
- if(n)
- return n->getValue();
+ if(n != m_programs.end())
+ return n->second;
return "";
}
// Primarily fetches from cache, secondarily tries to read from filesystem
const std::string &filename)
{
std::string combined = name_of_shader + DIR_DELIM + filename;
- core::map<std::string, std::string>::Node *n;
+ std::map<std::string, std::string>::iterator n;
n = m_programs.find(combined);
- if(n)
- return n->getValue();
+ if(n != m_programs.end())
+ return n->second;
std::string path = getShaderPath(name_of_shader, filename);
if(path == ""){
infostream<<"SourceShaderCache::getOrLoad(): No path found for \""
return "";
}
private:
- core::map<std::string, std::string> m_programs;
+ std::map<std::string, std::string> m_programs;
std::string readFile(const std::string &path)
{
std::ifstream is(path.c_str(), std::ios::binary);
// A shader id is index in this array.
// The first position contains a dummy shader.
- core::array<ShaderInfo> m_shaderinfo_cache;
+ std::vector<ShaderInfo> m_shaderinfo_cache;
// Maps a shader name to an index in the former.
- core::map<std::string, u32> m_name_to_id;
+ std::map<std::string, u32> m_name_to_id;
// The two former containers are behind this mutex
JMutex m_shaderinfo_cache_mutex;
// Global constant setters
// TODO: Delete these in the destructor
- core::array<IShaderConstantSetter*> m_global_setters;
+ std::vector<IShaderConstantSetter*> m_global_setters;
};
IWritableShaderSource* createShaderSource(IrrlichtDevice *device)
See if shader already exists
*/
JMutexAutoLock lock(m_shaderinfo_cache_mutex);
- core::map<std::string, u32>::Node *n;
+ std::map<std::string, u32>::iterator n;
n = m_name_to_id.find(name);
- if(n != NULL)
- return n->getValue();
+ if(n != m_name_to_id.end())
+ return n->second;
}
/*
{
JMutexAutoLock lock(m_shaderinfo_cache_mutex);
- core::map<std::string, u32>::Node *n;
+ std::map<std::string, u32>::iterator n;
n = m_name_to_id.find(name);
- if(n != NULL){
+ if(n != m_name_to_id.end()){
/*infostream<<"getShaderIdDirect(): \""<<name
<<"\" found in cache"<<std::endl;*/
- return n->getValue();
+ return n->second;
}
}
u32 id = m_shaderinfo_cache.size();
m_shaderinfo_cache.push_back(info);
- m_name_to_id.insert(name, id);
+ m_name_to_id[name] = id;
/*infostream<<"getShaderIdDirect(): "
<<"Returning id="<<id<<" for name \""<<name<<"\""<<std::endl;*/
/*
Fetch shaders
*/
- if(m_get_shader_queue.size() > 0){
+ if(!m_get_shader_queue.empty()){
GetRequest<std::string, u32, u8, u8>
request = m_get_shader_queue.pop();
u16 count = m_stored.size() + m_active.size();
writeU16((u8*)buf, count);
os.write(buf, 2);
- for(core::list<StaticObject>::Iterator
+ for(std::list<StaticObject>::iterator
i = m_stored.begin();
- i != m_stored.end(); i++)
+ i != m_stored.end(); ++i)
{
StaticObject &s_obj = *i;
s_obj.serialize(os);
}
- for(core::map<u16, StaticObject>::Iterator
- i = m_active.getIterator();
- i.atEnd()==false; i++)
+ for(std::map<u16, StaticObject>::iterator
+ i = m_active.begin();
+ i != m_active.end(); ++i)
{
- StaticObject s_obj = i.getNode()->getValue();
+ StaticObject s_obj = i->second;
s_obj.serialize(os);
}
}
#include "irrlichttypes_bloated.h"
#include <string>
#include <sstream>
+#include <list>
+#include <map>
#include "debug.h"
struct StaticObject
}
else
{
- if(m_active.find(id) != NULL)
+ if(m_active.find(id) != m_active.end())
{
dstream<<"ERROR: StaticObjectList::insert(): "
<<"id already exists"<<std::endl;
assert(0);
return;
}
- m_active.insert(id, obj);
+ m_active[id] = obj;
}
}
void remove(u16 id)
{
assert(id != 0);
- if(m_active.find(id) == NULL)
+ if(m_active.find(id) == m_active.end())
{
dstream<<"WARNING: StaticObjectList::remove(): id="<<id
<<" not found"<<std::endl;
return;
}
- m_active.remove(id);
+ m_active.erase(id);
}
void serialize(std::ostream &os);
from m_stored and inserted to m_active.
The caller directly manipulates these containers.
*/
- core::list<StaticObject> m_stored;
- core::map<u16, StaticObject> m_active;
+ std::list<StaticObject> m_stored;
+ std::map<u16, StaticObject> m_active;
private:
};
#include "util/serialize.h"
#include "noise.h" // PseudoRandom used for random data for compression
#include "clientserver.h" // LATEST_PROTOCOL_VERSION
+#include <algorithm>
/*
Asserts that the exception occurs
// An area that is 1 bigger in x+ and z-
VoxelArea d(v3s16(-2,-2,-3), v3s16(3,2,2));
- core::list<VoxelArea> aa;
+ std::list<VoxelArea> aa;
d.diff(c, aa);
// Correct results
- core::array<VoxelArea> results;
+ std::vector<VoxelArea> results;
results.push_back(VoxelArea(v3s16(-2,-2,-3),v3s16(3,2,-3)));
results.push_back(VoxelArea(v3s16(3,-2,-2),v3s16(3,2,2)));
UASSERT(aa.size() == results.size());
infostream<<"Result of diff:"<<std::endl;
- for(core::list<VoxelArea>::Iterator
- i = aa.begin(); i != aa.end(); i++)
+ for(std::list<VoxelArea>::const_iterator
+ i = aa.begin(); i != aa.end(); ++i)
{
i->print(infostream);
infostream<<std::endl;
- s32 j = results.linear_search(*i);
- UASSERT(j != -1);
- results.erase(j, 1);
+ std::vector<VoxelArea>::iterator j = std::find(results.begin(), results.end(), *i);
+ UASSERT(j != results.end());
+ results.erase(j);
}
}
VoxelArea a(v3s16(0,0,0), v3s16(2,2,2));
{
- core::map<v3s16, bool> light_sources;
+ std::set<v3s16> light_sources;
voxalgo::setLight(v, a, 0, ndef);
voxalgo::SunlightPropagateResult res = voxalgo::propagateSunlight(
v, a, true, light_sources, ndef);
}
v.setNodeNoRef(v3s16(0,0,0), MapNode(CONTENT_STONE));
{
- core::map<v3s16, bool> light_sources;
+ std::set<v3s16> light_sources;
voxalgo::setLight(v, a, 0, ndef);
voxalgo::SunlightPropagateResult res = voxalgo::propagateSunlight(
v, a, true, light_sources, ndef);
== LIGHT_SUN);
}
{
- core::map<v3s16, bool> light_sources;
+ std::set<v3s16> light_sources;
voxalgo::setLight(v, a, 0, ndef);
voxalgo::SunlightPropagateResult res = voxalgo::propagateSunlight(
v, a, false, light_sources, ndef);
}
v.setNodeNoRef(v3s16(1,3,2), MapNode(CONTENT_STONE));
{
- core::map<v3s16, bool> light_sources;
+ std::set<v3s16> light_sources;
voxalgo::setLight(v, a, 0, ndef);
voxalgo::SunlightPropagateResult res = voxalgo::propagateSunlight(
v, a, true, light_sources, ndef);
== 0);
}
{
- core::map<v3s16, bool> light_sources;
+ std::set<v3s16> light_sources;
voxalgo::setLight(v, a, 0, ndef);
voxalgo::SunlightPropagateResult res = voxalgo::propagateSunlight(
v, a, false, light_sources, ndef);
v.setNodeNoRef(v3s16(1,-1,2), n);
}
{
- core::map<v3s16, bool> light_sources;
+ std::set<v3s16> light_sources;
voxalgo::setLight(v, a, 0, ndef);
voxalgo::SunlightPropagateResult res = voxalgo::propagateSunlight(
v, a, true, light_sources, ndef);
UASSERT(res.bottom_sunlight_valid == true);
}
{
- core::map<v3s16, bool> light_sources;
+ std::set<v3s16> light_sources;
voxalgo::setLight(v, a, 0, ndef);
voxalgo::SunlightPropagateResult res = voxalgo::propagateSunlight(
v, a, false, light_sources, ndef);
v.setNodeNoRef(v3s16(1,-1,2), n);
}
{
- core::map<v3s16, bool> light_sources;
+ std::set<v3s16> light_sources;
voxalgo::setLight(v, a, 0, ndef);
voxalgo::SunlightPropagateResult res = voxalgo::propagateSunlight(
v, a, true, light_sources, ndef);
UASSERT(res.bottom_sunlight_valid == false);
}
{
- core::map<v3s16, bool> light_sources;
+ std::set<v3s16> light_sources;
voxalgo::setLight(v, a, 0, ndef);
voxalgo::SunlightPropagateResult res = voxalgo::propagateSunlight(
v, a, false, light_sources, ndef);
}
v.setNodeNoRef(v3s16(1,3,2), MapNode(CONTENT_IGNORE));
{
- core::map<v3s16, bool> light_sources;
+ std::set<v3s16> light_sources;
voxalgo::setLight(v, a, 0, ndef);
voxalgo::SunlightPropagateResult res = voxalgo::propagateSunlight(
v, a, true, light_sources, ndef);
v.setNode(v3s16(1,1,2), n);
}
{
- core::map<v3s16, bool> light_sources;
- core::map<v3s16, u8> unlight_from;
+ std::set<v3s16> light_sources;
+ std::map<v3s16, u8> unlight_from;
voxalgo::clearLightAndCollectSources(v, a, LIGHTBANK_DAY,
ndef, light_sources, unlight_from);
//v.print(dstream, ndef, VOXELPRINT_LIGHT_DAY);
UASSERT(v.getNode(v3s16(0,1,1)).getLight(LIGHTBANK_DAY, ndef)
== 0);
- UASSERT(light_sources.find(v3s16(1,1,1)) != NULL);
+ UASSERT(light_sources.find(v3s16(1,1,1)) != light_sources.end());
UASSERT(light_sources.size() == 1);
- UASSERT(unlight_from.find(v3s16(1,1,2)) != NULL);
+ UASSERT(unlight_from.find(v3s16(1,1,2)) != unlight_from.end());
UASSERT(unlight_from.size() == 1);
}
}
{
assert(img);
// Remove old image
- core::map<std::string, video::IImage*>::Node *n;
+ std::map<std::string, video::IImage*>::iterator n;
n = m_images.find(name);
- if(n){
- video::IImage *oldimg = n->getValue();
+ if(n != m_images.end()){
+ video::IImage *oldimg = n->second;
if(oldimg)
oldimg->drop();
}
}
video::IImage* get(const std::string &name)
{
- core::map<std::string, video::IImage*>::Node *n;
+ std::map<std::string, video::IImage*>::iterator n;
n = m_images.find(name);
- if(n)
- return n->getValue();
+ if(n != m_images.end())
+ return n->second;
return NULL;
}
// Primarily fetches from cache, secondarily tries to read from filesystem
video::IImage* getOrLoad(const std::string &name, IrrlichtDevice *device)
{
- core::map<std::string, video::IImage*>::Node *n;
+ std::map<std::string, video::IImage*>::iterator n;
n = m_images.find(name);
- if(n){
- n->getValue()->grab(); // Grab for caller
- return n->getValue();
+ if(n != m_images.end()){
+ n->second->grab(); // Grab for caller
+ return n->second;
}
video::IVideoDriver* driver = device->getVideoDriver();
std::string path = getTexturePath(name.c_str());
return img;
}
private:
- core::map<std::string, video::IImage*> m_images;
+ std::map<std::string, video::IImage*> m_images;
};
/*
// A texture id is index in this array.
// The first position contains a NULL texture.
- core::array<SourceAtlasPointer> m_atlaspointer_cache;
+ std::vector<SourceAtlasPointer> m_atlaspointer_cache;
// Maps a texture name to an index in the former.
- core::map<std::string, u32> m_name_to_id;
+ std::map<std::string, u32> m_name_to_id;
// The two former containers are behind this mutex
JMutex m_atlaspointer_cache_mutex;
See if texture already exists
*/
JMutexAutoLock lock(m_atlaspointer_cache_mutex);
- core::map<std::string, u32>::Node *n;
+ std::map<std::string, u32>::iterator n;
n = m_name_to_id.find(name);
- if(n != NULL)
+ if(n != m_name_to_id.end())
{
- return n->getValue();
+ return n->second;
}
}
{
JMutexAutoLock lock(m_atlaspointer_cache_mutex);
- core::map<std::string, u32>::Node *n;
+ std::map<std::string, u32>::iterator n;
n = m_name_to_id.find(name);
- if(n != NULL)
+ if(n != m_name_to_id.end())
{
/*infostream<<"getTextureIdDirect(): \""<<name
<<"\" found in cache"<<std::endl;*/
- return n->getValue();
+ return n->second;
}
}
baseimg_dim = baseimg->getDimension();
SourceAtlasPointer nap(name, ap, baseimg, v2s32(0,0), baseimg_dim);
m_atlaspointer_cache.push_back(nap);
- m_name_to_id.insert(name, id);
+ m_name_to_id[name] = id;
/*infostream<<"getTextureIdDirect(): "
<<"Returning id="<<id<<" for name \""<<name<<"\""<<std::endl;*/
/*
Fetch textures
*/
- if(m_get_texture_queue.size() > 0)
+ if(!m_get_texture_queue.empty())
{
GetRequest<std::string, u32, u8, u8>
request = m_get_texture_queue.pop();
main content features
*/
- core::map<std::string, bool> sourcelist;
+ std::set<std::string> sourcelist;
for(u16 j=0; j<MAX_CONTENT+1; j++)
{
for(u32 i=0; i<6; i++)
{
std::string name = f.tiledef[i].name;
- sourcelist[name] = true;
+ sourcelist.insert(name);
}
}
infostream<<"Creating texture atlas out of textures: ";
- for(core::map<std::string, bool>::Iterator
- i = sourcelist.getIterator();
- i.atEnd() == false; i++)
+ for(std::set<std::string>::iterator
+ i = sourcelist.begin();
+ i != sourcelist.end(); ++i)
{
- std::string name = i.getNode()->getKey();
+ std::string name = *i;
infostream<<"\""<<name<<"\" ";
}
infostream<<std::endl;
pos_in_atlas.X = column_padding;
pos_in_atlas.Y = padding;
- for(core::map<std::string, bool>::Iterator
- i = sourcelist.getIterator();
- i.atEnd() == false; i++)
+ for(std::set<std::string>::iterator
+ i = sourcelist.begin();
+ i != sourcelist.end(); ++i)
{
- std::string name = i.getNode()->getKey();
+ std::string name = *i;
// Generate image by name
video::IImage *img2 = generate_image_from_scratch(name, m_device,
bool reuse_old_id = false;
u32 id = m_atlaspointer_cache.size();
// Check old id without fetching a texture
- core::map<std::string, u32>::Node *n;
+ std::map<std::string, u32>::iterator n;
n = m_name_to_id.find(name);
// If it exists, we will replace the old definition
- if(n){
- id = n->getValue();
+ if(n != m_name_to_id.end()){
+ id = n->second;
reuse_old_id = true;
/*infostream<<"TextureSource::buildMainAtlas(): "
<<"Replacing old AtlasPointer"<<std::endl;*/
/*
Second pass: set texture pointer in generated AtlasPointers
*/
- for(core::map<std::string, bool>::Iterator
- i = sourcelist.getIterator();
- i.atEnd() == false; i++)
+ for(std::set<std::string>::iterator
+ i = sourcelist.begin();
+ i != sourcelist.end(); ++i)
{
- std::string name = i.getNode()->getKey();
- if(m_name_to_id.find(name) == NULL)
+ std::string name = *i;
+ if(m_name_to_id.find(name) == m_name_to_id.end())
continue;
u32 id = m_name_to_id[name];
//infostream<<"id of name "<<name<<" is "<<id<<std::endl;
void spawn_ltree (ServerEnvironment *env, v3s16 p0, INodeDefManager *ndef, TreeDef tree_definition)
{
ServerMap *map = &env->getServerMap();
- core::map<v3s16, MapBlock*> modified_blocks;
+ std::map<v3s16, MapBlock*> modified_blocks;
ManualMapVoxelManipulator vmanip(map);
v3s16 tree_blockp = getNodeBlockPos(p0);
vmanip.initialEmerge(tree_blockp - v3s16(1,1,1), tree_blockp + v3s16(1,3,1));
vmanip.blitBackAll(&modified_blocks);
// update lighting
- core::map<v3s16, MapBlock*> lighting_modified_blocks;
- for(core::map<v3s16, MapBlock*>::Iterator
- i = modified_blocks.getIterator();
- i.atEnd() == false; i++)
- {
- lighting_modified_blocks.insert(i.getNode()->getKey(), i.getNode()->getValue());
- }
+ std::map<v3s16, MapBlock*> lighting_modified_blocks;
+ lighting_modified_blocks.insert(modified_blocks.begin(), modified_blocks.end());
map->updateLighting(lighting_modified_blocks, modified_blocks);
// Send a MEET_OTHER event
MapEditEvent event;
event.type = MEET_OTHER;
- for(core::map<v3s16, MapBlock*>::Iterator
- i = modified_blocks.getIterator();
- i.atEnd() == false; i++)
+ for(std::map<v3s16, MapBlock*>::iterator
+ i = modified_blocks.begin();
+ i != modified_blocks.end(); ++i)
{
- v3s16 p = i.getNode()->getKey();
- event.modified_blocks.insert(p, true);
+ event.modified_blocks.insert(i->first);
}
map->dispatchEvent(&event);
}
#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
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;
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
{
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
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);
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;
};
/*
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;
};
/*
{
m_mutex.Init();
}
- u32 size()
+ bool empty()
{
JMutexAutoLock lock(m_mutex);
- return m_list.size();
+ return m_list.empty();
}
void push_back(T t)
{
{
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;
{
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;
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
#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)
{
#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
{
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>
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,
/*
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)
}
void VoxelManipulator::unspreadLight(enum LightBank bank, v3s16 p, u8 oldlight,
- core::map<v3s16, bool> & light_sources, INodeDefManager *nodemgr)
+ std::set<v3s16> & light_sources, INodeDefManager *nodemgr)
{
v3s16 dirs[6] = {
v3s16(0,0,1), // back
}
}
else{
- light_sources.insert(n2pos, true);
+ light_sources.insert(n2pos);
}
}
}
values of from_nodes are lighting values.
*/
void VoxelManipulator::unspreadLight(enum LightBank bank,
- core::map<v3s16, u8> & from_nodes,
- core::map<v3s16, bool> & light_sources, INodeDefManager *nodemgr)
+ std::map<v3s16, u8> & from_nodes,
+ std::set<v3s16> & light_sources, INodeDefManager *nodemgr)
{
if(from_nodes.size() == 0)
return;
- core::map<v3s16, u8>::Iterator j;
- j = from_nodes.getIterator();
-
- for(; j.atEnd() == false; j++)
+ for(std::map<v3s16, u8>::iterator j = from_nodes.begin();
+ j != from_nodes.end(); ++j)
{
- v3s16 pos = j.getNode()->getKey();
-
- //MapNode &n = m_data[m_area.index(pos)];
-
- u8 oldlight = j.getNode()->getValue();
-
- unspreadLight(bank, pos, oldlight, light_sources, nodemgr);
+ unspreadLight(bank, j->first, j->second, light_sources, nodemgr);
}
}
#endif
goes on recursively.
*/
void VoxelManipulator::spreadLight(enum LightBank bank,
- core::map<v3s16, bool> & from_nodes, INodeDefManager *nodemgr)
+ std::set<v3s16> & from_nodes, INodeDefManager *nodemgr)
{
const v3s16 dirs[6] = {
v3s16(0,0,1), // back
if(from_nodes.size() == 0)
return;
- core::map<v3s16, bool> lighted_nodes;
- core::map<v3s16, bool>::Iterator j;
- j = from_nodes.getIterator();
+ std::set<v3s16> lighted_nodes;
- for(; j.atEnd() == false; j++)
+ for(std::set<v3s16>::iterator j = from_nodes.begin();
+ j != from_nodes.end(); ++j)
{
- v3s16 pos = j.getNode()->getKey();
+ v3s16 pos = *j;
emerge(VoxelArea(pos - v3s16(1,1,1), pos + v3s16(1,1,1)));
*/
if(light2 > undiminish_light(oldlight))
{
- lighted_nodes.insert(n2pos, true);
+ lighted_nodes.insert(n2pos);
}
/*
If the neighbor is dimmer than how much light this node
if(nodemgr->get(n2).light_propagates)
{
n2.setLight(bank, newlight, nodemgr);
- lighted_nodes.insert(n2pos, true);
+ lighted_nodes.insert(n2pos);
}
}
}
#include <iostream>
#include "debug.h"
#include "mapnode.h"
+#include <set>
+#include <list>
class INodeDefManager;
a: area inside *this
*/
- void diff(const VoxelArea &a, core::list<VoxelArea> &result)
+ void diff(const VoxelArea &a, std::list<VoxelArea> &result)
{
/*
This can result in a maximum of 6 areas
// TODO: Move to voxelalgorithms.h
void unspreadLight(enum LightBank bank, v3s16 p, u8 oldlight,
- core::map<v3s16, bool> & light_sources, INodeDefManager *nodemgr);
+ std::set<v3s16> & light_sources, INodeDefManager *nodemgr);
void unspreadLight(enum LightBank bank,
- core::map<v3s16, u8> & from_nodes,
- core::map<v3s16, bool> & light_sources, INodeDefManager *nodemgr);
+ std::map<v3s16, u8> & from_nodes,
+ std::set<v3s16> & light_sources, INodeDefManager *nodemgr);
void spreadLight(enum LightBank bank, v3s16 p, INodeDefManager *nodemgr);
void spreadLight(enum LightBank bank,
- core::map<v3s16, bool> & from_nodes, INodeDefManager *nodemgr);
+ std::set<v3s16> & from_nodes, INodeDefManager *nodemgr);
/*
Virtual functions
void clearLightAndCollectSources(VoxelManipulator &v, VoxelArea a,
enum LightBank bank, INodeDefManager *ndef,
- core::map<v3s16, bool> & light_sources,
- core::map<v3s16, u8> & unlight_from)
+ std::set<v3s16> & light_sources,
+ std::map<v3s16, u8> & unlight_from)
{
// The full area we shall touch
VoxelArea required_a = a;
// If node sources light, add to list
u8 source = ndef->get(n).light_source;
if(source != 0)
- light_sources[p] = true;
+ light_sources.insert(p);
// Collect borders for unlighting
if((x==a.MinEdge.X || x == a.MaxEdge.X
|| z==a.MinEdge.Z || z == a.MaxEdge.Z)
&& oldlight != 0)
{
- unlight_from.insert(p, oldlight);
+ unlight_from[p] = oldlight;
}
}
}
SunlightPropagateResult propagateSunlight(VoxelManipulator &v, VoxelArea a,
bool inexistent_top_provides_sunlight,
- core::map<v3s16, bool> & light_sources,
+ std::set<v3s16> & light_sources,
INodeDefManager *ndef)
{
// Return values
n.setLight(LIGHTBANK_DAY, incoming_light, ndef);
if(diminish_light(incoming_light) != 0)
- light_sources.insert(p, true);
+ light_sources.insert(p);
}
// Check validity of sunlight at top of block below if it
#include "voxel.h"
#include "mapnode.h"
+#include <set>
+#include <map>
namespace voxalgo
{
void clearLightAndCollectSources(VoxelManipulator &v, VoxelArea a,
enum LightBank bank, INodeDefManager *ndef,
- core::map<v3s16, bool> & light_sources,
- core::map<v3s16, u8> & unlight_from);
+ std::set<v3s16> & light_sources,
+ std::map<v3s16, u8> & unlight_from);
struct SunlightPropagateResult
{
SunlightPropagateResult propagateSunlight(VoxelManipulator &v, VoxelArea a,
bool inexistent_top_provides_sunlight,
- core::map<v3s16, bool> & light_sources,
+ std::set<v3s16> & light_sources,
INodeDefManager *ndef);
} // namespace voxalgo