aboutsummaryrefslogtreecommitdiff
path: root/bbot/variable
diff options
context:
space:
mode:
Diffstat (limited to 'bbot/variable')
-rw-r--r--bbot/variable49
1 files changed, 49 insertions, 0 deletions
diff --git a/bbot/variable b/bbot/variable
new file mode 100644
index 0000000..c210dc0
--- /dev/null
+++ b/bbot/variable
@@ -0,0 +1,49 @@
+// 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 with the above
+ // constraints.
+ //
+ 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