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:
parent
99732f6dd8
commit
c455582a4e
3 changed files with 51 additions and 7 deletions
|
@ -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
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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() {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue