annotate irccdctl/alias.hpp @ 782:2d188a3e8802

Core: disable epoll backend by default See: https://github.com/boostorg/asio/issues/150
author David Demelier <markand@malikania.fr>
date Mon, 05 Nov 2018 13:46:33 +0100
parents 8c44bbcbbab9
children 06cc2f95f479
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
348
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * alias.hpp -- create irccdctl aliases
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
628
27587ff92a64 Misc: update copyrights
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
4 * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr>
348
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
603
986ed3a7575d Misc: fix includes style, closes #732
David Demelier <markand@malikania.fr>
parents: 527
diff changeset
19 #ifndef IRCCD_CTL_ALIAS_HPP
986ed3a7575d Misc: fix includes style, closes #732
David Demelier <markand@malikania.fr>
parents: 527
diff changeset
20 #define IRCCD_CTL_ALIAS_HPP
348
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
21
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 /**
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 * \file alias.hpp
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 * \brief Create irccdctl aliases.
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 */
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
26
603
986ed3a7575d Misc: fix includes style, closes #732
David Demelier <markand@malikania.fr>
parents: 527
diff changeset
27 #include <irccd/sysconfig.hpp>
986ed3a7575d Misc: fix includes style, closes #732
David Demelier <markand@malikania.fr>
parents: 527
diff changeset
28
348
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 #include <ostream>
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 #include <string>
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
31 #include <vector>
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
32
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 namespace irccd {
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
34
527
a88796ed040a Irccdctl: switch to Boost.Asio, closes #697
David Demelier <markand@malikania.fr>
parents: 394
diff changeset
35 namespace ctl {
a88796ed040a Irccdctl: switch to Boost.Asio, closes #697
David Demelier <markand@malikania.fr>
parents: 394
diff changeset
36
348
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 /**
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 * \brief Describe an alias argument.
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 *
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
40 * When the user specify arguments, it can precise an applied argument or a
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
41 * placeholder that will be substituted during command line invocation.
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
42 *
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
43 * Placeholders are placed using %n where n is an integer starting from 0.
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
44 */
527
a88796ed040a Irccdctl: switch to Boost.Asio, closes #697
David Demelier <markand@malikania.fr>
parents: 394
diff changeset
45 class alias_arg {
348
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
46 private:
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
47 std::string value_;
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
48 bool is_placeholder_;
348
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
49
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
50 public:
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
51 /**
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
52 * Construct an argument.
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
53 *
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
54 * \pre value must not be empty
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
55 * \param value the value
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
56 */
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
57 alias_arg(std::string value);
348
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
58
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
59 /**
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
60 * Check if the argument is a placeholder.
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
61 *
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
62 * \return true if the argument is a placeholder
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
63 */
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
64 auto is_placeholder() const noexcept -> bool;
348
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
65
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
66 /**
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
67 * Get the placeholder index (e.g %0 returns 0)
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
68 *
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
69 * \pre is_placeholder() must return true
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
70 * \return the position
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
71 */
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
72 auto get_index() const noexcept -> unsigned;
348
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
73
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
74 /**
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
75 * Get the real value.
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
76 *
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
77 * \pre is_placeholder() must return false
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
78 * \return the value
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
79 */
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
80 auto get_value() const noexcept -> const std::string&;
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
81 };
348
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
82
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
83 /**
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
84 * Output the alias to the stream.
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
85 *
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
86 * \param out the output stream
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
87 * \return out
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
88 */
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
89 auto operator<<(std::ostream& out, const alias_arg&) -> std::ostream&;
348
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
90
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
91 /**
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
92 * \brief Describe a user-provided alias command.
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
93 *
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
94 * An alias command is just a command with a set of applied or placeholders
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
95 * arguments.
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
96 */
527
a88796ed040a Irccdctl: switch to Boost.Asio, closes #697
David Demelier <markand@malikania.fr>
parents: 394
diff changeset
97 class alias_command {
348
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
98 private:
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
99 std::string command_;
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
100 std::vector<alias_arg> args_;
348
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
101
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
102 public:
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
103 /**
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
104 * Create an alias command.
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
105 *
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
106 * \param command the command
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
107 * \param args the arguments
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
108 */
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
109 alias_command(std::string command, std::vector<alias_arg> args = {}) noexcept;
348
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
110
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
111 /**
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
112 * Get the command to execute.
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
113 *
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
114 * \return the command name
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
115 */
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
116 auto get_command() const noexcept -> const std::string&;
348
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
117
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
118 /**
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
119 * Get the arguments.
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
120 *
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
121 * \return the arguments
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
122 */
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
123 auto get_args() const noexcept -> const std::vector<alias_arg>&;
348
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
124 };
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
125
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
126 /**
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
127 * \brief A set of commands to execute with their arguments.
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
128 *
527
a88796ed040a Irccdctl: switch to Boost.Asio, closes #697
David Demelier <markand@malikania.fr>
parents: 394
diff changeset
129 * An alias is a composition of alias_command, typically, the user is able to
a88796ed040a Irccdctl: switch to Boost.Asio, closes #697
David Demelier <markand@malikania.fr>
parents: 394
diff changeset
130 * set an alias that execute a list of specified commands in order they are
a88796ed040a Irccdctl: switch to Boost.Asio, closes #697
David Demelier <markand@malikania.fr>
parents: 394
diff changeset
131 * defined.
348
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
132 */
527
a88796ed040a Irccdctl: switch to Boost.Asio, closes #697
David Demelier <markand@malikania.fr>
parents: 394
diff changeset
133 class alias : public std::vector<alias_command> {
348
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
134 private:
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
135 std::string name_;
348
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
136
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
137 public:
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
138 /**
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
139 * Create an alias.
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
140 *
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
141 * \param name the alias name
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
142 */
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
143 alias(std::string name) noexcept;
348
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
144
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
145 /**
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
146 * Get the alias name.
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
147 *
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
148 * \return the name
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
149 */
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
150 auto get_name() const noexcept -> const std::string&;
348
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
151 };
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
152
527
a88796ed040a Irccdctl: switch to Boost.Asio, closes #697
David Demelier <markand@malikania.fr>
parents: 394
diff changeset
153 } // !ctl
a88796ed040a Irccdctl: switch to Boost.Asio, closes #697
David Demelier <markand@malikania.fr>
parents: 394
diff changeset
154
348
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
155 } // !irccd
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
156
603
986ed3a7575d Misc: fix includes style, closes #732
David Demelier <markand@malikania.fr>
parents: 527
diff changeset
157 #endif // !IRCCD_CTL_ALIAS_HPP