converted executable-based commands to the new command API (as "core")

This commit is contained in:
Nicholas O'Connor 2017-03-23 19:09:36 -07:00
parent 5a7353abc1
commit 325413f3f2
7 changed files with 45 additions and 7 deletions

View File

@ -1,9 +1,14 @@
#ifndef __CELLAR_HPP #ifndef __CELLAR_HPP
#define __CELLAR_HPP #define __CELLAR_HPP
#pragma once #pragma once
#include <string>
#include <vector>
using namespace std;
namespace cellar { namespace cellar {
void print_header(); extern void print_header();
extern void print_version(int,vector<string>);
} }
#endif // __CELLAR_HPP #endif // __CELLAR_HPP

View File

@ -14,6 +14,8 @@ namespace cellar {
void add_command(string, CommandFunction); void add_command(string, CommandFunction);
vector<string> list_commands(); vector<string> list_commands();
extern map<string,CommandFunction> core_commands();
} }
} }

View File

@ -1,3 +1,4 @@
// vim: filetype=cpp
#include <iostream> #include <iostream>
#include <map> #include <map>
#include <sstream> #include <sstream>
@ -42,9 +43,18 @@ int main(int argc, char* argv[]) {
cmdparse.parse(argc, argv); cmdparse.parse(argc, argv);
for (auto item : commands::bottles_commands()) { /*[[[cog
commands::command_map[item.first] = item.second; import cog
}
with open("src/modules.txt") as modules:
for module in modules:
cog.out("""
for (auto item : commands::""" + module.strip() + """_commands()) {
commands::command_map[item.first] = item.second;
}
""", dedent=True, trimblanklines=True)
]]]*/
//[[[end]]]
string usercmd = command.getValue(); string usercmd = command.getValue();
if (commands::command_map.count(usercmd) > 0) { if (commands::command_map.count(usercmd) > 0) {

View File

@ -1,3 +1,4 @@
// vim: filetype=cpp :
#include <iostream> #include <iostream>
#include <string> #include <string>
#include <vector> #include <vector>
@ -37,4 +38,20 @@ void help_command(int argc, vector<string> argv) {
} }
cout << endl; cout << endl;
} }
CommandFunction helpcmd = command_map["help"] = &help_command;
map<string, CommandFunction> cellar::commands::core_commands() {
map<string, CommandFunction> result;
/*[[[cog
import cog
with open("src/commands.txt") as commandfile:
for line in commandfile:
linesplit = line.strip().split(" ")
name = linesplit[0]
func = linesplit[1]
cog.outl("result.insert(pair<string,CommandFunction>(\"{0}\", &{1}));".format(name, func))
]]]*/
//[[[end]]]
return result;
}

2
src/commands.txt Normal file
View File

@ -0,0 +1,2 @@
version print_version
help help_command

2
src/modules.txt Normal file
View File

@ -0,0 +1,2 @@
core
bottles

View File

@ -3,6 +3,7 @@
#include <string> #include <string>
#include <vector> #include <vector>
#include "cellar.hpp"
#include "commands.hpp" #include "commands.hpp"
#include "output.hpp" #include "output.hpp"
#include "version.hpp" #include "version.hpp"
@ -41,7 +42,6 @@ string cellar::version::short_version() {
//[[[end]]] //[[[end]]]
} }
void print_version(int argc, vector<string> argv) { void cellar::print_version(int argc, vector<string> argv) {
cellar::output::statement(short_version()); cellar::output::statement(short_version());
} }
cellar::commands::CommandFunction versioncmd = cellar::commands::command_map["version"] = &print_version;