annotate irccdctl/alias.cpp @ 862:6b65493d97cf

plugin logger: rename path configuration to file, closes #1670
author David Demelier <markand@malikania.fr>
date Thu, 25 Jul 2019 21:10:00 +0000
parents 06cc2f95f479
children 5e25439fe98d
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.cpp -- create irccdctl aliases
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
824
06cc2f95f479 misc: happy new year!
David Demelier <markand@malikania.fr>
parents: 773
diff changeset
4 * Copyright (c) 2013-2019 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
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 #include <cassert>
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 #include <regex>
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
21
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 #include "alias.hpp"
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
23
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 namespace irccd {
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
25
527
a88796ed040a Irccdctl: switch to Boost.Asio, closes #697
David Demelier <markand@malikania.fr>
parents: 511
diff changeset
26 namespace ctl {
a88796ed040a Irccdctl: switch to Boost.Asio, closes #697
David Demelier <markand@malikania.fr>
parents: 511
diff changeset
27
a88796ed040a Irccdctl: switch to Boost.Asio, closes #697
David Demelier <markand@malikania.fr>
parents: 511
diff changeset
28 alias_arg::alias_arg(std::string value)
348
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 {
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
30 assert(!value.empty());
348
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
31
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
32 if ((is_placeholder_ = std::regex_match(value, std::regex("^%\\d+$"))))
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
33 value_ = value.substr(1);
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
34 else
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
35 value_ = std::move(value);
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
36 }
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
37
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
38 auto alias_arg::is_placeholder() const noexcept -> bool
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
39 {
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
40 return is_placeholder_;
348
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
41 }
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
42
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
43 unsigned alias_arg::get_index() const noexcept
348
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
44 {
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
45 assert(is_placeholder_);
348
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
46
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
47 return std::stoi(value_);
348
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
48 }
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
49
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
50 const std::string& alias_arg::get_value() const noexcept
348
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
51 {
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
52 assert(!is_placeholder_);
348
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
53
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
54 return value_;
348
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
55 }
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
56
527
a88796ed040a Irccdctl: switch to Boost.Asio, closes #697
David Demelier <markand@malikania.fr>
parents: 511
diff changeset
57 std::ostream& operator<<(std::ostream& out, const alias_arg& arg)
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 if (arg.is_placeholder())
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
60 out << "%" << arg.get_value();
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
61 else
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
62 out << arg.get_value();
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 return out;
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
65 }
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 alias_command::alias_command(std::string command, std::vector<alias_arg> args) noexcept
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
68 : command_(std::move(command))
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
69 , args_(std::move(args))
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
70 {
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
71 }
348
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
72
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
73 auto alias_command::get_command() const noexcept -> const std::string&
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 return command_;
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
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
78 auto alias_command::get_args() const noexcept -> const std::vector<alias_arg>&
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 return args_;
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
81 }
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
82
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
83 alias::alias(std::string name) noexcept
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
84 : name_(std::move(name))
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 }
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
87
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
88 auto alias::get_name() const noexcept -> const std::string&
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
89 {
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 628
diff changeset
90 return name_;
348
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
91 }
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
92
527
a88796ed040a Irccdctl: switch to Boost.Asio, closes #697
David Demelier <markand@malikania.fr>
parents: 511
diff changeset
93 } // !ctl
a88796ed040a Irccdctl: switch to Boost.Asio, closes #697
David Demelier <markand@malikania.fr>
parents: 511
diff changeset
94
348
24b1709093e7 Irccdctl: resurrect
David Demelier <markand@malikania.fr>
parents:
diff changeset
95 } // !irccd