From fe721162acdf79afe32a912960642628a3ba5288 Mon Sep 17 00:00:00 2001
From: codeboss <2422523675@qq.com>
Date: Sat, 16 Nov 2024 21:37:42 +0800
Subject: [PATCH] Rename
---
PenetrateBasic/PenetrateBasic.vcxproj | 2 +
PenetrateBasic/PenetrateBasic.vcxproj.filters | 6 +
PenetrateBasic/data_types.h | 37 +++++--
PenetrateBasic/validate_impl.h | 95 ++++++++++++++++
PenetrateBasic/validation.h | 104 ++++++++----------
5 files changed, 180 insertions(+), 64 deletions(-)
create mode 100644 PenetrateBasic/validate_impl.h
diff --git a/PenetrateBasic/PenetrateBasic.vcxproj b/PenetrateBasic/PenetrateBasic.vcxproj
index 37024de..381ea67 100644
--- a/PenetrateBasic/PenetrateBasic.vcxproj
+++ b/PenetrateBasic/PenetrateBasic.vcxproj
@@ -102,6 +102,8 @@
+
+
diff --git a/PenetrateBasic/PenetrateBasic.vcxproj.filters b/PenetrateBasic/PenetrateBasic.vcxproj.filters
index a7a99b8..01c677c 100644
--- a/PenetrateBasic/PenetrateBasic.vcxproj.filters
+++ b/PenetrateBasic/PenetrateBasic.vcxproj.filters
@@ -49,5 +49,11 @@
Header Files
+
+ Header Files
+
+
+ Header Files
+
\ No newline at end of file
diff --git a/PenetrateBasic/data_types.h b/PenetrateBasic/data_types.h
index 309b411..a879b8e 100644
--- a/PenetrateBasic/data_types.h
+++ b/PenetrateBasic/data_types.h
@@ -1,31 +1,52 @@
#pragma once
#include
+#include
namespace datas {
-
class IDataArray;
class IDataObject {
public:
virtual ~IDataObject() = default;
- virtual bool isValid() const = 0;
+ /**
+ * @brief 是否空对象.
+ *
+ * \return 结果
+ */
+ virtual bool isEmpty() const = 0;
+ /**
+ * @brief 当前对象是否是Array.
+ *
+ * \return 结果
+ */
virtual bool isArray() const = 0;
- virtual IDataArray toArray() = 0;
+ /**
+ * @brief 转换成Array.
+ *
+ * \return
+ */
+ virtual std::shared_ptr toArray() = 0;
virtual bool getBool(const QString& key) const = 0;
virtual double getDouble(const QString& key) const = 0;
virtual int32_t getInt32(const QString& key) const = 0;
virtual int64_t getInt64(const QString& key) const = 0;
virtual QString getString(const QString& key) const = 0;
- virtual IDataObject getObject(const QString& key) const = 0;
+ /**
+ * @brief 获取指定对象,若无指定对象则返回一个不关联的空对象.
+ *
+ * \param key
+ * \return
+ */
+ virtual std::shared_ptr getObject(const QString& key) const = 0;
virtual void setBool(const QString& key, bool value) = 0;
virtual void setDouble(const QString& key, double value) = 0;
virtual void setInt32(const QString& key, int32_t value) = 0;
virtual void setInt64(const QString& key, int64_t value) = 0;
virtual void setString(const QString& key, const QString& value) = 0;
- virtual void setObject(const QString& key, IDataObject value) = 0;
+ virtual void setObject(const QString& key, std::shared_ptr value) = 0;
virtual QString toText() const = 0;
virtual void loadFrom(const QString &text) = 0;
@@ -37,9 +58,9 @@ namespace datas {
virtual bool isValid() const = 0;
virtual int32_t size() const = 0;
- virtual IDataObject get(int index) const = 0;
- virtual void insert(int index, IDataObject value) = 0;
- virtual void append(IDataObject value) = 0;
+ virtual std::shared_ptr get(int index) const = 0;
+ virtual void insert(int index, std::shared_ptr value) = 0;
+ virtual void append(std::shared_ptr value) = 0;
};
diff --git a/PenetrateBasic/validate_impl.h b/PenetrateBasic/validate_impl.h
new file mode 100644
index 0000000..c07840d
--- /dev/null
+++ b/PenetrateBasic/validate_impl.h
@@ -0,0 +1,95 @@
+#pragma once
+
+#include "validation.h"
+
+namespace impls {
+ template
+ class DoubleLimit : public validate::Validator {
+ private:
+ QString _name_store;
+ double _limit_max, _limit_min;
+ int64_t _limit_max_times = 0, _limit_min_times = 0;
+
+ public:
+ DoubleLimit(const QString& name, double min, double max)
+ : _name_store(name), _limit_max(max), _limit_min(min) {
+ _limit_min_times = static_cast(min * precision) - min_equal;
+ _limit_max_times = static_cast(max * precision) + max_equal;
+ }
+
+
+ virtual bool check(double value) const {
+ auto value_times = static_cast(value * precision);
+ return _limit_min_times < value_times && value_times < _limit_max_times;
+ }
+
+ virtual void getDepict(datas::IDataObject& self_description) {
+ self_description.setString(u8"ValidatorName", _name_store);
+ self_description.setString(u8"ValueType", u8"Double");
+ self_description.setInt64(u8"Precision", precision);
+ self_description.setDouble(u8"MinValue", _limit_min);
+ self_description.setDouble(u8"MaxValue", _limit_max);
+
+ auto description = QString(u8"%1 %3 value %4 %2").arg(_limit_min).arg(_limit_max);
+ description = description.arg(min_equal ? u8"<=" : u8"<", max_equal ? u8"<=" : u8"<");
+ self_description.setString(u8"Description", description);
+ }
+ };
+
+ template
+ class IntegerLimit : public validate::Validator {
+ private:
+ QString _name_store;
+ int64_t _limit_max, _limit_min;
+ int64_t _limit_max_times = 0, _limit_min_times = 0;
+
+ public:
+ IntegerLimit(const QString& name, int64_t min, int64_t max)
+ : _name_store(name), _limit_min(min), _limit_max(max) {
+ _limit_max_times = _limit_max + max_equal;
+ _limit_min_times = _limit_min - min_equal;
+ }
+
+
+ virtual bool check(int64_t value) const {
+ return _limit_min_times < value && value < _limit_max_times;
+ }
+
+ virtual void getDepict(datas::IDataObject& self_description) {
+ self_description.setString(u8"ValidatorName", _name_store);
+ self_description.setString(u8"ValueType", u8"Integer");
+ self_description.setInt64(u8"MinValue", _limit_min);
+ self_description.setInt64(u8"MaxValue", _limit_max);
+
+ auto description = QString(u8"%1 %3 value %4 %2").arg(_limit_min).arg(_limit_max);
+ description = description.arg(min_equal ? u8"<=" : u8"<", max_equal ? u8"<=" : u8"<");
+ self_description.setString(u8"Description", description);
+ }
+ };
+
+ class EnumsValidator : public validate::Validator {
+ private:
+ QString _name_store;
+ QList _enum_options;
+
+ public:
+ EnumsValidator(const QString& name, const QList& list)
+ :_name_store(name), _enum_options(list) { }
+
+ virtual bool check(int32_t value) const {
+ return _enum_options.contains(value);
+ }
+
+ virtual void getDepict(datas::IDataObject& self_description) {
+ self_description.setString(u8"ValidatorName", _name_store);
+ self_description.setString(u8"ValueType", u8"Enum");
+
+ QStringList options;
+ std::transform(_enum_options.begin(), _enum_options.end(), std::back_inserter(options), [](int32_t v) {return QString::number(v); });
+ self_description.setString(u8"Values", options.join(u8","));
+ self_description.setString(u8"Description", QString("value ∈ { %1 }").arg(options.join(u8",")));
+ }
+ };
+
+
+}
diff --git a/PenetrateBasic/validation.h b/PenetrateBasic/validation.h
index bc2f359..e3bfdc0 100644
--- a/PenetrateBasic/validation.h
+++ b/PenetrateBasic/validation.h
@@ -4,37 +4,34 @@
#include
#include
#include
+#include "data_types.h"
namespace validate {
- template class validator {
+ template class Validator {
public:
virtual bool check(T value) const {
return false;
}
+ virtual void getDepict(datas::IDataObject& self_description) { }
};
- template class validator_receiver {
+ template class ValidatorReceiver {
public:
- virtual void append(validator inst) { }
+ virtual void append(Validator inst) { }
};
- template struct check_delegation;
- template<> struct check_delegation<> {
-
- void prest() {
- std::cout << "ends" << std::endl;
- }
- };
+ template struct ValidateTemplet;
+ template<> struct ValidateTemplet<> { };
template
- struct check_delegation : public check_delegation {
+ struct ValidateTemplet : public ValidateTemplet {
private:
- QList> validator_list;
+ QList> validator_list;
public:
- void add(validator vinst) {
+ void add(Validator vinst) {
validator_list << vinst;
}
bool check(head_type value) {
@@ -43,48 +40,43 @@ namespace validate {
return false;
return true;
}
-
- void prest() {
- std::cout << "[-]" << validator_list.size() << std::endl;
- check_delegation::prest();
- }
};
- template struct elm_pos;
+ template struct ElmPos;
template
- struct elm_pos<0, check_delegation> {
+ struct ElmPos<0, ValidateTemplet> {
using value_type = head_type;
- using templet_type = check_delegation;
+ using templet_type = ValidateTemplet;
};
template
- struct elm_pos> {
- using value_type = typename elm_pos>::value_type;
- using templet_type = typename elm_pos>::templet_type;
+ struct ElmPos> {
+ using value_type = typename ElmPos>::value_type;
+ using templet_type = typename ElmPos>::templet_type;
};
template
- void __validator_insert_helper(check_delegation& target,
- validator>::value_type> inst) {
- using templet_type = typename elm_pos>::templet_type;
+ void __validator_insert_helper(ValidateTemplet& target,
+ Validator>::value_type> inst) {
+ using templet_type = typename ElmPos>::templet_type;
target.templet_type::add(inst);
}
- template class slice_position;
+ template class SlicePosition;
- template class slice_validator : public validator {
+ template class SliceValidator : public Validator {
private:
std::function _proc_conv;
- validator _sub_validator;
+ Validator _sub_validator;
public:
- slice_validator(std::function proc, validator vinst)
+ SliceValidator(std::function proc, Validator vinst)
: _proc_conv(proc), _sub_validator(vinst) { }
virtual bool check(S value) const {
@@ -92,68 +84,68 @@ namespace validate {
return _sub_validator.check(t_value);
}
};
- template class args_position
- : public validator_receiver>::value_type> {
+ template class ArgsPosition
+ : public ValidatorReceiver>::value_type> {
public:
- using param_type = typename elm_pos>::value_type;
+ using param_type = typename ElmPos>::value_type;
- args_position(check_delegation& target) :_templet_bind(target) { }
+ ArgsPosition(ValidateTemplet& target) :_templet_bind(target) { }
- args_position& operator&(validator vinst) {
+ ArgsPosition& operator&(Validator vinst) {
append(vinst);
return *this;
}
template
- slice_position>
- slice(std::function slice_fun) {
- return slice_position>(*this, slice_fun);
+ SlicePosition>
+ slice(std::function slice_fun) {
+ return SlicePosition>(*this, slice_fun);
}
- // validator_receiver
- virtual void append(validator inst) {
+ // ValidatorReceiver
+ virtual void append(Validator inst) {
__validator_insert_helper(_templet_bind, inst);
}
private:
- check_delegation& _templet_bind;
+ ValidateTemplet& _templet_bind;
};
template
- class slice_position> : public validator_receiver {
+ class SlicePosition> : public ValidatorReceiver {
public:
- slice_position(validator_receiver& host, std::function func)
+ SlicePosition(ValidatorReceiver& host, std::function func)
:_conv_func(func), _prev_bind(host) { }
- slice_position>& operator&(validator vinst) {
+ SlicePosition>& operator&(Validator vinst) {
append(vinst);
return *this;
}
template
- slice_position>
- slice(std::function slice_fun) {
- return slice_position>(*this, slice_fun);
+ SlicePosition>
+ slice(std::function slice_fun) {
+ return SlicePosition>(*this, slice_fun);
}
- // validator_receiver
- virtual void append(validator inst) {
- slice_validator mid_validator(_conv_func, inst);
+ // ValidatorReceiver
+ virtual void append(Validator inst) {
+ SliceValidator mid_validator(_conv_func, inst);
_prev_bind.append(mid_validator);
}
private:
std::function _conv_func;
- validator_receiver& _prev_bind;
+ ValidatorReceiver& _prev_bind;
};
- template struct validate_helper;
+ template struct ValidateHelper;
template
- struct validate_helper : public check_delegation {
- template args_position pos() {
- return args_position(*this);
+ struct ValidateHelper : public ValidateTemplet {
+ template ArgsPosition pos() {
+ return ArgsPosition(*this);
}
};