mirror of
https://github.com/moparisthebest/minetest
synced 2024-12-22 23:58:48 -05:00
Replace instances of std::map<std::string, std::string> with StringMap
Also, clean up surrounding code style Replace by-value parameter passing with const refs when possible Fix post-increment of iterators
This commit is contained in:
parent
603297cc35
commit
da34a2b33e
45
src/ban.cpp
45
src/ban.cpp
@ -74,18 +74,14 @@ void BanManager::load()
|
|||||||
void BanManager::save()
|
void BanManager::save()
|
||||||
{
|
{
|
||||||
JMutexAutoLock lock(m_mutex);
|
JMutexAutoLock lock(m_mutex);
|
||||||
infostream<<"BanManager: saving to "<<m_banfilepath<<std::endl;
|
infostream << "BanManager: saving to " << m_banfilepath << std::endl;
|
||||||
std::ostringstream ss(std::ios_base::binary);
|
std::ostringstream ss(std::ios_base::binary);
|
||||||
|
|
||||||
for(std::map<std::string, std::string>::iterator
|
for (StringMap::iterator it = m_ips.begin(); it != m_ips.end(); ++it)
|
||||||
i = m_ips.begin();
|
ss << it->first << "|" << it->second << "\n";
|
||||||
i != m_ips.end(); i++)
|
|
||||||
{
|
|
||||||
ss << i->first << "|" << i->second << "\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!fs::safeWriteToFile(m_banfilepath, ss.str())) {
|
if (!fs::safeWriteToFile(m_banfilepath, ss.str())) {
|
||||||
infostream<<"BanManager: failed saving to "<<m_banfilepath<<std::endl;
|
infostream << "BanManager: failed saving to " << m_banfilepath << std::endl;
|
||||||
throw SerializationError("BanManager::save(): Couldn't write file");
|
throw SerializationError("BanManager::save(): Couldn't write file");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -102,25 +98,23 @@ std::string BanManager::getBanDescription(const std::string &ip_or_name)
|
|||||||
{
|
{
|
||||||
JMutexAutoLock lock(m_mutex);
|
JMutexAutoLock lock(m_mutex);
|
||||||
std::string s = "";
|
std::string s = "";
|
||||||
for(std::map<std::string, std::string>::iterator
|
for (StringMap::iterator it = m_ips.begin(); it != m_ips.end(); ++it) {
|
||||||
i = m_ips.begin();
|
if (it->first == ip_or_name || it->second == ip_or_name
|
||||||
i != m_ips.end(); i++)
|
|| ip_or_name == "") {
|
||||||
{
|
s += it->first + "|" + it->second + ", ";
|
||||||
if(i->first == ip_or_name || i->second == ip_or_name
|
|
||||||
|| ip_or_name == "")
|
|
||||||
s += i->first + "|" + i->second + ", ";
|
|
||||||
}
|
}
|
||||||
s = s.substr(0, s.size()-2);
|
}
|
||||||
|
s = s.substr(0, s.size() - 2);
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string BanManager::getBanName(const std::string &ip)
|
std::string BanManager::getBanName(const std::string &ip)
|
||||||
{
|
{
|
||||||
JMutexAutoLock lock(m_mutex);
|
JMutexAutoLock lock(m_mutex);
|
||||||
std::map<std::string, std::string>::iterator i = m_ips.find(ip);
|
StringMap::iterator it = m_ips.find(ip);
|
||||||
if(i == m_ips.end())
|
if (it == m_ips.end())
|
||||||
return "";
|
return "";
|
||||||
return i->second;
|
return it->second;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BanManager::add(const std::string &ip, const std::string &name)
|
void BanManager::add(const std::string &ip, const std::string &name)
|
||||||
@ -133,14 +127,11 @@ void BanManager::add(const std::string &ip, const std::string &name)
|
|||||||
void BanManager::remove(const std::string &ip_or_name)
|
void BanManager::remove(const std::string &ip_or_name)
|
||||||
{
|
{
|
||||||
JMutexAutoLock lock(m_mutex);
|
JMutexAutoLock lock(m_mutex);
|
||||||
for(std::map<std::string, std::string>::iterator
|
for (StringMap::iterator it = m_ips.begin(); it != m_ips.end();) {
|
||||||
i = m_ips.begin();
|
if ((it->first == ip_or_name) || (it->second == ip_or_name)) {
|
||||||
i != m_ips.end();)
|
m_ips.erase(it++);
|
||||||
{
|
|
||||||
if((i->first == ip_or_name) || (i->second == ip_or_name)) {
|
|
||||||
m_ips.erase(i++);
|
|
||||||
} else {
|
} else {
|
||||||
++i;
|
++it;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
m_modified = true;
|
m_modified = true;
|
||||||
|
@ -20,8 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||||||
#ifndef BAN_HEADER
|
#ifndef BAN_HEADER
|
||||||
#define BAN_HEADER
|
#define BAN_HEADER
|
||||||
|
|
||||||
#include <map>
|
#include "util/string.h"
|
||||||
#include <string>
|
|
||||||
#include "jthread/jthread.h"
|
#include "jthread/jthread.h"
|
||||||
#include "jthread/jmutex.h"
|
#include "jthread/jmutex.h"
|
||||||
#include "exceptions.h"
|
#include "exceptions.h"
|
||||||
@ -43,7 +42,7 @@ public:
|
|||||||
private:
|
private:
|
||||||
JMutex m_mutex;
|
JMutex m_mutex;
|
||||||
std::string m_banfilepath;
|
std::string m_banfilepath;
|
||||||
std::map<std::string, std::string> m_ips;
|
StringMap m_ips;
|
||||||
bool m_modified;
|
bool m_modified;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -1102,7 +1102,7 @@ void Client::sendRemovedSounds(std::vector<s32> &soundList)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Client::sendNodemetaFields(v3s16 p, const std::string &formname,
|
void Client::sendNodemetaFields(v3s16 p, const std::string &formname,
|
||||||
const std::map<std::string, std::string> &fields)
|
const StringMap &fields)
|
||||||
{
|
{
|
||||||
size_t fields_size = fields.size();
|
size_t fields_size = fields.size();
|
||||||
|
|
||||||
@ -1112,10 +1112,10 @@ void Client::sendNodemetaFields(v3s16 p, const std::string &formname,
|
|||||||
|
|
||||||
pkt << p << formname << (u16) (fields_size & 0xFFFF);
|
pkt << p << formname << (u16) (fields_size & 0xFFFF);
|
||||||
|
|
||||||
for(std::map<std::string, std::string>::const_iterator
|
StringMap::const_iterator it;
|
||||||
i = fields.begin(); i != fields.end(); i++) {
|
for (it = fields.begin(); it != fields.end(); ++it) {
|
||||||
const std::string &name = i->first;
|
const std::string &name = it->first;
|
||||||
const std::string &value = i->second;
|
const std::string &value = it->second;
|
||||||
pkt << name;
|
pkt << name;
|
||||||
pkt.putLongString(value);
|
pkt.putLongString(value);
|
||||||
}
|
}
|
||||||
@ -1124,7 +1124,7 @@ void Client::sendNodemetaFields(v3s16 p, const std::string &formname,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Client::sendInventoryFields(const std::string &formname,
|
void Client::sendInventoryFields(const std::string &formname,
|
||||||
const std::map<std::string, std::string> &fields)
|
const StringMap &fields)
|
||||||
{
|
{
|
||||||
size_t fields_size = fields.size();
|
size_t fields_size = fields.size();
|
||||||
FATAL_ERROR_IF(fields_size > 0xFFFF, "Unsupported number of inventory fields");
|
FATAL_ERROR_IF(fields_size > 0xFFFF, "Unsupported number of inventory fields");
|
||||||
@ -1132,10 +1132,10 @@ void Client::sendInventoryFields(const std::string &formname,
|
|||||||
NetworkPacket pkt(TOSERVER_INVENTORY_FIELDS, 0);
|
NetworkPacket pkt(TOSERVER_INVENTORY_FIELDS, 0);
|
||||||
pkt << formname << (u16) (fields_size & 0xFFFF);
|
pkt << formname << (u16) (fields_size & 0xFFFF);
|
||||||
|
|
||||||
for(std::map<std::string, std::string>::const_iterator
|
StringMap::const_iterator it;
|
||||||
i = fields.begin(); i != fields.end(); i++) {
|
for (it = fields.begin(); it != fields.end(); ++it) {
|
||||||
const std::string &name = i->first;
|
const std::string &name = it->first;
|
||||||
const std::string &value = i->second;
|
const std::string &value = it->second;
|
||||||
pkt << name;
|
pkt << name;
|
||||||
pkt.putLongString(value);
|
pkt.putLongString(value);
|
||||||
}
|
}
|
||||||
@ -1918,14 +1918,13 @@ ParticleManager* Client::getParticleManager()
|
|||||||
|
|
||||||
scene::IAnimatedMesh* Client::getMesh(const std::string &filename)
|
scene::IAnimatedMesh* Client::getMesh(const std::string &filename)
|
||||||
{
|
{
|
||||||
std::map<std::string, std::string>::const_iterator i =
|
StringMap::const_iterator it = m_mesh_data.find(filename);
|
||||||
m_mesh_data.find(filename);
|
if (it == m_mesh_data.end()) {
|
||||||
if(i == m_mesh_data.end()){
|
errorstream << "Client::getMesh(): Mesh not found: \"" << filename
|
||||||
errorstream<<"Client::getMesh(): Mesh not found: \""<<filename<<"\""
|
<< "\"" << std::endl;
|
||||||
<<std::endl;
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
const std::string &data = i->second;
|
const std::string &data = it->second;
|
||||||
scene::ISceneManager *smgr = m_device->getSceneManager();
|
scene::ISceneManager *smgr = m_device->getSceneManager();
|
||||||
|
|
||||||
// Create the mesh, remove it from cache and return it
|
// Create the mesh, remove it from cache and return it
|
||||||
|
@ -405,9 +405,9 @@ public:
|
|||||||
void interact(u8 action, const PointedThing& pointed);
|
void interact(u8 action, const PointedThing& pointed);
|
||||||
|
|
||||||
void sendNodemetaFields(v3s16 p, const std::string &formname,
|
void sendNodemetaFields(v3s16 p, const std::string &formname,
|
||||||
const std::map<std::string, std::string> &fields);
|
const StringMap &fields);
|
||||||
void sendInventoryFields(const std::string &formname,
|
void sendInventoryFields(const std::string &formname,
|
||||||
const std::map<std::string, std::string> &fields);
|
const StringMap &fields);
|
||||||
void sendInventoryAction(InventoryAction *a);
|
void sendInventoryAction(InventoryAction *a);
|
||||||
void sendChatMessage(const std::wstring &message);
|
void sendChatMessage(const std::wstring &message);
|
||||||
void sendChangePassword(const std::string &oldpassword,
|
void sendChangePassword(const std::string &oldpassword,
|
||||||
@ -648,7 +648,7 @@ private:
|
|||||||
std::map<std::string, Inventory*> m_detached_inventories;
|
std::map<std::string, Inventory*> m_detached_inventories;
|
||||||
|
|
||||||
// Storage for mesh data for creating multiple instances of the same mesh
|
// Storage for mesh data for creating multiple instances of the same mesh
|
||||||
std::map<std::string, std::string> m_mesh_data;
|
StringMap m_mesh_data;
|
||||||
|
|
||||||
// own state
|
// own state
|
||||||
LocalClientState m_state;
|
LocalClientState m_state;
|
||||||
|
@ -23,7 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||||||
#include "mapnode.h"
|
#include "mapnode.h"
|
||||||
#include "nodedef.h"
|
#include "nodedef.h"
|
||||||
#include "nameidmapping.h"
|
#include "nameidmapping.h"
|
||||||
#include <map>
|
#include "util/string.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Legacy node content type IDs
|
Legacy node content type IDs
|
||||||
@ -218,14 +218,13 @@ public:
|
|||||||
}
|
}
|
||||||
std::string get(const std::string &old)
|
std::string get(const std::string &old)
|
||||||
{
|
{
|
||||||
std::map<std::string, std::string>::const_iterator i;
|
StringMap::const_iterator it = old_to_new.find(old);
|
||||||
i = old_to_new.find(old);
|
if (it == old_to_new.end())
|
||||||
if(i == old_to_new.end())
|
|
||||||
return "";
|
return "";
|
||||||
return i->second;
|
return it->second;
|
||||||
}
|
}
|
||||||
private:
|
private:
|
||||||
std::map<std::string, std::string> old_to_new;
|
StringMap old_to_new;
|
||||||
};
|
};
|
||||||
|
|
||||||
NewNameGetter newnamegetter;
|
NewNameGetter newnamegetter;
|
||||||
|
26
src/game.cpp
26
src/game.cpp
@ -87,11 +87,11 @@ struct TextDestNodeMetadata : public TextDest {
|
|||||||
std::string ntext = wide_to_narrow(text);
|
std::string ntext = wide_to_narrow(text);
|
||||||
infostream << "Submitting 'text' field of node at (" << m_p.X << ","
|
infostream << "Submitting 'text' field of node at (" << m_p.X << ","
|
||||||
<< m_p.Y << "," << m_p.Z << "): " << ntext << std::endl;
|
<< m_p.Y << "," << m_p.Z << "): " << ntext << std::endl;
|
||||||
std::map<std::string, std::string> fields;
|
StringMap fields;
|
||||||
fields["text"] = ntext;
|
fields["text"] = ntext;
|
||||||
m_client->sendNodemetaFields(m_p, "", fields);
|
m_client->sendNodemetaFields(m_p, "", fields);
|
||||||
}
|
}
|
||||||
void gotText(std::map<std::string, std::string> fields)
|
void gotText(const StringMap &fields)
|
||||||
{
|
{
|
||||||
m_client->sendNodemetaFields(m_p, "", fields);
|
m_client->sendNodemetaFields(m_p, "", fields);
|
||||||
}
|
}
|
||||||
@ -111,7 +111,7 @@ struct TextDestPlayerInventory : public TextDest {
|
|||||||
m_client = client;
|
m_client = client;
|
||||||
m_formname = formname;
|
m_formname = formname;
|
||||||
}
|
}
|
||||||
void gotText(std::map<std::string, std::string> fields)
|
void gotText(const StringMap &fields)
|
||||||
{
|
{
|
||||||
m_client->sendInventoryFields(m_formname, fields);
|
m_client->sendInventoryFields(m_formname, fields);
|
||||||
}
|
}
|
||||||
@ -138,7 +138,7 @@ struct LocalFormspecHandler : public TextDest {
|
|||||||
errorstream << "LocalFormspecHandler::gotText old style message received" << std::endl;
|
errorstream << "LocalFormspecHandler::gotText old style message received" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
void gotText(std::map<std::string, std::string> fields)
|
void gotText(const StringMap &fields)
|
||||||
{
|
{
|
||||||
if (m_formname == "MT_PAUSE_MENU") {
|
if (m_formname == "MT_PAUSE_MENU") {
|
||||||
if (fields.find("btn_sound") != fields.end()) {
|
if (fields.find("btn_sound") != fields.end()) {
|
||||||
@ -180,9 +180,9 @@ struct LocalFormspecHandler : public TextDest {
|
|||||||
|
|
||||||
if ((fields.find("btn_send") != fields.end()) ||
|
if ((fields.find("btn_send") != fields.end()) ||
|
||||||
(fields.find("quit") != fields.end())) {
|
(fields.find("quit") != fields.end())) {
|
||||||
if (fields.find("f_text") != fields.end()) {
|
StringMap::const_iterator it = fields.find("f_text");
|
||||||
m_client->typeChatMessage(narrow_to_wide(fields["f_text"]));
|
if (it != fields.end())
|
||||||
}
|
m_client->typeChatMessage(narrow_to_wide(it->second));
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -210,12 +210,14 @@ struct LocalFormspecHandler : public TextDest {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
errorstream << "LocalFormspecHandler::gotText unhandled >" << m_formname << "< event" << std::endl;
|
errorstream << "LocalFormspecHandler::gotText unhandled >"
|
||||||
int i = 0;
|
<< m_formname << "< event" << std::endl;
|
||||||
|
|
||||||
for (std::map<std::string, std::string>::iterator iter = fields.begin();
|
int i = 0;
|
||||||
iter != fields.end(); iter++) {
|
StringMap::const_iterator it;
|
||||||
errorstream << "\t" << i << ": " << iter->first << "=" << iter->second << std::endl;
|
for (it = fields.begin(); it != fields.end(); ++it) {
|
||||||
|
errorstream << "\t" << i << ": " << it->first
|
||||||
|
<< "=" << it->second << std::endl;
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -53,7 +53,7 @@ TextDestGuiEngine::TextDestGuiEngine(GUIEngine* engine)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
void TextDestGuiEngine::gotText(std::map<std::string, std::string> fields)
|
void TextDestGuiEngine::gotText(const StringMap &fields)
|
||||||
{
|
{
|
||||||
m_engine->getScriptIface()->handleMainMenuButtons(fields);
|
m_engine->getScriptIface()->handleMainMenuButtons(fields);
|
||||||
}
|
}
|
||||||
|
@ -73,7 +73,7 @@ public:
|
|||||||
* receive fields transmitted by guiFormSpecMenu
|
* receive fields transmitted by guiFormSpecMenu
|
||||||
* @param fields map containing formspec field elements currently active
|
* @param fields map containing formspec field elements currently active
|
||||||
*/
|
*/
|
||||||
void gotText(std::map<std::string, std::string> fields);
|
void gotText(const StringMap &fields);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* receive text/events transmitted by guiFormSpecMenu
|
* receive text/events transmitted by guiFormSpecMenu
|
||||||
|
@ -84,7 +84,7 @@ void GUIFileSelectMenu::drawMenu()
|
|||||||
|
|
||||||
void GUIFileSelectMenu::acceptInput() {
|
void GUIFileSelectMenu::acceptInput() {
|
||||||
if ((m_text_dst != 0) && (this->m_formname != "")){
|
if ((m_text_dst != 0) && (this->m_formname != "")){
|
||||||
std::map<std::string, std::string> fields;
|
StringMap fields;
|
||||||
|
|
||||||
if (m_accepted)
|
if (m_accepted)
|
||||||
fields[m_formname + "_accepted"] = wide_to_narrow(m_fileOpenDialog->getFileName());
|
fields[m_formname + "_accepted"] = wide_to_narrow(m_fileOpenDialog->getFileName());
|
||||||
|
@ -2579,7 +2579,7 @@ void GUIFormSpecMenu::acceptInput(FormspecQuitMode quitmode=quit_mode_no)
|
|||||||
{
|
{
|
||||||
if(m_text_dst)
|
if(m_text_dst)
|
||||||
{
|
{
|
||||||
std::map<std::string, std::string> fields;
|
StringMap fields;
|
||||||
|
|
||||||
if (quitmode == quit_mode_accept) {
|
if (quitmode == quit_mode_accept) {
|
||||||
fields["quit"] = "true";
|
fields["quit"] = "true";
|
||||||
|
@ -56,7 +56,7 @@ struct TextDest
|
|||||||
virtual ~TextDest() {};
|
virtual ~TextDest() {};
|
||||||
// This is deprecated I guess? -celeron55
|
// This is deprecated I guess? -celeron55
|
||||||
virtual void gotText(std::wstring text){}
|
virtual void gotText(std::wstring text){}
|
||||||
virtual void gotText(std::map<std::string, std::string> fields) = 0;
|
virtual void gotText(const StringMap &fields) = 0;
|
||||||
virtual void setFormName(std::string formname)
|
virtual void setFormName(std::string formname)
|
||||||
{ m_formname = formname;};
|
{ m_formname = formname;};
|
||||||
|
|
||||||
|
@ -266,8 +266,7 @@ HTTPFetchOngoing::HTTPFetchOngoing(HTTPFetchRequest request_, CurlHandlePool *po
|
|||||||
curl_easy_setopt(curl, CURLOPT_HTTPGET, 1);
|
curl_easy_setopt(curl, CURLOPT_HTTPGET, 1);
|
||||||
} else if (request.multipart) {
|
} else if (request.multipart) {
|
||||||
curl_httppost *last = NULL;
|
curl_httppost *last = NULL;
|
||||||
for (std::map<std::string, std::string>::iterator it =
|
for (StringMap::iterator it = request.post_fields.begin();
|
||||||
request.post_fields.begin();
|
|
||||||
it != request.post_fields.end(); ++it) {
|
it != request.post_fields.end(); ++it) {
|
||||||
curl_formadd(&post, &last,
|
curl_formadd(&post, &last,
|
||||||
CURLFORM_NAMELENGTH, it->first.size(),
|
CURLFORM_NAMELENGTH, it->first.size(),
|
||||||
@ -282,10 +281,8 @@ HTTPFetchOngoing::HTTPFetchOngoing(HTTPFetchRequest request_, CurlHandlePool *po
|
|||||||
} else if (request.post_data.empty()) {
|
} else if (request.post_data.empty()) {
|
||||||
curl_easy_setopt(curl, CURLOPT_POST, 1);
|
curl_easy_setopt(curl, CURLOPT_POST, 1);
|
||||||
std::string str;
|
std::string str;
|
||||||
for (std::map<std::string, std::string>::iterator it =
|
for (StringMap::iterator it = request.post_fields.begin();
|
||||||
request.post_fields.begin();
|
it != request.post_fields.end(); ++it) {
|
||||||
it != request.post_fields.end();
|
|
||||||
++it) {
|
|
||||||
if (str != "")
|
if (str != "")
|
||||||
str += "&";
|
str += "&";
|
||||||
str += urlencode(it->first);
|
str += urlencode(it->first);
|
||||||
|
@ -20,9 +20,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||||||
#ifndef HTTPFETCH_HEADER
|
#ifndef HTTPFETCH_HEADER
|
||||||
#define HTTPFETCH_HEADER
|
#define HTTPFETCH_HEADER
|
||||||
|
|
||||||
#include <string>
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <map>
|
#include "util/string.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
// Can be used in place of "caller" in asynchronous transfers to discard result
|
// Can be used in place of "caller" in asynchronous transfers to discard result
|
||||||
@ -54,7 +53,7 @@ struct HTTPFetchRequest
|
|||||||
|
|
||||||
// POST fields. Fields are escaped properly.
|
// POST fields. Fields are escaped properly.
|
||||||
// If this is empty a GET request is done instead.
|
// If this is empty a GET request is done instead.
|
||||||
std::map<std::string, std::string> post_fields;
|
StringMap post_fields;
|
||||||
|
|
||||||
// Raw POST data, overrides post_fields.
|
// Raw POST data, overrides post_fields.
|
||||||
std::string post_data;
|
std::string post_data;
|
||||||
|
@ -280,26 +280,23 @@ public:
|
|||||||
}
|
}
|
||||||
virtual std::string getAlias(const std::string &name) const
|
virtual std::string getAlias(const std::string &name) const
|
||||||
{
|
{
|
||||||
std::map<std::string, std::string>::const_iterator i;
|
StringMap::const_iterator it = m_aliases.find(name);
|
||||||
i = m_aliases.find(name);
|
if (it != m_aliases.end())
|
||||||
if(i != m_aliases.end())
|
return it->second;
|
||||||
return i->second;
|
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
virtual std::set<std::string> getAll() const
|
virtual std::set<std::string> getAll() const
|
||||||
{
|
{
|
||||||
std::set<std::string> result;
|
std::set<std::string> result;
|
||||||
for(std::map<std::string, ItemDefinition*>::const_iterator
|
for(std::map<std::string, ItemDefinition *>::const_iterator
|
||||||
i = m_item_definitions.begin();
|
it = m_item_definitions.begin();
|
||||||
i != m_item_definitions.end(); i++)
|
it != m_item_definitions.end(); ++it) {
|
||||||
{
|
result.insert(it->first);
|
||||||
result.insert(i->first);
|
|
||||||
}
|
}
|
||||||
for(std::map<std::string, std::string>::const_iterator
|
for (StringMap::const_iterator
|
||||||
i = m_aliases.begin();
|
it = m_aliases.begin();
|
||||||
i != m_aliases.end(); i++)
|
it != m_aliases.end(); ++it) {
|
||||||
{
|
result.insert(it->first);
|
||||||
result.insert(i->first);
|
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -571,22 +568,24 @@ public:
|
|||||||
writeU8(os, 0); // version
|
writeU8(os, 0); // version
|
||||||
u16 count = m_item_definitions.size();
|
u16 count = m_item_definitions.size();
|
||||||
writeU16(os, count);
|
writeU16(os, count);
|
||||||
for(std::map<std::string, ItemDefinition*>::const_iterator
|
|
||||||
i = m_item_definitions.begin();
|
for (std::map<std::string, ItemDefinition *>::const_iterator
|
||||||
i != m_item_definitions.end(); i++)
|
it = m_item_definitions.begin();
|
||||||
{
|
it != m_item_definitions.end(); ++it) {
|
||||||
ItemDefinition *def = i->second;
|
ItemDefinition *def = it->second;
|
||||||
// Serialize ItemDefinition and write wrapped in a string
|
// Serialize ItemDefinition and write wrapped in a string
|
||||||
std::ostringstream tmp_os(std::ios::binary);
|
std::ostringstream tmp_os(std::ios::binary);
|
||||||
def->serialize(tmp_os, protocol_version);
|
def->serialize(tmp_os, protocol_version);
|
||||||
os<<serializeString(tmp_os.str());
|
os << serializeString(tmp_os.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
writeU16(os, m_aliases.size());
|
writeU16(os, m_aliases.size());
|
||||||
for(std::map<std::string, std::string>::const_iterator
|
|
||||||
i = m_aliases.begin(); i != m_aliases.end(); i++)
|
for (StringMap::const_iterator
|
||||||
{
|
it = m_aliases.begin();
|
||||||
os<<serializeString(i->first);
|
it != m_aliases.end(); ++it) {
|
||||||
os<<serializeString(i->second);
|
os << serializeString(it->first);
|
||||||
|
os << serializeString(it->second);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void deSerialize(std::istream &is)
|
void deSerialize(std::istream &is)
|
||||||
@ -633,7 +632,7 @@ private:
|
|||||||
// Key is name
|
// Key is name
|
||||||
std::map<std::string, ItemDefinition*> m_item_definitions;
|
std::map<std::string, ItemDefinition*> m_item_definitions;
|
||||||
// Aliases
|
// Aliases
|
||||||
std::map<std::string, std::string> m_aliases;
|
StringMap m_aliases;
|
||||||
#ifndef SERVER
|
#ifndef SERVER
|
||||||
// The id of the thread that is allowed to use irrlicht directly
|
// The id of the thread that is allowed to use irrlicht directly
|
||||||
threadid_t m_main_thread;
|
threadid_t m_main_thread;
|
||||||
|
@ -192,7 +192,7 @@ void Server::handleCommand_Init(NetworkPacket* pkt)
|
|||||||
|
|
||||||
{
|
{
|
||||||
std::string reason;
|
std::string reason;
|
||||||
if(m_script->on_prejoinplayer(playername, addr_s, reason)) {
|
if (m_script->on_prejoinplayer(playername, addr_s, &reason)) {
|
||||||
actionstream << "Server: Player with the name \"" << playerName << "\" "
|
actionstream << "Server: Player with the name \"" << playerName << "\" "
|
||||||
<< "tried to connect from " << addr_s << " "
|
<< "tried to connect from " << addr_s << " "
|
||||||
<< "but it was disallowed for the following reason: "
|
<< "but it was disallowed for the following reason: "
|
||||||
@ -480,7 +480,7 @@ void Server::handleCommand_Init_Legacy(NetworkPacket* pkt)
|
|||||||
|
|
||||||
{
|
{
|
||||||
std::string reason;
|
std::string reason;
|
||||||
if (m_script->on_prejoinplayer(playername, addr_s, reason)) {
|
if (m_script->on_prejoinplayer(playername, addr_s, &reason)) {
|
||||||
actionstream << "Server: Player with the name \"" << playername << "\" "
|
actionstream << "Server: Player with the name \"" << playername << "\" "
|
||||||
<< "tried to connect from " << addr_s << " "
|
<< "tried to connect from " << addr_s << " "
|
||||||
<< "but it was disallowed for the following reason: "
|
<< "but it was disallowed for the following reason: "
|
||||||
@ -1742,7 +1742,7 @@ void Server::handleCommand_NodeMetaFields(NetworkPacket* pkt)
|
|||||||
|
|
||||||
*pkt >> p >> formname >> num;
|
*pkt >> p >> formname >> num;
|
||||||
|
|
||||||
std::map<std::string, std::string> fields;
|
StringMap fields;
|
||||||
for (u16 k = 0; k < num; k++) {
|
for (u16 k = 0; k < num; k++) {
|
||||||
std::string fieldname;
|
std::string fieldname;
|
||||||
*pkt >> fieldname;
|
*pkt >> fieldname;
|
||||||
@ -1792,7 +1792,7 @@ void Server::handleCommand_InventoryFields(NetworkPacket* pkt)
|
|||||||
|
|
||||||
*pkt >> formname >> num;
|
*pkt >> formname >> num;
|
||||||
|
|
||||||
std::map<std::string, std::string> fields;
|
StringMap fields;
|
||||||
for (u16 k = 0; k < num; k++) {
|
for (u16 k = 0; k < num; k++) {
|
||||||
std::string fieldname;
|
std::string fieldname;
|
||||||
*pkt >> fieldname;
|
*pkt >> fieldname;
|
||||||
|
@ -45,10 +45,11 @@ void NodeMetadata::serialize(std::ostream &os) const
|
|||||||
{
|
{
|
||||||
int num_vars = m_stringvars.size();
|
int num_vars = m_stringvars.size();
|
||||||
writeU32(os, num_vars);
|
writeU32(os, num_vars);
|
||||||
for(std::map<std::string, std::string>::const_iterator
|
for (StringMap::const_iterator
|
||||||
i = m_stringvars.begin(); i != m_stringvars.end(); i++){
|
it = m_stringvars.begin();
|
||||||
os<<serializeString(i->first);
|
it != m_stringvars.end(); ++it) {
|
||||||
os<<serializeLongString(i->second);
|
os << serializeString(it->first);
|
||||||
|
os << serializeLongString(it->second);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_inventory->serialize(os);
|
m_inventory->serialize(os);
|
||||||
@ -203,11 +204,10 @@ void NodeMetadataList::clear()
|
|||||||
std::string NodeMetadata::getString(const std::string &name,
|
std::string NodeMetadata::getString(const std::string &name,
|
||||||
unsigned short recursion) const
|
unsigned short recursion) const
|
||||||
{
|
{
|
||||||
std::map<std::string, std::string>::const_iterator it;
|
StringMap::const_iterator it = m_stringvars.find(name);
|
||||||
it = m_stringvars.find(name);
|
if (it == m_stringvars.end())
|
||||||
if (it == m_stringvars.end()) {
|
|
||||||
return "";
|
return "";
|
||||||
}
|
|
||||||
return resolveString(it->second, recursion);
|
return resolveString(it->second, recursion);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,10 +21,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||||||
#define NODEMETADATA_HEADER
|
#define NODEMETADATA_HEADER
|
||||||
|
|
||||||
#include "irr_v3d.h"
|
#include "irr_v3d.h"
|
||||||
#include <string>
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <map>
|
#include "util/string.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
NodeMetadata stores arbitary amounts of data for special blocks.
|
NodeMetadata stores arbitary amounts of data for special blocks.
|
||||||
@ -54,19 +53,19 @@ public:
|
|||||||
void setString(const std::string &name, const std::string &var);
|
void setString(const std::string &name, const std::string &var);
|
||||||
// Support variable names in values
|
// Support variable names in values
|
||||||
std::string resolveString(const std::string &str, unsigned short recursion = 0) const;
|
std::string resolveString(const std::string &str, unsigned short recursion = 0) const;
|
||||||
std::map<std::string, std::string> getStrings() const
|
StringMap getStrings() const
|
||||||
{
|
{
|
||||||
return m_stringvars;
|
return m_stringvars;
|
||||||
}
|
}
|
||||||
|
|
||||||
// The inventory
|
// The inventory
|
||||||
Inventory* getInventory()
|
Inventory *getInventory()
|
||||||
{
|
{
|
||||||
return m_inventory;
|
return m_inventory;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::map<std::string, std::string> m_stringvars;
|
StringMap m_stringvars;
|
||||||
Inventory *m_inventory;
|
Inventory *m_inventory;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -53,7 +53,7 @@ void ScriptApiMainMenu::handleMainMenuEvent(std::string text)
|
|||||||
scriptError();
|
scriptError();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScriptApiMainMenu::handleMainMenuButtons(std::map<std::string, std::string> fields)
|
void ScriptApiMainMenu::handleMainMenuButtons(const StringMap &fields)
|
||||||
{
|
{
|
||||||
SCRIPTAPI_PRECHECKHEADER
|
SCRIPTAPI_PRECHECKHEADER
|
||||||
|
|
||||||
@ -69,8 +69,8 @@ void ScriptApiMainMenu::handleMainMenuButtons(std::map<std::string, std::string>
|
|||||||
|
|
||||||
// Convert fields to a Lua table
|
// Convert fields to a Lua table
|
||||||
lua_newtable(L);
|
lua_newtable(L);
|
||||||
std::map<std::string, std::string>::const_iterator it;
|
StringMap::const_iterator it;
|
||||||
for (it = fields.begin(); it != fields.end(); it++){
|
for (it = fields.begin(); it != fields.end(); ++it) {
|
||||||
const std::string &name = it->first;
|
const std::string &name = it->first;
|
||||||
const std::string &value = it->second;
|
const std::string &value = it->second;
|
||||||
lua_pushstring(L, name.c_str());
|
lua_pushstring(L, name.c_str());
|
||||||
|
@ -21,7 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||||||
#define S_MAINMENU_H_
|
#define S_MAINMENU_H_
|
||||||
|
|
||||||
#include "cpp_api/s_base.h"
|
#include "cpp_api/s_base.h"
|
||||||
#include <map>
|
#include "util/string.h"
|
||||||
|
|
||||||
class ScriptApiMainMenu
|
class ScriptApiMainMenu
|
||||||
: virtual public ScriptApiBase
|
: virtual public ScriptApiBase
|
||||||
@ -43,7 +43,7 @@ public:
|
|||||||
* process field data recieved from formspec
|
* process field data recieved from formspec
|
||||||
* @param fields data in field format
|
* @param fields data in field format
|
||||||
*/
|
*/
|
||||||
void handleMainMenuButtons(std::map<std::string, std::string> fields);
|
void handleMainMenuButtons(const StringMap &fields);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* S_MAINMENU_H_ */
|
#endif /* S_MAINMENU_H_ */
|
||||||
|
@ -200,7 +200,7 @@ bool ScriptApiNode::node_on_timer(v3s16 p, MapNode node, f32 dtime)
|
|||||||
|
|
||||||
void ScriptApiNode::node_on_receive_fields(v3s16 p,
|
void ScriptApiNode::node_on_receive_fields(v3s16 p,
|
||||||
const std::string &formname,
|
const std::string &formname,
|
||||||
const std::map<std::string, std::string> &fields,
|
const StringMap &fields,
|
||||||
ServerActiveObject *sender)
|
ServerActiveObject *sender)
|
||||||
{
|
{
|
||||||
SCRIPTAPI_PRECHECKHEADER
|
SCRIPTAPI_PRECHECKHEADER
|
||||||
@ -220,8 +220,8 @@ void ScriptApiNode::node_on_receive_fields(v3s16 p,
|
|||||||
push_v3s16(L, p); // pos
|
push_v3s16(L, p); // pos
|
||||||
lua_pushstring(L, formname.c_str()); // formname
|
lua_pushstring(L, formname.c_str()); // formname
|
||||||
lua_newtable(L); // fields
|
lua_newtable(L); // fields
|
||||||
std::map<std::string, std::string>::const_iterator it;
|
StringMap::const_iterator it;
|
||||||
for (it = fields.begin(); it != fields.end(); it++){
|
for (it = fields.begin(); it != fields.end(); it++) {
|
||||||
const std::string &name = it->first;
|
const std::string &name = it->first;
|
||||||
const std::string &value = it->second;
|
const std::string &value = it->second;
|
||||||
lua_pushstring(L, name.c_str());
|
lua_pushstring(L, name.c_str());
|
||||||
|
@ -20,11 +20,10 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||||||
#ifndef S_NODE_H_
|
#ifndef S_NODE_H_
|
||||||
#define S_NODE_H_
|
#define S_NODE_H_
|
||||||
|
|
||||||
#include <map>
|
|
||||||
|
|
||||||
#include "irr_v3d.h"
|
#include "irr_v3d.h"
|
||||||
#include "cpp_api/s_base.h"
|
#include "cpp_api/s_base.h"
|
||||||
#include "cpp_api/s_nodemeta.h"
|
#include "cpp_api/s_nodemeta.h"
|
||||||
|
#include "util/string.h"
|
||||||
|
|
||||||
struct MapNode;
|
struct MapNode;
|
||||||
class ServerActiveObject;
|
class ServerActiveObject;
|
||||||
@ -47,7 +46,7 @@ public:
|
|||||||
bool node_on_timer(v3s16 p, MapNode node, f32 dtime);
|
bool node_on_timer(v3s16 p, MapNode node, f32 dtime);
|
||||||
void node_on_receive_fields(v3s16 p,
|
void node_on_receive_fields(v3s16 p,
|
||||||
const std::string &formname,
|
const std::string &formname,
|
||||||
const std::map<std::string, std::string> &fields,
|
const StringMap &fields,
|
||||||
ServerActiveObject *sender);
|
ServerActiveObject *sender);
|
||||||
void node_falling_update(v3s16 p);
|
void node_falling_update(v3s16 p);
|
||||||
void node_falling_update_single(v3s16 p);
|
void node_falling_update_single(v3s16 p);
|
||||||
|
@ -83,7 +83,10 @@ bool ScriptApiPlayer::on_respawnplayer(ServerActiveObject *player)
|
|||||||
return positioning_handled_by_some;
|
return positioning_handled_by_some;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ScriptApiPlayer::on_prejoinplayer(std::string name, std::string ip, std::string &reason)
|
bool ScriptApiPlayer::on_prejoinplayer(
|
||||||
|
const std::string &name,
|
||||||
|
const std::string &ip,
|
||||||
|
std::string *reason)
|
||||||
{
|
{
|
||||||
SCRIPTAPI_PRECHECKHEADER
|
SCRIPTAPI_PRECHECKHEADER
|
||||||
|
|
||||||
@ -94,7 +97,7 @@ bool ScriptApiPlayer::on_prejoinplayer(std::string name, std::string ip, std::st
|
|||||||
lua_pushstring(L, ip.c_str());
|
lua_pushstring(L, ip.c_str());
|
||||||
script_run_callbacks(L, 2, RUN_CALLBACKS_MODE_OR);
|
script_run_callbacks(L, 2, RUN_CALLBACKS_MODE_OR);
|
||||||
if (lua_isstring(L, -1)) {
|
if (lua_isstring(L, -1)) {
|
||||||
reason.assign(lua_tostring(L, -1));
|
reason->assign(lua_tostring(L, -1));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -142,7 +145,7 @@ void ScriptApiPlayer::on_cheat(ServerActiveObject *player,
|
|||||||
|
|
||||||
void ScriptApiPlayer::on_playerReceiveFields(ServerActiveObject *player,
|
void ScriptApiPlayer::on_playerReceiveFields(ServerActiveObject *player,
|
||||||
const std::string &formname,
|
const std::string &formname,
|
||||||
const std::map<std::string, std::string> &fields)
|
const StringMap &fields)
|
||||||
{
|
{
|
||||||
SCRIPTAPI_PRECHECKHEADER
|
SCRIPTAPI_PRECHECKHEADER
|
||||||
|
|
||||||
@ -156,17 +159,19 @@ void ScriptApiPlayer::on_playerReceiveFields(ServerActiveObject *player,
|
|||||||
lua_pushstring(L, formname.c_str());
|
lua_pushstring(L, formname.c_str());
|
||||||
// param 3
|
// param 3
|
||||||
lua_newtable(L);
|
lua_newtable(L);
|
||||||
for(std::map<std::string, std::string>::const_iterator
|
StringMap::const_iterator it;
|
||||||
i = fields.begin(); i != fields.end(); i++){
|
for (it = fields.begin(); it != fields.end(); ++it) {
|
||||||
const std::string &name = i->first;
|
const std::string &name = it->first;
|
||||||
const std::string &value = i->second;
|
const std::string &value = it->second;
|
||||||
lua_pushstring(L, name.c_str());
|
lua_pushstring(L, name.c_str());
|
||||||
lua_pushlstring(L, value.c_str(), value.size());
|
lua_pushlstring(L, value.c_str(), value.size());
|
||||||
lua_settable(L, -3);
|
lua_settable(L, -3);
|
||||||
}
|
}
|
||||||
script_run_callbacks(L, 3, RUN_CALLBACKS_MODE_OR_SC);
|
script_run_callbacks(L, 3, RUN_CALLBACKS_MODE_OR_SC);
|
||||||
}
|
}
|
||||||
ScriptApiPlayer::~ScriptApiPlayer() {
|
|
||||||
|
ScriptApiPlayer::~ScriptApiPlayer()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -20,10 +20,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||||||
#ifndef S_PLAYER_H_
|
#ifndef S_PLAYER_H_
|
||||||
#define S_PLAYER_H_
|
#define S_PLAYER_H_
|
||||||
|
|
||||||
#include <map>
|
|
||||||
|
|
||||||
#include "cpp_api/s_base.h"
|
#include "cpp_api/s_base.h"
|
||||||
#include "irr_v3d.h"
|
#include "irr_v3d.h"
|
||||||
|
#include "util/string.h"
|
||||||
|
|
||||||
struct ToolCapabilities;
|
struct ToolCapabilities;
|
||||||
|
|
||||||
@ -36,17 +35,16 @@ public:
|
|||||||
void on_newplayer(ServerActiveObject *player);
|
void on_newplayer(ServerActiveObject *player);
|
||||||
void on_dieplayer(ServerActiveObject *player);
|
void on_dieplayer(ServerActiveObject *player);
|
||||||
bool on_respawnplayer(ServerActiveObject *player);
|
bool on_respawnplayer(ServerActiveObject *player);
|
||||||
bool on_prejoinplayer(std::string name, std::string ip, std::string &reason);
|
bool on_prejoinplayer(const std::string &name, const std::string &ip,
|
||||||
|
std::string *reason);
|
||||||
void on_joinplayer(ServerActiveObject *player);
|
void on_joinplayer(ServerActiveObject *player);
|
||||||
void on_leaveplayer(ServerActiveObject *player);
|
void on_leaveplayer(ServerActiveObject *player);
|
||||||
void on_cheat(ServerActiveObject *player, const std::string &cheat_type);
|
void on_cheat(ServerActiveObject *player, const std::string &cheat_type);
|
||||||
bool on_punchplayer(ServerActiveObject *player,
|
bool on_punchplayer(ServerActiveObject *player,
|
||||||
ServerActiveObject *hitter, float time_from_last_punch,
|
ServerActiveObject *hitter, float time_from_last_punch,
|
||||||
const ToolCapabilities *toolcap, v3f dir, s16 damage);
|
const ToolCapabilities *toolcap, v3f dir, s16 damage);
|
||||||
|
|
||||||
void on_playerReceiveFields(ServerActiveObject *player,
|
void on_playerReceiveFields(ServerActiveObject *player,
|
||||||
const std::string &formname,
|
const std::string &formname, const StringMap &fields);
|
||||||
const std::map<std::string, std::string> &fields);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -190,32 +190,34 @@ int NodeMetaRef::l_to_table(lua_State *L)
|
|||||||
NodeMetaRef *ref = checkobject(L, 1);
|
NodeMetaRef *ref = checkobject(L, 1);
|
||||||
|
|
||||||
NodeMetadata *meta = getmeta(ref, true);
|
NodeMetadata *meta = getmeta(ref, true);
|
||||||
if(meta == NULL){
|
if (meta == NULL) {
|
||||||
lua_pushnil(L);
|
lua_pushnil(L);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
lua_newtable(L);
|
lua_newtable(L);
|
||||||
|
|
||||||
// fields
|
// fields
|
||||||
lua_newtable(L);
|
lua_newtable(L);
|
||||||
{
|
{
|
||||||
std::map<std::string, std::string> fields = meta->getStrings();
|
StringMap fields = meta->getStrings();
|
||||||
for(std::map<std::string, std::string>::const_iterator
|
for (StringMap::const_iterator
|
||||||
i = fields.begin(); i != fields.end(); i++){
|
it = fields.begin(); it != fields.end(); ++it) {
|
||||||
const std::string &name = i->first;
|
const std::string &name = it->first;
|
||||||
const std::string &value = i->second;
|
const std::string &value = it->second;
|
||||||
lua_pushlstring(L, name.c_str(), name.size());
|
lua_pushlstring(L, name.c_str(), name.size());
|
||||||
lua_pushlstring(L, value.c_str(), value.size());
|
lua_pushlstring(L, value.c_str(), value.size());
|
||||||
lua_settable(L, -3);
|
lua_settable(L, -3);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
lua_setfield(L, -2, "fields");
|
lua_setfield(L, -2, "fields");
|
||||||
|
|
||||||
// inventory
|
// inventory
|
||||||
lua_newtable(L);
|
lua_newtable(L);
|
||||||
Inventory *inv = meta->getInventory();
|
Inventory *inv = meta->getInventory();
|
||||||
if(inv){
|
if (inv) {
|
||||||
std::vector<const InventoryList*> lists = inv->getLists();
|
std::vector<const InventoryList *> lists = inv->getLists();
|
||||||
for(std::vector<const InventoryList*>::const_iterator
|
for(std::vector<const InventoryList *>::const_iterator
|
||||||
i = lists.begin(); i != lists.end(); i++){
|
i = lists.begin(); i != lists.end(); i++) {
|
||||||
push_inventory_list(L, inv, (*i)->getName().c_str());
|
push_inventory_list(L, inv, (*i)->getName().c_str());
|
||||||
lua_setfield(L, -2, (*i)->getName().c_str());
|
lua_setfield(L, -2, (*i)->getName().c_str());
|
||||||
}
|
}
|
||||||
|
@ -103,10 +103,8 @@ std::string getShaderPath(const std::string &name_of_shader,
|
|||||||
class SourceShaderCache
|
class SourceShaderCache
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
void insert(const std::string &name_of_shader,
|
void insert(const std::string &name_of_shader, const std::string &filename,
|
||||||
const std::string &filename,
|
const std::string &program, bool prefer_local)
|
||||||
const std::string &program,
|
|
||||||
bool prefer_local)
|
|
||||||
{
|
{
|
||||||
std::string combined = name_of_shader + DIR_DELIM + filename;
|
std::string combined = name_of_shader + DIR_DELIM + filename;
|
||||||
// Try to use local shader instead if asked to
|
// Try to use local shader instead if asked to
|
||||||
@ -122,42 +120,43 @@ public:
|
|||||||
}
|
}
|
||||||
m_programs[combined] = program;
|
m_programs[combined] = program;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string get(const std::string &name_of_shader,
|
std::string get(const std::string &name_of_shader,
|
||||||
const std::string &filename)
|
const std::string &filename)
|
||||||
{
|
{
|
||||||
std::string combined = name_of_shader + DIR_DELIM + filename;
|
std::string combined = name_of_shader + DIR_DELIM + filename;
|
||||||
std::map<std::string, std::string>::iterator n;
|
StringMap::iterator n = m_programs.find(combined);
|
||||||
n = m_programs.find(combined);
|
if (n != m_programs.end())
|
||||||
if(n != m_programs.end())
|
|
||||||
return n->second;
|
return n->second;
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
// Primarily fetches from cache, secondarily tries to read from filesystem
|
// Primarily fetches from cache, secondarily tries to read from filesystem
|
||||||
std::string getOrLoad(const std::string &name_of_shader,
|
std::string getOrLoad(const std::string &name_of_shader,
|
||||||
const std::string &filename)
|
const std::string &filename)
|
||||||
{
|
{
|
||||||
std::string combined = name_of_shader + DIR_DELIM + filename;
|
std::string combined = name_of_shader + DIR_DELIM + filename;
|
||||||
std::map<std::string, std::string>::iterator n;
|
StringMap::iterator n = m_programs.find(combined);
|
||||||
n = m_programs.find(combined);
|
if (n != m_programs.end())
|
||||||
if(n != m_programs.end())
|
|
||||||
return n->second;
|
return n->second;
|
||||||
std::string path = getShaderPath(name_of_shader, filename);
|
std::string path = getShaderPath(name_of_shader, filename);
|
||||||
if(path == ""){
|
if (path == "") {
|
||||||
infostream<<"SourceShaderCache::getOrLoad(): No path found for \""
|
infostream << "SourceShaderCache::getOrLoad(): No path found for \""
|
||||||
<<combined<<"\""<<std::endl;
|
<< combined << "\"" << std::endl;
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
infostream<<"SourceShaderCache::getOrLoad(): Loading path \""<<path
|
infostream << "SourceShaderCache::getOrLoad(): Loading path \""
|
||||||
<<"\""<<std::endl;
|
<< path << "\"" << std::endl;
|
||||||
std::string p = readFile(path);
|
std::string p = readFile(path);
|
||||||
if(p != ""){
|
if (p != "") {
|
||||||
m_programs[combined] = p;
|
m_programs[combined] = p;
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
private:
|
private:
|
||||||
std::map<std::string, std::string> m_programs;
|
StringMap m_programs;
|
||||||
|
|
||||||
std::string readFile(const std::string &path)
|
std::string readFile(const std::string &path)
|
||||||
{
|
{
|
||||||
std::ifstream is(path.c_str(), std::ios::binary);
|
std::ifstream is(path.c_str(), std::ios::binary);
|
||||||
|
Loading…
Reference in New Issue
Block a user