1
0
Fork 0
mirror of https://github.com/KingDuckZ/dindexer.git synced 2025-07-03 14:14:11 +00:00

Provide some wrappers so adding commands is more convenient.

This commit is contained in:
King_DuckZ 2016-01-22 19:54:32 +00:00
parent 99732f6dd8
commit c455582a4e
3 changed files with 51 additions and 7 deletions

View file

@ -41,6 +41,27 @@ BOOST_FUSION_ADAPT_STRUCT(
);
namespace din {
using StringList = std::vector<std::string>;
namespace {
bool wrap_void_noparam (const std::function<void()>& parCallback, const StringList&) {
parCallback();
return false;
}
bool wrap_void_oneparam (const std::function<void(const std::string&)>& parCallback, const StringList& parArgs) {
assert(1 == parArgs.size());
parCallback(parArgs.front());
return false;
}
bool wrap_bool_noparam (const std::function<bool()>& parCallback, const StringList& parArgs) {
static_cast<void>(parArgs);
assert(parArgs.empty());
return parCallback();
}
} //unnamed namespace
struct CustomCommand {
std::string name;
CommandProcessor::CmdCallback callback;
@ -141,4 +162,24 @@ namespace din {
//Add the new command
m_local_data->commands.push_back(CustomCommand {std::move(parName), std::move(parCallback), parExpParams});
}
void CommandProcessor::add_command (std::string&& parName, std::function<void()> parCallback, uint32_t parExpParams) {
add_command(std::move(parName), std::bind(&wrap_void_noparam, std::move(parCallback), std::placeholders::_1), parExpParams);
}
void CommandProcessor::add_command (std::string&& parName, std::function<void(const std::string&)> parCallback, uint32_t parExpParams) {
add_command(std::move(parName), std::bind(&wrap_void_oneparam, std::move(parCallback), std::placeholders::_1), parExpParams);
}
void CommandProcessor::add_command (std::string&& parName, std::function<bool()> parCallback, uint32_t parExpParams) {
add_command(std::move(parName), std::bind(&wrap_bool_noparam, std::move(parCallback), std::placeholders::_1), parExpParams);
}
void CommandProcessor::add_command (std::string&& parName, void(*parCallback)(), uint32_t parExpParams) {
add_command(std::move(parName), std::function<void()>(parCallback), parExpParams);
}
void CommandProcessor::add_command (std::string&& parName, bool(*parCallback)(), uint32_t parExpParams) {
add_command(std::move(parName), std::function<bool()>(parCallback), parExpParams);
}
} //namespace din

View file

@ -34,6 +34,11 @@ namespace din {
~CommandProcessor ( void ) noexcept;
void add_command ( std::string&& parName, CmdCallback parCallback, uint32_t parExpParams );
void add_command ( std::string&& parName, std::function<void()> parCallback, uint32_t parExpParams );
void add_command ( std::string&& parName, std::function<void(const std::string&)> parCallback, uint32_t parExpParams );
void add_command ( std::string&& parName, std::function<bool()> parCallback, uint32_t parExpParams );
void add_command ( std::string&& parName, void(*parCallback)(), uint32_t parExpParams );
void add_command ( std::string&& parName, bool(*parCallback)(), uint32_t parExpParams );
bool exec_command ( const std::string& parCommand );
private:

View file

@ -26,8 +26,8 @@
namespace {
void do_navigation ( void );
bool on_exit ( const std::vector<std::string>& );
bool on_cd ( const std::vector<std::string>& parArgs );
bool on_exit ( void );
void on_cd ( const std::string& parDir );
} //unnamed namespace
int main (int parArgc, char* parArgv[]) {
@ -49,13 +49,11 @@ int main (int parArgc, char* parArgv[]) {
}
namespace {
bool on_exit (const std::vector<std::string>&) {
bool on_exit() {
return true;
}
bool on_cd (const std::vector<std::string>& parArgs) {
assert(parArgs.size() == 1);
std::cout << "Would cd into " << parArgs.front() << '\n';
return false;
void on_cd (const std::string& parDir) {
std::cout << "Would cd into " << parDir << '\n';
}
void do_navigation() {