atlas
AtlasTool.h
1 /*
2  * (C) Copyright 2013 ECMWF.
3  *
4  * This software is licensed under the terms of the Apache Licence Version 2.0
5  * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
6  * In applying this licence, ECMWF does not waive the privileges and immunities
7  * granted to it by virtue of its status as an intergovernmental organisation
8  * nor does it submit to any jurisdiction.
9  */
10 
11 #pragma once
12 
13 #include <iostream>
14 #include <vector>
15 
16 #include "eckit/option/CmdArgs.h"
17 #include "eckit/option/Separator.h"
18 #include "eckit/option/SimpleOption.h"
19 #include "eckit/option/VectorOption.h"
20 #include "eckit/runtime/Tool.h"
21 
22 #include "atlas/library/Library.h"
23 #include "atlas/parallel/mpi/mpi.h"
24 #include "atlas/runtime/Log.h"
25 #include "atlas/util/Config.h"
26 
27 //--------------------------------------------------------------------------------
28 
30 using eckit::option::CmdArgs;
31 using eckit::option::Option;
32 using eckit::option::Separator;
33 using eckit::option::SimpleOption;
34 using eckit::option::VectorOption;
35 
36 namespace atlas {
37 
38 class AtlasTool : public eckit::Tool {
39 public:
40  typedef std::vector<eckit::option::Option*> Options;
41  typedef eckit::option::CmdArgs Args;
42 
43 protected:
44  virtual bool serial() { return false; }
45  virtual std::string indent() { return " "; }
46  virtual std::string briefDescription() { return ""; }
47  virtual std::string longDescription() { return ""; }
48  virtual std::string usage() { return name() + " [OPTION]... [--help,-h] [--debug]"; }
49 
50  void add_option( eckit::option::Option* option );
51 
52  virtual void help( std::ostream& out = Log::info() );
53 
54  virtual int numberOfPositionalArguments() { return -1; }
55  virtual int minimumPositionalArguments() { return 0; }
56 
57  bool handle_help();
58 
59 public:
60  AtlasTool( int argc, char** argv );
61 
62  int start();
63 
64  virtual void run(); // unused
65 
66  virtual int execute( const Args& ) = 0;
67 
68  static constexpr int success() { return 0; }
69  static constexpr int failed() { return 1; }
70 
71 private:
72  void setupLogging();
73 
74 private:
75  Options options_;
76 };
77 
78 } // namespace atlas
Definition: AtlasTool.h:38
Contains all atlas classes and methods.
Definition: atlas-grids.cc:33
Configuration class used to construct various atlas components.
Definition: Config.h:27