#ifndef UTILS_H
#define UTILS_H

#include <boost/program_options.hpp>

namespace trygvis {
namespace apps {

namespace po = boost::program_options;

class app_execution {
public:
    app_execution(po::options_description desc, po::variables_map vm) : desc(desc), vm(vm) {
    }

    po::options_description desc;
    po::variables_map vm;

    void usage();
};

class app {
public:

    virtual void add_options(po::options_description_easy_init& options) {
    };

    virtual int main(app_execution &execution) = 0;
};

int launch_app(int argc, char *argv[], app &app);

}
}

#endif