aboutsummaryrefslogtreecommitdiff
path: root/bbot/variable
blob: 556cc0932fdf0bbdc31b9f87943c0474158ae5cd (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
// file      : bbot/variable -*- C++ -*-
// copyright : Copyright (c) 2014-2017 Code Synthesis Ltd
// license   : MIT; see accompanying LICENSE file

#ifndef BBOT_VARIABLE
#define BBOT_VARIABLE

#include <string>
#include <vector>
#include <cstdint>   // uint64_t
#include <stdexcept> // invalid_argument

#include <bbot/export>

namespace bbot
{
  //@@ invalid_argument
  //
  class LIBBBOT_EXPORT invalid_variable: public std::invalid_argument
  {
  public:
    invalid_variable (std::uint64_t p, const std::string& d)
        : invalid_argument (d), pos (p) {}

    std::uint64_t pos; // Zero-based.
  };

  // String in the name=value format. Can contain single or double quoted
  // substrings. No escaping is supported. The name must not contain spaces.
  // Throw variable_error if the string doesn't conform to these rules.
  //
  struct LIBBBOT_EXPORT variable: std::string
  {
    variable (std::string);

    // Remove a single level of quotes. Don't validate the format or the
    // correctness of the quotation. Note that the variable can potentially be
    // modified through the std::string interface in a way that breaks
    // format/quoting.
    //
    std::string
    unquoted () const;
  };

  using variables = std::vector<variable>;
}

#endif // BBOT_VARIABLE