Updating the deploy algorithm
This commit is contained in:
parent
a634396845
commit
c3188cd9e5
@ -17,7 +17,8 @@ namespace base64 {
|
||||
* @param input The input string to Base64-encode
|
||||
* @return A Base64-encoded version of the encoded string
|
||||
*/
|
||||
inline std::string encode(const std::string& input) { return encode(input.c_str(), (unsigned long) input.size()); }
|
||||
inline std::string encode(const std::string& input) { return encode(input.data(), (unsigned long) input.size()); }
|
||||
inline std::string encode(const std::string_view& input) { return encode(input.data(), input.size()); }
|
||||
|
||||
|
||||
/**
|
||||
@ -32,7 +33,8 @@ namespace base64 {
|
||||
* @param input The input string to decode
|
||||
* @return A string (binary) that represents the Base64-decoded data of the input
|
||||
*/
|
||||
inline std::string decode(const std::string& input) { return decode(input.c_str(), input.size()); }
|
||||
inline std::string decode(const std::string& input) { return decode(input.data(), input.size()); }
|
||||
inline std::string decode(const std::string_view& input) { return decode(input.data(), input.size()); }
|
||||
|
||||
//A–Z, a–z, 0–9, + und /
|
||||
inline bool validate(const std::string& input) {
|
||||
|
@ -39,18 +39,22 @@
|
||||
#include <openssl/sha.h>
|
||||
|
||||
#define DECLARE_DIGEST(name, method, digestLength) \
|
||||
inline std::string name(const std::string& input) { \
|
||||
inline std::string name(const std::string_view& input) { \
|
||||
u_char buffer[digestLength]; \
|
||||
method((u_char*) input.data(), input.length(), buffer); \
|
||||
return std::string((const char*) buffer, (size_t) digestLength); \
|
||||
return std::string{(const char*) buffer, (size_t) digestLength}; \
|
||||
} \
|
||||
\
|
||||
inline std::string name(const std::string& input) { \
|
||||
return name(std::string_view{input}); \
|
||||
} \
|
||||
\
|
||||
inline std::string name(const char* input, ssize_t length = -1) { \
|
||||
if(length == -1) length = strlen(input); \
|
||||
return name(std::string(input, (size_t) length)); \
|
||||
return name(std::string_view{input, (size_t) length}); \
|
||||
} \
|
||||
\
|
||||
inline void name(const char* input, size_t length, uint8_t* result) { \
|
||||
\
|
||||
inline void name(const char* input, size_t length, uint8_t* result) { \
|
||||
method((u_char*) input, length, result); \
|
||||
}
|
||||
#endif
|
||||
|
@ -80,7 +80,7 @@ void UnorderedPacketLossCalculator::reset_offsets() {
|
||||
|
||||
void CommandPacketLossCalculator::packet_send(uint32_t packet_id) {
|
||||
if(packet_id > this->packet_history_offset) {
|
||||
assert(packet_id - 1 == this->packet_history_offset); /* the method will only be called with an incrementing packet id */
|
||||
assert(packet_id - 1 == this->packet_history_offset || this->packet_history_offset == 0); /* the method will only be called with an incrementing packet id */
|
||||
/* newly send packet */
|
||||
auto lost = std::exchange(this->packet_ack_counts[packet_id % CommandPacketLossCalculator::packet_ack_counts_length], 1);
|
||||
this->lost_packets_ += lost;
|
||||
|
@ -7,17 +7,14 @@
|
||||
|
||||
using namespace ts;
|
||||
|
||||
command_bulk command_parser::empty_bulk{std::string::npos, 0, ""};
|
||||
|
||||
bool command_parser::parse(bool command) {
|
||||
this->data = this->_command_memory;
|
||||
this->index = std::string::npos;
|
||||
this->bulk_index = std::string::npos;
|
||||
|
||||
size_t index{0}, findex;
|
||||
if(command) {
|
||||
index = this->_command_memory.find(' ', index);
|
||||
index = this->data.find(' ', index);
|
||||
if(index == std::string::npos) {
|
||||
this->command_type = this->_command_memory;
|
||||
this->command_type = this->data;
|
||||
return true;
|
||||
} else {
|
||||
this->command_type = this->data.substr(0, index);
|
||||
@ -26,11 +23,10 @@ bool command_parser::parse(bool command) {
|
||||
index++;
|
||||
}
|
||||
|
||||
this->_bulks.reserve(4);
|
||||
while(index < this->_command_memory.size()) {
|
||||
findex = this->_command_memory.find('|', index);
|
||||
while(index < this->data.size()) {
|
||||
findex = this->data.find('|', index);
|
||||
if(findex == std::string::npos)
|
||||
findex = this->_command_memory.size();
|
||||
findex = this->data.size();
|
||||
|
||||
this->_bulks.emplace_back(this->_bulks.size() - 1, index, this->data.substr(index, findex - index));
|
||||
index = findex + 1;
|
||||
@ -38,6 +34,14 @@ bool command_parser::parse(bool command) {
|
||||
return true;
|
||||
}
|
||||
|
||||
std::string_view command_parser::payload_view(size_t bulk_index) const noexcept {
|
||||
if(bulk_index >= this->bulk_count())
|
||||
return {};
|
||||
|
||||
auto bulk = this->bulk(bulk_index);
|
||||
return this->data.substr(bulk.command_character_index());
|
||||
}
|
||||
|
||||
std::optional<size_t> command_parser::next_bulk_containing(const std::string_view &key, size_t start) const {
|
||||
if(start >= this->bulk_count()) return std::nullopt;
|
||||
|
||||
|
@ -3,6 +3,7 @@
|
||||
#include <string>
|
||||
#include <cstddef>
|
||||
#include <vector>
|
||||
#include <deque>
|
||||
#include <optional>
|
||||
#include <string_view>
|
||||
|
||||
@ -57,7 +58,7 @@ namespace ts {
|
||||
[[nodiscard]] inline std::string_view value_raw(const std::string_view& key) const {
|
||||
bool tmp;
|
||||
auto result = this->value_raw(key, tmp);
|
||||
if(!tmp) throw command_value_missing_exception{index, std::string{key}};
|
||||
if(!tmp) throw command_value_missing_exception{this->bulk_index, std::string{key}};
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -88,7 +89,12 @@ namespace ts {
|
||||
static_assert(converter<T>::supported, "Target type isn't supported!");
|
||||
static_assert(!converter<T>::supported || converter<T>::from_string_view, "Target type dosn't support parsing");
|
||||
|
||||
return converter<T>::from_string_view(this->value(key));
|
||||
auto value = this->value(key);
|
||||
try {
|
||||
return converter<T>::from_string_view(value);
|
||||
} catch (std::exception& ex) {
|
||||
throw command_value_cast_failed{this->key_command_character_index(key), std::string{key}, value, typeid(T)};
|
||||
}
|
||||
}
|
||||
|
||||
[[nodiscard]] inline size_t command_character_index() const { return this->abs_index; }
|
||||
@ -98,10 +104,10 @@ namespace ts {
|
||||
return this->abs_index + begin;
|
||||
}
|
||||
protected:
|
||||
command_string_parser(size_t index, size_t abs_index, std::string_view data) : index{index}, abs_index{abs_index}, data{data} {}
|
||||
command_string_parser(size_t bulk_index, size_t abs_index, std::string_view data) : bulk_index{bulk_index}, abs_index{abs_index}, data{data} {}
|
||||
|
||||
size_t abs_index{};
|
||||
size_t index{};
|
||||
size_t bulk_index{};
|
||||
std::string_view data{};
|
||||
};
|
||||
}
|
||||
@ -148,8 +154,10 @@ namespace ts {
|
||||
|
||||
[[nodiscard]] inline const std::string_view& identifier() const noexcept { return this->command_type; }
|
||||
[[nodiscard]] inline size_t bulk_count() const noexcept { return this->_bulks.size(); }
|
||||
[[nodiscard]] inline const command_bulk& bulk(size_t index) const noexcept {
|
||||
if(this->_bulks.size() <= index) return empty_bulk;
|
||||
[[nodiscard]] inline const command_bulk& bulk(size_t index) const {
|
||||
if(this->_bulks.size() <= index)
|
||||
throw command_bulk_index_out_of_bounds_exception{index};
|
||||
|
||||
return this->_bulks[index];
|
||||
}
|
||||
|
||||
@ -184,15 +192,14 @@ namespace ts {
|
||||
} while(true);
|
||||
}
|
||||
|
||||
[[nodiscard]] const std::vector<command_bulk>& bulks() const { return this->_bulks; }
|
||||
[[nodiscard]] const std::deque<command_bulk>& bulks() const { return this->_bulks; }
|
||||
|
||||
[[nodiscard]] std::string_view payload_view(size_t bulk_index) const noexcept;
|
||||
[[nodiscard]] std::optional<size_t> next_bulk_containing(const std::string_view& /* key */, size_t /* bulk offset */) const;
|
||||
private:
|
||||
static command_bulk empty_bulk;
|
||||
|
||||
const std::string _command_memory{};
|
||||
std::string_view command_type{};
|
||||
std::vector<command_bulk> _bulks{};
|
||||
std::deque<command_bulk> _bulks{};
|
||||
};
|
||||
|
||||
class command_builder_bulk {
|
||||
|
@ -1,26 +1,51 @@
|
||||
#pragma once
|
||||
|
||||
#include <utility>
|
||||
|
||||
namespace ts {
|
||||
class command_exception : public std::exception {};
|
||||
|
||||
class command_casted_exception : public command_exception { };
|
||||
class command_cannot_uncast_exception : public command_exception { };
|
||||
class command_bulk_exceed_index_exception : public command_exception { };
|
||||
class command_bulk_index_out_of_bounds_exception : public command_exception {
|
||||
public:
|
||||
explicit command_bulk_index_out_of_bounds_exception(size_t index) : _index(index) { }
|
||||
|
||||
[[nodiscard]] inline size_t index() const { return this->_index; }
|
||||
private:
|
||||
size_t _index;
|
||||
};
|
||||
|
||||
class command_value_missing_exception : public command_exception {
|
||||
public:
|
||||
command_value_missing_exception(size_t index, std::string key) : _index(index), _key(move(key)) { }
|
||||
|
||||
inline size_t index() const { return this->_index; }
|
||||
inline std::string key() const { return this->_key; }
|
||||
[[nodiscard]] inline size_t bulk_index() const { return this->_index; }
|
||||
[[nodiscard]] inline std::string key() const { return this->_key; }
|
||||
private:
|
||||
size_t _index;
|
||||
std::string _key;
|
||||
};
|
||||
|
||||
class command_malformed_exception : public command_exception {
|
||||
public:
|
||||
command_malformed_exception(size_t index) : _index(index) {}
|
||||
inline size_t index() const { return this->_index; }
|
||||
explicit command_malformed_exception(size_t index) : _index(index) {}
|
||||
[[nodiscard]] inline size_t index() const { return this->_index; }
|
||||
private:
|
||||
size_t _index;
|
||||
};
|
||||
|
||||
class command_value_cast_failed : public command_exception {
|
||||
public:
|
||||
command_value_cast_failed(size_t index, std::string key, std::string value, const std::type_info& target_type)
|
||||
: index_{index}, key_{std::move(key)}, value_{std::move(value)}, target_type_{target_type} {}
|
||||
|
||||
[[nodiscard]] inline size_t index() const { return this->index_; }
|
||||
[[nodiscard]] inline const std::string& key() const { return this->key_; }
|
||||
[[nodiscard]] inline const std::string& value() const { return this->value_; }
|
||||
[[nodiscard]] inline const std::type_info& target_type() const { return this->target_type_; }
|
||||
private:
|
||||
size_t index_;
|
||||
std::string key_;
|
||||
std::string value_;
|
||||
const std::type_info& target_type_;
|
||||
};
|
||||
}
|
@ -49,6 +49,7 @@ namespace sql {
|
||||
else
|
||||
result += "OR IGNORE ";
|
||||
}
|
||||
result += "INTO ";
|
||||
|
||||
result += this->table_name + " (";
|
||||
//"INSERT INTO " + this->table_name + " ("
|
||||
|
Loading…
Reference in New Issue
Block a user