From 036d94f7caf1bf1d1ca98a3e0d41493b44d12270 Mon Sep 17 00:00:00 2001 From: codeboss <2422523675@qq.com> Date: Mon, 18 Nov 2024 23:33:51 +0800 Subject: [PATCH] =?UTF-8?q?validator=E6=8F=8F=E8=BF=B0=E8=BE=93=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PenetrateBasic/dispatch.cpp | 12 ++++++++++++ PenetrateBasic/dispatch.h | 2 ++ PenetrateBasic/main.cpp | 5 +++++ PenetrateBasic/validate_basic.h | 30 +++++++++++++++++++++++++++++- PenetrateBasic/validate_depict.cpp | 4 ++-- 5 files changed, 50 insertions(+), 3 deletions(-) diff --git a/PenetrateBasic/dispatch.cpp b/PenetrateBasic/dispatch.cpp index 26ab187..0c47720 100644 --- a/PenetrateBasic/dispatch.cpp +++ b/PenetrateBasic/dispatch.cpp @@ -47,6 +47,18 @@ void Dispatch::runWith(IRunbase* unit) { unit->run(); } +void dispatch::Dispatch::getValidateDepict(datas::IDataObject& object) const { + for (auto key : _cmds_validators.keys()) { + if (_cmds_map.contains(key)) { + auto alias = _cmds_map[key].first; + auto vdesc = object.newObject(); + + _cmds_validators[key]->getDepict(*vdesc); + object.setChild(alias, vdesc); + } + } +} + QList dispatch::Dispatch::allEvents() const { return _events_map.keys(); } diff --git a/PenetrateBasic/dispatch.h b/PenetrateBasic/dispatch.h index b0ced77..76699d2 100644 --- a/PenetrateBasic/dispatch.h +++ b/PenetrateBasic/dispatch.h @@ -35,6 +35,8 @@ namespace dispatch { QString getCmdDefault(quint64 addr) const; void runWith(Inlet::IRunbase* unit); + void getValidateDepict(datas::IDataObject &object) const; + QList allEvents() const; void registerEvent(quint64 addr, Inlet::IRunbase* unit); void setEventAlias(quint64 addr, const QString& alias); diff --git a/PenetrateBasic/main.cpp b/PenetrateBasic/main.cpp index f544f27..7f79d14 100644 --- a/PenetrateBasic/main.cpp +++ b/PenetrateBasic/main.cpp @@ -6,6 +6,7 @@ #include "cmds.h" #include "validate.h" #include "validate_impl.h" +#include "validate_depict.h" int vp(int c) { qDebug() << c; @@ -49,5 +50,9 @@ int main(int argc, char* argv[]) { entry(3); xvv(2); + depict::ValidateDocObject doc; + dispatch::Dispatch::unique()->getValidateDepict(doc); + qDebug() << doc.toText(); + return a.exec(); } diff --git a/PenetrateBasic/validate_basic.h b/PenetrateBasic/validate_basic.h index dd2eb89..41a729a 100644 --- a/PenetrateBasic/validate_basic.h +++ b/PenetrateBasic/validate_basic.h @@ -8,6 +8,9 @@ namespace validate { template class Validator { public: + virtual QString name() const { + return QString(); + } virtual bool check(T value) const { return false; } @@ -23,11 +26,12 @@ namespace validate { template struct ValidateTemplet; template<> struct ValidateTemplet<> { - template bool validateFor(Inlet::SignatureImpl& value_sequence) const { return true; } + + virtual void getDepict(datas::IDataObject& self_description) const {} }; template struct ValidateTemplet : public ValidateTemplet { @@ -52,6 +56,21 @@ namespace validate { return false; return ValidateTemplet::validateFor(value_sequence); } + + + virtual void getDepict(datas::IDataObject& self_description) const { + auto args_head = self_description.newObject(); + for (auto vinst : validator_list) { + auto vdesc = self_description.newObject(); + vinst->getDepict(*vdesc); + args_head->setChild(vinst->name(), vdesc); + } + + auto args_array = std::dynamic_pointer_cast(self_description.getChild(u8"ArgsList")); + args_array->append(args_head); + self_description.setChild(u8"ArgsList", args_array); + ValidateTemplet::getDepict(self_description); + } }; @@ -156,6 +175,7 @@ namespace validate { class IValidatorTemplet { public: virtual bool doValidate(Inlet::IRunbase* inst) const = 0; + virtual void getDepict(datas::IDataObject& self_description) const = 0; }; template struct ValidateImpls; @@ -174,5 +194,13 @@ namespace validate { auto valid_data = dynamic_cast*>(inst); return ValidateTemplet::validateFor(valid_data->getArgSequence()); } + + virtual void getDepict(datas::IDataObject& self_description) const { + self_description.setString(u8"ValidateFor", QString::number((qulonglong)func)); + + auto array_l = self_description.newArray(); + self_description.setChild(u8"ArgsList", array_l); + ValidateTemplet::getDepict(self_description); + } }; } diff --git a/PenetrateBasic/validate_depict.cpp b/PenetrateBasic/validate_depict.cpp index f8a04b3..08c1f99 100644 --- a/PenetrateBasic/validate_depict.cpp +++ b/PenetrateBasic/validate_depict.cpp @@ -20,11 +20,11 @@ bool ValidateDocObject::isObject() const { } std::shared_ptr ValidateDocObject::newArray() const { - return std::shared_ptr(); + return std::make_shared(); } std::shared_ptr ValidateDocObject::newObject() const { - return std::shared_ptr(); + return std::make_shared(); } std::shared_ptr ValidateDocObject::getChild(const QString& key) const {