Privileges to/from string conversion functions standalone, not static members

This commit is contained in:
Ciaran Gultnieks 2011-05-16 16:13:17 +01:00
parent 7cdd988f88
commit 1520d49310
3 changed files with 62 additions and 52 deletions

View File

@ -23,6 +23,55 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "constants.h" #include "constants.h"
#include "utility.h" #include "utility.h"
// Convert a privileges value into a human-readable string,
// with each component separated by a comma.
std::wstring privsToString(u64 privs)
{
std::wostringstream os(std::ios_base::binary);
if(privs & PRIV_BUILD)
os<<L"build,";
if(privs & PRIV_TELEPORT)
os<<L"teleport,";
if(privs & PRIV_SETTIME)
os<<L"settime,";
if(privs & PRIV_PRIVS)
os<<L"privs,";
if(os.tellp())
{
// Drop the trailing comma. (Why on earth can't
// you truncate a C++ stream anyway???)
std::wstring tmp = os.str();
return tmp.substr(0, tmp.length() -1);
}
return os.str();
}
// Converts a comma-seperated list of privilege values into a
// privileges value. The reverse of privsToString(). Returns
// PRIV_INVALID if there is anything wrong with the input.
u64 stringToPrivs(std::wstring str)
{
u64 privs=0;
std::vector<std::wstring> pr;
pr=str_split(str, ',');
for(std::vector<std::wstring>::iterator i = pr.begin();
i != pr.end(); ++i)
{
if(*i == L"build")
privs |= PRIV_BUILD;
else if(*i == L"teleport")
privs |= PRIV_TELEPORT;
else if(*i == L"settime")
privs |= PRIV_SETTIME;
else if(*i == L"privs")
privs |= PRIV_PRIVS;
else
return PRIV_INVALID;
}
return privs;
}
Player::Player(): Player::Player():
touching_ground(false), touching_ground(false),
in_water(false), in_water(false),

View File

@ -43,6 +43,15 @@ const u64 PRIV_DEFAULT = PRIV_BUILD;
const u64 PRIV_ALL = 0x7FFFFFFFFFFFFFFFULL; const u64 PRIV_ALL = 0x7FFFFFFFFFFFFFFFULL;
const u64 PRIV_INVALID = 0x8000000000000000ULL; const u64 PRIV_INVALID = 0x8000000000000000ULL;
// Convert a privileges value into a human-readable string,
// with each component separated by a comma.
std::wstring privsToString(u64 privs);
// Converts a comma-seperated list of privilege values into a
// privileges value. The reverse of privsToString(). Returns
// PRIV_INVALID if there is anything wrong with the input.
u64 stringToPrivs(std::wstring str);
class Map; class Map;
@ -155,54 +164,6 @@ protected:
public: public:
// Converst a prvileges value into a human-readable string,
// with each component separated by a comma.
static std::wstring privsToString(u64 privs)
{
std::wostringstream os(std::ios_base::binary);
if(privs & PRIV_BUILD)
os<<L"build,";
if(privs & PRIV_TELEPORT)
os<<L"teleport,";
if(privs & PRIV_SETTIME)
os<<L"settime,";
if(privs & PRIV_PRIVS)
os<<L"privs,";
if(os.tellp())
{
// Drop the trailing comma. (Why on earth can't
// you truncate a C++ stream anyway???)
std::wstring tmp = os.str();
return tmp.substr(0, tmp.length() -1);
}
return os.str();
}
// Converts a comma-seperated list of privilege values into a
// privileges value. The reverse of privsToString(). Returns
// PRIV_INVALID if there is anything wrong with the input.
static u64 stringToPrivs(std::wstring str)
{
u64 privs=0;
std::vector<std::wstring> pr;
pr=str_split(str, ',');
for(std::vector<std::wstring>::iterator i = pr.begin();
i != pr.end(); ++i)
{
if(*i == L"build")
privs |= PRIV_BUILD;
else if(*i == L"teleport")
privs |= PRIV_TELEPORT;
else if(*i == L"settime")
privs |= PRIV_SETTIME;
else if(*i == L"privs")
privs |= PRIV_PRIVS;
else
return PRIV_INVALID;
}
return privs;
}
}; };
/* /*

View File

@ -93,7 +93,7 @@ void ServerCommand::cmd_privs(std::wostringstream &os,
{ {
if(ctx->parms.size() == 1) if(ctx->parms.size() == 1)
{ {
os<<L"-!- " + Player::privsToString(ctx->player->privs); os<<L"-!- " + privsToString(ctx->player->privs);
return; return;
} }
@ -110,7 +110,7 @@ void ServerCommand::cmd_privs(std::wostringstream &os,
return; return;
} }
os<<L"-!- " + Player::privsToString(tp->privs); os<<L"-!- " + privsToString(tp->privs);
} }
void ServerCommand::cmd_grantrevoke(std::wostringstream &os, void ServerCommand::cmd_grantrevoke(std::wostringstream &os,
@ -128,7 +128,7 @@ void ServerCommand::cmd_grantrevoke(std::wostringstream &os,
return; return;
} }
u64 newprivs = Player::stringToPrivs(ctx->parms[2]); u64 newprivs = stringToPrivs(ctx->parms[2]);
if(newprivs == PRIV_INVALID) if(newprivs == PRIV_INVALID)
{ {
os<<L"-!- Invalid privileges specified"; os<<L"-!- Invalid privileges specified";
@ -148,7 +148,7 @@ void ServerCommand::cmd_grantrevoke(std::wostringstream &os,
tp->privs &= ~newprivs; tp->privs &= ~newprivs;
os<<L"-!- Privileges change to "; os<<L"-!- Privileges change to ";
os<<Player::privsToString(tp->privs); os<<privsToString(tp->privs);
} }
void ServerCommand::cmd_time(std::wostringstream &os, void ServerCommand::cmd_time(std::wostringstream &os,