#include "Global.h" #include "Exception.h" #include namespace jet { Global::Global() { } Global::~Global() { } void Global::dump() { for (auto i = variables.begin(); i != variables.end(); i++) std::cout << i->first << "=[" << i->second << "]" << std::endl; } bool Global::sessionExists(coreutils::MString sessionId) { return sessions.find(sessionId) != sessions.end(); } void Global::addSession(coreutils::MString sessionId, __mysql *mysql) { if(sessionExists(sessionId)) coreutils::Exception("sessionid already exists."); sessions[sessionId] = mysql; } void Global::removeSession(coreutils::MString sessionId) { sessions.erase(sessionId); } coreutils::ZString Global::getVariable(coreutils::ZString &variable) { if(variable.ifNext("$[")) { if(variable.ifNext("!")) { return variables[renderVariableName(variable)]; } if(variable.ifNext(":")) { // TODO: should only allow CGI variable name. Allow variable substitution. } if(variable.ifNext("@")) { // TODO: should only allow environment variables. Allow substitution. } else { return variables[renderVariableName(variable)]; } throw coreutils::Exception("expected variable name or type designator."); } if(variable.ifNext("#[")) { // TODO: this local variable type has no special naming conventions. We // just need to do nested variable substitution for the entry. } throw coreutils::Exception("Expecting a variable initializer ('$[' or '#[')."); } coreutils::MString Global::renderVariableName(coreutils::ZString &variable) { coreutils::MString name = variable.getTokenInclude("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._-"); if(variable.ifNext("]")) return name; if(variable.startsWith("$[")) { name << getVariable(variable); return name; } return coreutils::MString(""); } }