the humble beginnings of a command system

This commit is contained in:
Nicholas O'Connor 2017-03-22 19:34:50 -07:00
parent 9cf038ebc0
commit 4ef22255b0
4 changed files with 47 additions and 25 deletions

View File

@ -1,4 +1,4 @@
bin_PROGRAMS = cellar bin_PROGRAMS = cellar
cellar_CPPFLAGS = $(BOOST_CPPFLAGS) cellar_CPPFLAGS = $(BOOST_CPPFLAGS)
cellar_LDFLAGS = $(BOOST_LDFLAGS) $(BOOST_SYSTEM_LIB) $(BOOST_FILESYSTEM_LIB) cellar_LDFLAGS = $(BOOST_LDFLAGS) $(BOOST_SYSTEM_LIB) $(BOOST_FILESYSTEM_LIB)
cellar_SOURCES = cellar.cpp fs.cpp bottles.cpp cellar_SOURCES = cellar.cpp fs.cpp bottles.cpp commands.cpp

View File

@ -6,34 +6,17 @@
#include "json.hpp" #include "json.hpp"
#include "bottles.hpp" #include "bottles.hpp"
#include "commands.hpp"
using namespace std; using namespace std;
using namespace cellar; using namespace cellar;
using json = nlohmann::json; using json = nlohmann::json;
int main(int argc, char* argv[]) { int main(int argc, char* argv[]) {
map<string, bottles::Bottle> bottles = bottles::get_bottles(); vector<string> commands = commands::list_commands();
for (auto& item : bottles) { cout << "cellar - bottle management tool for WINE connoisseurs" << std::endl;
cout << item.first << "- "; for (string item : commands) {
bottles::Bottle current = item.second; cout << item << " has loaded" << endl;
switch (current.type) {
case bottles::bottle_anonymous:
cout << "anonymous wine bottle";
break;
case bottles::bottle_labelled:
cout << current.config["name"];
break;
case bottles::bottle_symlink:
cout << "symlink to ";
cout << current.canonical_path;
break;
default:
cout << "broken or unsupported wine bottle";
} }
cout << endl;
}
return 0; return 0;
} }

19
src/commands.cpp Normal file
View File

@ -0,0 +1,19 @@
#include "commands.hpp"
using namespace std;
using namespace cellar::commands;
map<string, CommandFunction> cellar::commands::command_map;
bool cellar::commands::add_command(string name, CommandFunction func) {
command_map[name] = func;
return true;
}
vector<string> cellar::commands::list_commands() {
vector<string> result;
for (auto& item : command_map) {
result.push_back(item.first);
}
return result;
}

20
src/commands.hpp Normal file
View File

@ -0,0 +1,20 @@
#ifndef __COMMANDS_HPP
#define __COMMANDS_HPP
#pragma once
#include <map>
#include <string>
#include <vector>
using namespace std;
namespace cellar {
namespace commands {
typedef void (*CommandFunction)(int, char*[]);
extern map<string, CommandFunction> command_map;
bool add_command(string, CommandFunction);
vector<string> list_commands();
}
}
#endif // __COMMANDS_HPP