Loading system/gd/packet/parser/custom_type_checker.h +2 −2 Original line number Diff line number Diff line Loading @@ -33,10 +33,10 @@ class CustomTypeChecker { template <class C, size_t (C::*)() const> struct SizeChecker {}; template <class C, Iterator<true> (*)(std::vector<C>& vec, Iterator<true> it)> template <class C, Iterator<true> (*)(C* vec, Iterator<true> it)> struct ParseChecker {}; template <class C, Iterator<false> (*)(std::vector<C>& vec, Iterator<false> it)> template <class C, Iterator<false> (*)(C* vec, Iterator<false> it)> struct ParseCheckerBigEndian {}; template <class C> Loading system/gd/packet/parser/fields/array_field.cc +7 −11 Original line number Diff line number Diff line Loading @@ -71,22 +71,18 @@ void ArrayField::GenExtractor(std::ostream& s, Size start_offset, Size end_offse s << "auto it = begin_it + field_begin;"; // Add the element size so that we will extract as many elements as we can. s << GetDataType() << " value;"; if (element_size_ != -1) { std::string type = (type_def_ != nullptr) ? type_def_->name_ : util::GetTypeForSize(element_size_); s << GetDataType() << "::iterator ret_it = value.begin();"; s << "while (it + sizeof(" << type << ") <= begin_it + field_end) {"; if (element_size_ != -1) { s << "while (it + sizeof(" << type << ") <= begin_it + field_end && ret_it < value.end()) {"; s << "*ret_it = it.extract<" << type << ">();"; s << "ret_it++;"; s << "}"; } else { s << "std::size_t ret_idx = 0;"; s << "while (it < begin_it + field_end) {"; s << "it = " << type_def_->name_ << "::ParseArray(value, &ret_idx, it);"; s << "ret_idx++;"; s << "}"; s << "while (it < begin_it + field_end && ret_it < value.end()) {"; s << "it = " << type_def_->name_ << "::Parse(ret_it, it);"; } s << "ret_it++;"; s << "}"; } void ArrayField::GenGetter(std::ostream& s, Size start_offset, Size end_offset) const { Loading system/gd/packet/parser/fields/custom_field.cc +4 −4 Original line number Diff line number Diff line Loading @@ -43,17 +43,17 @@ void CustomField::GenExtractor(std::ostream& s, Size start_offset, Size end_offs GenBounds(s, start_offset, end_offset, Size()); s << " auto subview = GetLittleEndianSubview(field_begin, field_end); "; s << "auto it = subview.begin();"; s << "std::vector<" << GetDataType() << "> vec;"; s << GetDataType() << "::Parse(vec, it);"; s << "std::unique_ptr<" << GetDataType() << "> ptr = std::make_unique<" << GetDataType() << ">();"; s << GetDataType() << "::Parse(ptr.get(), it);"; } void CustomField::GenGetter(std::ostream& s, Size start_offset, Size end_offset) const { s << "std::vector<" << GetDataType() << "> Get" << util::UnderscoreToCamelCase(GetName()) << "() const {"; s << "std::unique_ptr<" << GetDataType() << "> Get" << util::UnderscoreToCamelCase(GetName()) << "() const {"; s << "ASSERT(was_validated_);"; s << "size_t end_index = size();"; GenExtractor(s, start_offset, end_offset); s << "return vec;"; s << "return ptr;"; s << "}\n"; } Loading system/gd/packet/parser/fields/struct_field.cc +5 −5 Original line number Diff line number Diff line Loading @@ -51,15 +51,15 @@ void StructField::GenExtractor(std::ostream& s, Size start_offset, Size end_offs } s << " auto subview = GetLittleEndianSubview(field_begin, field_end); "; s << "auto it = subview.begin();"; s << "std::vector<" << GetDataType() << "> vec;"; s << GetDataType() << "::Parse(vec, it);"; s << "std::unique_ptr<" << GetDataType() << "> one = std::make_unique<" << GetDataType() << ">();"; s << GetDataType() << "::Parse(one.get(), it);"; } void StructField::GenGetter(std::ostream& s, Size start_offset, Size end_offset) const { if (size_ != -1) { s << GetDataType() << " Get" << util::UnderscoreToCamelCase(GetName()) << "() const {"; } else { s << "std::vector<" << GetDataType() << "> Get" << util::UnderscoreToCamelCase(GetName()) << "() const {"; s << "std::unique_ptr<" << GetDataType() << "> Get" << util::UnderscoreToCamelCase(GetName()) << "() const {"; } s << "ASSERT(was_validated_);"; s << "size_t end_index = size();"; Loading @@ -67,9 +67,9 @@ void StructField::GenGetter(std::ostream& s, Size start_offset, Size end_offset) GenExtractor(s, start_offset, end_offset); if (size_ != -1) { s << "return vec[0];"; s << "return *one;"; } else { s << "return vec;"; s << "return one;"; } s << "}\n"; } Loading system/gd/packet/parser/fields/vector_field.cc +3 −2 Original line number Diff line number Diff line Loading @@ -97,7 +97,6 @@ void VectorField::GenExtractor(std::ostream& s, Size start_offset, Size end_offs s << " auto subview = GetLittleEndianSubview(field_begin, field_end); "; s << "auto it = subview.begin();"; // Add the element size so that we will extract as many elements as we can. s << GetDataType() << " ret;"; if (element_size_ != -1) { std::string type = (type_def_ != nullptr) ? type_def_->name_ : util::GetTypeForSize(element_size_); Loading @@ -106,7 +105,9 @@ void VectorField::GenExtractor(std::ostream& s, Size start_offset, Size end_offs s << "}"; } else { s << "while (it < subview.end()) {"; s << "it = " << type_def_->name_ << "::Parse(ret, it);"; s << type_def_->name_ << " instance;"; s << "it = " << type_def_->name_ << "::Parse(&instance, it);"; s << "ret.push_back(instance);"; s << "}"; } } Loading Loading
system/gd/packet/parser/custom_type_checker.h +2 −2 Original line number Diff line number Diff line Loading @@ -33,10 +33,10 @@ class CustomTypeChecker { template <class C, size_t (C::*)() const> struct SizeChecker {}; template <class C, Iterator<true> (*)(std::vector<C>& vec, Iterator<true> it)> template <class C, Iterator<true> (*)(C* vec, Iterator<true> it)> struct ParseChecker {}; template <class C, Iterator<false> (*)(std::vector<C>& vec, Iterator<false> it)> template <class C, Iterator<false> (*)(C* vec, Iterator<false> it)> struct ParseCheckerBigEndian {}; template <class C> Loading
system/gd/packet/parser/fields/array_field.cc +7 −11 Original line number Diff line number Diff line Loading @@ -71,22 +71,18 @@ void ArrayField::GenExtractor(std::ostream& s, Size start_offset, Size end_offse s << "auto it = begin_it + field_begin;"; // Add the element size so that we will extract as many elements as we can. s << GetDataType() << " value;"; if (element_size_ != -1) { std::string type = (type_def_ != nullptr) ? type_def_->name_ : util::GetTypeForSize(element_size_); s << GetDataType() << "::iterator ret_it = value.begin();"; s << "while (it + sizeof(" << type << ") <= begin_it + field_end) {"; if (element_size_ != -1) { s << "while (it + sizeof(" << type << ") <= begin_it + field_end && ret_it < value.end()) {"; s << "*ret_it = it.extract<" << type << ">();"; s << "ret_it++;"; s << "}"; } else { s << "std::size_t ret_idx = 0;"; s << "while (it < begin_it + field_end) {"; s << "it = " << type_def_->name_ << "::ParseArray(value, &ret_idx, it);"; s << "ret_idx++;"; s << "}"; s << "while (it < begin_it + field_end && ret_it < value.end()) {"; s << "it = " << type_def_->name_ << "::Parse(ret_it, it);"; } s << "ret_it++;"; s << "}"; } void ArrayField::GenGetter(std::ostream& s, Size start_offset, Size end_offset) const { Loading
system/gd/packet/parser/fields/custom_field.cc +4 −4 Original line number Diff line number Diff line Loading @@ -43,17 +43,17 @@ void CustomField::GenExtractor(std::ostream& s, Size start_offset, Size end_offs GenBounds(s, start_offset, end_offset, Size()); s << " auto subview = GetLittleEndianSubview(field_begin, field_end); "; s << "auto it = subview.begin();"; s << "std::vector<" << GetDataType() << "> vec;"; s << GetDataType() << "::Parse(vec, it);"; s << "std::unique_ptr<" << GetDataType() << "> ptr = std::make_unique<" << GetDataType() << ">();"; s << GetDataType() << "::Parse(ptr.get(), it);"; } void CustomField::GenGetter(std::ostream& s, Size start_offset, Size end_offset) const { s << "std::vector<" << GetDataType() << "> Get" << util::UnderscoreToCamelCase(GetName()) << "() const {"; s << "std::unique_ptr<" << GetDataType() << "> Get" << util::UnderscoreToCamelCase(GetName()) << "() const {"; s << "ASSERT(was_validated_);"; s << "size_t end_index = size();"; GenExtractor(s, start_offset, end_offset); s << "return vec;"; s << "return ptr;"; s << "}\n"; } Loading
system/gd/packet/parser/fields/struct_field.cc +5 −5 Original line number Diff line number Diff line Loading @@ -51,15 +51,15 @@ void StructField::GenExtractor(std::ostream& s, Size start_offset, Size end_offs } s << " auto subview = GetLittleEndianSubview(field_begin, field_end); "; s << "auto it = subview.begin();"; s << "std::vector<" << GetDataType() << "> vec;"; s << GetDataType() << "::Parse(vec, it);"; s << "std::unique_ptr<" << GetDataType() << "> one = std::make_unique<" << GetDataType() << ">();"; s << GetDataType() << "::Parse(one.get(), it);"; } void StructField::GenGetter(std::ostream& s, Size start_offset, Size end_offset) const { if (size_ != -1) { s << GetDataType() << " Get" << util::UnderscoreToCamelCase(GetName()) << "() const {"; } else { s << "std::vector<" << GetDataType() << "> Get" << util::UnderscoreToCamelCase(GetName()) << "() const {"; s << "std::unique_ptr<" << GetDataType() << "> Get" << util::UnderscoreToCamelCase(GetName()) << "() const {"; } s << "ASSERT(was_validated_);"; s << "size_t end_index = size();"; Loading @@ -67,9 +67,9 @@ void StructField::GenGetter(std::ostream& s, Size start_offset, Size end_offset) GenExtractor(s, start_offset, end_offset); if (size_ != -1) { s << "return vec[0];"; s << "return *one;"; } else { s << "return vec;"; s << "return one;"; } s << "}\n"; } Loading
system/gd/packet/parser/fields/vector_field.cc +3 −2 Original line number Diff line number Diff line Loading @@ -97,7 +97,6 @@ void VectorField::GenExtractor(std::ostream& s, Size start_offset, Size end_offs s << " auto subview = GetLittleEndianSubview(field_begin, field_end); "; s << "auto it = subview.begin();"; // Add the element size so that we will extract as many elements as we can. s << GetDataType() << " ret;"; if (element_size_ != -1) { std::string type = (type_def_ != nullptr) ? type_def_->name_ : util::GetTypeForSize(element_size_); Loading @@ -106,7 +105,9 @@ void VectorField::GenExtractor(std::ostream& s, Size start_offset, Size end_offs s << "}"; } else { s << "while (it < subview.end()) {"; s << "it = " << type_def_->name_ << "::Parse(ret, it);"; s << type_def_->name_ << " instance;"; s << "it = " << type_def_->name_ << "::Parse(&instance, it);"; s << "ret.push_back(instance);"; s << "}"; } } Loading