From 36717eb59c202c3bdbc0f1750801008732c08726 Mon Sep 17 00:00:00 2001 From: Nils Date: Fri, 18 Jun 2021 22:50:21 +0200 Subject: [PATCH] Just minor code style improvements --- instance.cpp | 44 +++++++++++++++++++++----------------------- instance.hpp | 34 +++++++++++++++------------------- main.cpp | 3 --- 3 files changed, 36 insertions(+), 45 deletions(-) diff --git a/instance.cpp b/instance.cpp index 54ac904..82d4ab9 100644 --- a/instance.cpp +++ b/instance.cpp @@ -18,7 +18,7 @@ inline std::string_view operator ""_sv(const char *str, unsigned long len) { return {str, static_cast(len)}; } -static std::vector strSplit(std::string_view s, char delimiter, std::vector::size_type times = 0) { +static std::vector strSplit(std::string_view s, char delimiter, size_t times = 0) { std::vector to_return; decltype(s.size()) start = 0, finish = 0; while ((finish = s.find_first_of(delimiter, start)) != std::string_view::npos) { @@ -37,7 +37,7 @@ static std::tuple colonSplit(std::string_vie return {s, ""}; } // Split there - return {s.substr(0, colonPos+1), s.substr(colonPos+2, s.size()-1)}; + return {s.substr(0, colonPos), s.substr(colonPos+2, s.size()-1)}; } @@ -118,8 +118,8 @@ void User::parse_euid(const Event& event, NetworkInfo& netInfo) { realname = std::move(event.text); } -void User::removeChannel(const s_Channel& channel) { - std::remove(channels.begin(), channels.end(), channel); +void User::removeChannel(const u_Channel& channel) { + std::remove_if(channels.begin(), channels.end(), [&] (auto obj) {return obj.get() == channel;}); } @@ -135,7 +135,6 @@ void Channel::parse_sjoin(const Event& event, Cache& cache, NetworkInfo& netInfo mode.parse(split[2], netInfo); // Get members for (auto& raw_uuid : strSplit(event.text, ' ')) { - s_User member; // Erase leading sign if (raw_uuid.size() > UUID_len) { raw_uuid = {raw_uuid.data()+1, raw_uuid.size()-1}; @@ -145,18 +144,18 @@ void Channel::parse_sjoin(const Event& event, Cache& cache, NetworkInfo& netInfo if (res == cache.users.end()) { throw DesyncError(); } - member = *res; + u_User& member = *res; // Append member to list - members.push_back(std::move(member)); + members.push_back(member); } } -void Channel::removeMember(const s_User &member) { - std::remove(members.begin(), members.end(), member); +void Channel::removeMember(const u_User& member) { + std::remove_if(members.begin(), members.end(), [&] (auto obj) {return obj.get() == member;}); } -std::vector::iterator Cache::find_user_by_nick(std::string_view nick) { +std::vector::iterator Cache::find_user_by_nick(std::string_view nick) { for (auto it = users.begin(); ; it++) { if (it == users.end() || it->get()->nick == nick) { return it; @@ -164,7 +163,7 @@ std::vector::iterator Cache::find_user_by_nick(std::string_view nick) { } } -std::vector::iterator Cache::find_user_by_uid(const UUID& uid) { +std::vector::iterator Cache::find_user_by_uid(const UUID& uid) { for (auto it = users.begin(); ; it++) { if (it == users.end() || it->get()->uid == uid) { return it; @@ -172,7 +171,7 @@ std::vector::iterator Cache::find_user_by_uid(const UUID& uid) { } } -std::vector::iterator Cache::find_channel_by_name(std::string_view name) { +std::vector::iterator Cache::find_channel_by_name(std::string_view name) { for (auto it = channels.begin(); ; it++) { if (it == channels.end() || it->get()->name == name) { return it; @@ -183,7 +182,7 @@ std::vector::iterator Cache::find_channel_by_name(std::string_view na async::result Instance::run() { // Create connection - socket = new uvpp::tcp{s}; + socket.reset(new uvpp::tcp{s}); co_await socket->connect(addr); socket->recv_start(); @@ -231,9 +230,9 @@ async::result Instance::run() { } async::result Instance::login() { - co_await socket->send("PASS {} TS 6 :{}\n"_format(config.auth.send_password, config.server.uid.str())); + co_await socket->send("PASS {} TS 6 :{}\n"_format(config.get().auth.send_password, config.get().server.uid.str())); co_await socket->send("CAPAB :QS EX IE KLN UNKLN ENCAP TB SERVICES EUID EOPMOD MLOCK\n"_sv); - co_await socket->send("SERVER {} 1 :{}{}\n"_format(config.server.name, config.server.hidden ? "(H) " : "", config.server.description)); + co_await socket->send("SERVER {} 1 :{}{}\n"_format(config.get().server.name, config.get().server.hidden ? "(H) " : "", config.get().server.description)); co_await socket->send("SVINFO 6 3 0 :{}\n"_format(time(nullptr))); } @@ -253,7 +252,7 @@ async::result Instance::process(const Command command) { // Check password { auto given_password = strSplit(command.args, ' ', 1)[0]; - if (given_password != config.auth.accept_password) { + if (given_password != config.get().auth.accept_password) { throw ConnectionError("Server supplied wrong password during authentication"); } authed = true; @@ -274,7 +273,7 @@ async::result Instance::process(const Command command) { co_await burst(); } // Reply - co_await socket->send(":{} PONG {} {} :{}\n"_format(config.server.uid.str(), config.server.name, command.args, command.text)); + co_await socket->send(":{} PONG {} {} :{}\n"_format(config.get().server.uid.str(), config.get().server.name, command.args, command.text)); } } @@ -287,7 +286,7 @@ async::result Instance::process(const Event event) { // Fetched info else if (event.name == "005") { // Check if that 005 was for me - if (event.args.find(config.server.uid.str()) != 0) { + if (event.args.find(config.get().server.uid.str()) != 0) { co_return; } // Split the list @@ -301,7 +300,6 @@ async::result Instance::process(const Event event) { continue; } // Check if we've got the right key - std::cout << split[0] << ' ' << split[1] << std::endl; if (split[0] == "NETWORK") { netInfo.name = std::move(split[1]); netInfo.fields_received++; @@ -327,7 +325,7 @@ async::result Instance::process(const Event event) { if (event.name == "EUID") { // User connected to the network // Create user and parse event - auto user = std::make_shared(); + auto user = std::make_unique(); user->parse_euid(event, netInfo); // Append user to cache cache.users.push_back(std::move(user)); @@ -340,7 +338,7 @@ async::result Instance::process(const Event event) { } // Delete user from all channels for (auto& channel : res->get()->channels) { - channel->removeMember({*res}); + channel.get()->removeMember({*res}); } // Delete user from cache cache.users.erase(res); @@ -367,10 +365,10 @@ async::result Instance::process(const Event event) { else if (event.name == "SJOIN") { // Channel was created // Create channel and parse event - auto channel = std::make_shared(); + auto channel = std::make_unique(); channel->parse_sjoin(event, cache, netInfo); // Append channel to cache - cache.channels.push_back(channel); + cache.channels.push_back(std::move(channel)); } else if (event.name == "TOPIC" || event.name == "TB") { // Channels topic changed // Find channel in cache diff --git a/instance.hpp b/instance.hpp index 96502e5..a90287c 100644 --- a/instance.hpp +++ b/instance.hpp @@ -35,15 +35,15 @@ struct User; struct Channel; struct Cache; struct NetworkInfo; -using s_User = std::shared_ptr; -using s_Channel = std::shared_ptr; +using u_User = std::unique_ptr; +using u_Channel = std::unique_ptr; struct Event { AnyUID sender; std::string name, args, text; std::string dump() const { - return fmt::format(":{} {} {}{}\n", sender.str(), name, args, (text.empty()?"":":"+text)); + return fmt::format(":{} {} {}{}\n", sender.str(), name, args, (text.empty()?"":" :"+text)); } void parse(std::string_view str); }; @@ -61,7 +61,6 @@ struct ModeSet { std::string str; void parse(std::string_view str, NetworkInfo& netInfo); - ModeSet() {} }; struct User { @@ -74,7 +73,7 @@ struct User { std::string realhost; UUID uid; std::string realname; - std::vector channels; + std::vector> channels; Event dump() const { return Event{ @@ -84,7 +83,7 @@ struct User { }; } void parse_euid(const Event &event, NetworkInfo& netInfo); - void removeChannel(const s_Channel &channel); + void removeChannel(const u_Channel &channel); }; struct Channel { @@ -92,19 +91,19 @@ struct Channel { std::string name; ModeSet mode; std::string topic; - std::vector members; + std::vector> members; void parse_sjoin(const Event &event, Cache& cache, NetworkInfo& netInfo); - void removeMember(const s_User& member); + void removeMember(const u_User& member); }; struct Cache { - std::vector users; - std::vector channels; + std::vector users; + std::vector channels; - std::vector::iterator find_user_by_nick(std::string_view nick); - std::vector::iterator find_user_by_uid(const UUID& uid); - std::vector::iterator find_channel_by_name(std::string_view name); + std::vector::iterator find_user_by_nick(std::string_view nick); + std::vector::iterator find_user_by_uid(const UUID& uid); + std::vector::iterator find_channel_by_name(std::string_view name); }; struct NetworkInfo { @@ -134,10 +133,10 @@ struct NetworkInfo { }; class Instance { - uvpp::loop_service &s; - const Config& config; + std::reference_wrapper s; + std::reference_wrapper config; uvpp::Addr addr; - uvpp::tcp *socket = nullptr; + std::unique_ptr socket; Config::Server connected_server; NetworkInfo netInfo; Cache cache; @@ -149,9 +148,6 @@ public: Instance(uvpp::loop_service &s, const Config& config) : s(s), config(config) { addr = uvpp::make_ipv4(config.connection.addr, config.connection.port); } - ~Instance() { - if (socket) delete socket; - } async::result run(); async::result login(); diff --git a/main.cpp b/main.cpp index c0940fb..88cee14 100644 --- a/main.cpp +++ b/main.cpp @@ -3,9 +3,6 @@ #include #include -#include -#include -#include using namespace std;