/*
Copyright 2009-2012 Andreas Biegert, Christof Angermueller
This file is part of the CS-BLAST package.
The CS-BLAST package is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
The CS-BLAST package is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
*/
#ifndef CS_APPLICATION_H_
#define CS_APPLICATION_H_
#include
#include
#include
#include "globals.h"
#include "getopt_pp.h"
using namespace GetOpt;
namespace cs {
// Basic (abstract) application class.
// Defines the high level behavior of an application. A new application is
// written by deriving a class from Application and writing an implementation
// of the Run() and maybe some other (like ParseOptions() etc.) methods.
class Application {
public:
// Register the application instance.
Application();
// Clean up the application settings, flush the diagnostic stream.
virtual ~Application();
// Main function (entry point) for the application.
int main(int argc, // argc in a regular main
char* argv[], // argv in a regular main
FILE* fout, // output stream
const std::string& name // application name
);
protected:
// Version number for usage output.
static const char* kVersionNumber;
// Copyright string for usage output.
static const char* kCopyright;
// Runs the application and return exit code. To be implemented by derived
// classes.
virtual int Run() = 0;
// Parses command line options.
virtual void ParseOptions(GetOpt_pp& /* options */) {};
// Prints options summary to stream.
virtual void PrintOptions() const {};
// Prints usage banner to stream.
virtual void PrintUsage() const {};
// Prints short application description.
virtual void PrintBanner() const {};
// Prints copyright notification.
void PrintHelp() const;
static Application* instance_; // current app. instance
std::string app_name_; // application name
std::string log_level_; // log reporting level
std::string log_file_; // name of logfile
FILE* log_fp_; // file pointer to logfile
FILE* out_; // file pointer to output stream
int argc_;
char** argv_;
};
} // namespace cs
#endif // CS_APPLICATION_H_