summaryrefslogtreecommitdiff
path: root/tiger-compiler/src/task/int-task.cc
blob: bf2627126977d4bce5f809829eec86831bc1b444 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
/**
 ** \file task/int-task.cc
 ** \brief IntTask class implementation.
 **
 */

#include <exception>
#include <iostream>

#include <common.hh>
#include <task/int-task.hh>

namespace task
{
  IntTask::IntTask(int& var,
                   int min,
                   int max,
                   const char* module_name,
                   const char* desc,
                   const char* name,
                   std::string deps)
    : ArgumentTask(name, module_name, desc, "NUM", deps)
    , var_(var)
    , min_(min)
    , max_(max)
  {}

  void IntTask::arg_set(const std::string& arg) const
  {
    arg_ = arg;

    try
      {
        var_ = stol(arg);
      }
    catch (const std::invalid_argument& e)
      {
        std::cerr << program_name << ": expected an integer: " << arg << '\n';
        throw;
      }

    if (!(min_ <= var_ && var_ <= max_))
      {
        std::cerr << program_name << ": invalid integer: " << var_ << '\n';

        throw std::invalid_argument(std::string("invalid integer: ") + arg_);
      }
  }

  void IntTask::execute() const
  {
    // Assignment done in arg_set.
  }

} //namespace task