Commit 97198c270176f99939bf6293a7df5c5d1a121e77
1 parent
c9f5253c
Refactor `QPDFNameTreeObjectHelper` and `QPDFNumberTreeObjectHelper` constructor…
…s and `Members` structure - Simplified `Members` implementation by inlining into `NNTree` context. - Replaced `std::shared_ptr<Members>` with `std::make_shared` for improved clarity and usage consistency. - Updated method calls to directly access `Members`' `impl`. - Improved maintainability and alignment with modern C++ practices.
Showing
3 changed files
with
63 additions
and
84 deletions
include/qpdf/QPDFNameTreeObjectHelper.hh
| @@ -176,23 +176,7 @@ class QPDF_DLL_CLASS QPDFNameTreeObjectHelper: public QPDFObjectHelper | @@ -176,23 +176,7 @@ class QPDF_DLL_CLASS QPDFNameTreeObjectHelper: public QPDFObjectHelper | ||
| 176 | void setSplitThreshold(int); | 176 | void setSplitThreshold(int); |
| 177 | 177 | ||
| 178 | private: | 178 | private: |
| 179 | - class QPDF_DLL_PRIVATE Members | ||
| 180 | - { | ||
| 181 | - friend class QPDFNameTreeObjectHelper; | ||
| 182 | - | ||
| 183 | - public: | ||
| 184 | - ~Members() = default; | ||
| 185 | - | ||
| 186 | - private: | ||
| 187 | - Members( | ||
| 188 | - QPDFObjectHandle& oh, | ||
| 189 | - QPDF&, | ||
| 190 | - std::function<bool(QPDFObjectHandle const&)> value_validator, | ||
| 191 | - bool auto_repair); | ||
| 192 | - Members(Members const&) = delete; | ||
| 193 | - | ||
| 194 | - std::shared_ptr<NNTreeImpl> impl; | ||
| 195 | - }; | 179 | + class QPDF_DLL_PRIVATE Members; |
| 196 | 180 | ||
| 197 | std::shared_ptr<Members> m; | 181 | std::shared_ptr<Members> m; |
| 198 | }; | 182 | }; |
include/qpdf/QPDFNumberTreeObjectHelper.hh
| @@ -192,24 +192,7 @@ class QPDF_DLL_CLASS QPDFNumberTreeObjectHelper: public QPDFObjectHelper | @@ -192,24 +192,7 @@ class QPDF_DLL_CLASS QPDFNumberTreeObjectHelper: public QPDFObjectHelper | ||
| 192 | void setSplitThreshold(int); | 192 | void setSplitThreshold(int); |
| 193 | 193 | ||
| 194 | private: | 194 | private: |
| 195 | - class QPDF_DLL_PRIVATE Members | ||
| 196 | - { | ||
| 197 | - friend class QPDFNumberTreeObjectHelper; | ||
| 198 | - typedef QPDFNumberTreeObjectHelper::numtree_number numtree_number; | ||
| 199 | - | ||
| 200 | - public: | ||
| 201 | - ~Members() = default; | ||
| 202 | - | ||
| 203 | - private: | ||
| 204 | - Members( | ||
| 205 | - QPDFObjectHandle& oh, | ||
| 206 | - QPDF&, | ||
| 207 | - std::function<bool(QPDFObjectHandle const&)> value_validator, | ||
| 208 | - bool auto_repair); | ||
| 209 | - Members(Members const&) = delete; | ||
| 210 | - | ||
| 211 | - std::shared_ptr<NNTreeImpl> impl; | ||
| 212 | - }; | 195 | + class QPDF_DLL_PRIVATE Members; |
| 213 | 196 | ||
| 214 | std::shared_ptr<Members> m; | 197 | std::shared_ptr<Members> m; |
| 215 | }; | 198 | }; |
libqpdf/NNTree.cc
| @@ -851,25 +851,30 @@ NNTreeImpl::validate(bool a_repair) | @@ -851,25 +851,30 @@ NNTreeImpl::validate(bool a_repair) | ||
| 851 | return true; | 851 | return true; |
| 852 | } | 852 | } |
| 853 | 853 | ||
| 854 | -QPDFNameTreeObjectHelper::~QPDFNameTreeObjectHelper() // NOLINT (modernize-use-equals-default) | ||
| 855 | -{ | ||
| 856 | - // Must be explicit and not inline -- see QPDF_DLL_CLASS in README-maintainer. For this specific | ||
| 857 | - // class, see github issue #745. | ||
| 858 | -} | 854 | +class QPDFNameTreeObjectHelper::Members |
| 855 | +{ | ||
| 856 | + public: | ||
| 857 | + Members( | ||
| 858 | + QPDFObjectHandle& oh, | ||
| 859 | + QPDF& q, | ||
| 860 | + std::function<bool(QPDFObjectHandle const&)> value_validator, | ||
| 861 | + bool auto_repair) : | ||
| 862 | + impl(q, oh, ::ot_string, value_validator, auto_repair) | ||
| 863 | + { | ||
| 864 | + } | ||
| 865 | + Members(Members const&) = delete; | ||
| 866 | + ~Members() = default; | ||
| 859 | 867 | ||
| 860 | -QPDFNameTreeObjectHelper::Members::Members( | ||
| 861 | - QPDFObjectHandle& oh, | ||
| 862 | - QPDF& q, | ||
| 863 | - std::function<bool(QPDFObjectHandle const&)> value_validator, | ||
| 864 | - bool auto_repair) : | ||
| 865 | - impl(std::make_shared<NNTreeImpl>(q, oh, ::ot_string, value_validator, auto_repair)) | ||
| 866 | -{ | ||
| 867 | -} | 868 | + NNTreeImpl impl; |
| 869 | +}; | ||
| 870 | + | ||
| 871 | +// Must be explicit and not inline -- see QPDF_DLL_CLASS in README-maintainer. For this specific | ||
| 872 | +// class, see github issue #745. | ||
| 873 | +QPDFNameTreeObjectHelper::~QPDFNameTreeObjectHelper() = default; | ||
| 868 | 874 | ||
| 869 | QPDFNameTreeObjectHelper::QPDFNameTreeObjectHelper(QPDFObjectHandle oh, QPDF& q, bool auto_repair) : | 875 | QPDFNameTreeObjectHelper::QPDFNameTreeObjectHelper(QPDFObjectHandle oh, QPDF& q, bool auto_repair) : |
| 870 | - QPDFObjectHelper(oh), | ||
| 871 | - m(new Members( | ||
| 872 | - oh, q, [](QPDFObjectHandle const& o) -> bool { return static_cast<bool>(o); }, auto_repair)) | 876 | + QPDFNameTreeObjectHelper( |
| 877 | + oh, q, [](QPDFObjectHandle const& o) -> bool { return static_cast<bool>(o); }, auto_repair) | ||
| 873 | { | 878 | { |
| 874 | } | 879 | } |
| 875 | 880 | ||
| @@ -879,7 +884,7 @@ QPDFNameTreeObjectHelper::QPDFNameTreeObjectHelper( | @@ -879,7 +884,7 @@ QPDFNameTreeObjectHelper::QPDFNameTreeObjectHelper( | ||
| 879 | std::function<bool(QPDFObjectHandle const&)> value_validator, | 884 | std::function<bool(QPDFObjectHandle const&)> value_validator, |
| 880 | bool auto_repair) : | 885 | bool auto_repair) : |
| 881 | QPDFObjectHelper(oh), | 886 | QPDFObjectHelper(oh), |
| 882 | - m(new Members(oh, q, value_validator, auto_repair)) | 887 | + m(std::make_shared<Members>(oh, q, value_validator, auto_repair)) |
| 883 | { | 888 | { |
| 884 | } | 889 | } |
| 885 | 890 | ||
| @@ -966,39 +971,39 @@ QPDFNameTreeObjectHelper::iterator::remove() | @@ -966,39 +971,39 @@ QPDFNameTreeObjectHelper::iterator::remove() | ||
| 966 | QPDFNameTreeObjectHelper::iterator | 971 | QPDFNameTreeObjectHelper::iterator |
| 967 | QPDFNameTreeObjectHelper::begin() const | 972 | QPDFNameTreeObjectHelper::begin() const |
| 968 | { | 973 | { |
| 969 | - return {std::make_shared<NNTreeIterator>(m->impl->begin())}; | 974 | + return {std::make_shared<NNTreeIterator>(m->impl.begin())}; |
| 970 | } | 975 | } |
| 971 | 976 | ||
| 972 | QPDFNameTreeObjectHelper::iterator | 977 | QPDFNameTreeObjectHelper::iterator |
| 973 | QPDFNameTreeObjectHelper::end() const | 978 | QPDFNameTreeObjectHelper::end() const |
| 974 | { | 979 | { |
| 975 | - return {std::make_shared<NNTreeIterator>(m->impl->end())}; | 980 | + return {std::make_shared<NNTreeIterator>(m->impl.end())}; |
| 976 | } | 981 | } |
| 977 | 982 | ||
| 978 | QPDFNameTreeObjectHelper::iterator | 983 | QPDFNameTreeObjectHelper::iterator |
| 979 | QPDFNameTreeObjectHelper::last() const | 984 | QPDFNameTreeObjectHelper::last() const |
| 980 | { | 985 | { |
| 981 | - return {std::make_shared<NNTreeIterator>(m->impl->last())}; | 986 | + return {std::make_shared<NNTreeIterator>(m->impl.last())}; |
| 982 | } | 987 | } |
| 983 | 988 | ||
| 984 | QPDFNameTreeObjectHelper::iterator | 989 | QPDFNameTreeObjectHelper::iterator |
| 985 | QPDFNameTreeObjectHelper::find(std::string const& key, bool return_prev_if_not_found) | 990 | QPDFNameTreeObjectHelper::find(std::string const& key, bool return_prev_if_not_found) |
| 986 | { | 991 | { |
| 987 | - auto i = m->impl->find(QPDFObjectHandle::newUnicodeString(key), return_prev_if_not_found); | 992 | + auto i = m->impl.find(QPDFObjectHandle::newUnicodeString(key), return_prev_if_not_found); |
| 988 | return {std::make_shared<NNTreeIterator>(i)}; | 993 | return {std::make_shared<NNTreeIterator>(i)}; |
| 989 | } | 994 | } |
| 990 | 995 | ||
| 991 | QPDFNameTreeObjectHelper::iterator | 996 | QPDFNameTreeObjectHelper::iterator |
| 992 | QPDFNameTreeObjectHelper::insert(std::string const& key, QPDFObjectHandle value) | 997 | QPDFNameTreeObjectHelper::insert(std::string const& key, QPDFObjectHandle value) |
| 993 | { | 998 | { |
| 994 | - auto i = m->impl->insert(QPDFObjectHandle::newUnicodeString(key), value); | 999 | + auto i = m->impl.insert(QPDFObjectHandle::newUnicodeString(key), value); |
| 995 | return {std::make_shared<NNTreeIterator>(i)}; | 1000 | return {std::make_shared<NNTreeIterator>(i)}; |
| 996 | } | 1001 | } |
| 997 | 1002 | ||
| 998 | bool | 1003 | bool |
| 999 | QPDFNameTreeObjectHelper::remove(std::string const& key, QPDFObjectHandle* value) | 1004 | QPDFNameTreeObjectHelper::remove(std::string const& key, QPDFObjectHandle* value) |
| 1000 | { | 1005 | { |
| 1001 | - return m->impl->remove(QPDFObjectHandle::newUnicodeString(key), value); | 1006 | + return m->impl.remove(QPDFObjectHandle::newUnicodeString(key), value); |
| 1002 | } | 1007 | } |
| 1003 | 1008 | ||
| 1004 | bool | 1009 | bool |
| @@ -1022,7 +1027,7 @@ QPDFNameTreeObjectHelper::findObject(std::string const& name, QPDFObjectHandle& | @@ -1022,7 +1027,7 @@ QPDFNameTreeObjectHelper::findObject(std::string const& name, QPDFObjectHandle& | ||
| 1022 | void | 1027 | void |
| 1023 | QPDFNameTreeObjectHelper::setSplitThreshold(int t) | 1028 | QPDFNameTreeObjectHelper::setSplitThreshold(int t) |
| 1024 | { | 1029 | { |
| 1025 | - m->impl->setSplitThreshold(t); | 1030 | + m->impl.setSplitThreshold(t); |
| 1026 | } | 1031 | } |
| 1027 | 1032 | ||
| 1028 | std::map<std::string, QPDFObjectHandle> | 1033 | std::map<std::string, QPDFObjectHandle> |
| @@ -1036,29 +1041,36 @@ QPDFNameTreeObjectHelper::getAsMap() const | @@ -1036,29 +1041,36 @@ QPDFNameTreeObjectHelper::getAsMap() const | ||
| 1036 | bool | 1041 | bool |
| 1037 | QPDFNameTreeObjectHelper::validate(bool repair) | 1042 | QPDFNameTreeObjectHelper::validate(bool repair) |
| 1038 | { | 1043 | { |
| 1039 | - return m->impl->validate(repair); | 1044 | + return m->impl.validate(repair); |
| 1040 | } | 1045 | } |
| 1041 | 1046 | ||
| 1042 | -QPDFNumberTreeObjectHelper::~QPDFNumberTreeObjectHelper() // NOLINT (modernize-use-equals-default) | 1047 | +class QPDFNumberTreeObjectHelper::Members |
| 1043 | { | 1048 | { |
| 1044 | - // Must be explicit and not inline -- see QPDF_DLL_CLASS in README-maintainer. For this specific | ||
| 1045 | - // class, see github issue #745. | ||
| 1046 | -} | 1049 | + typedef QPDFNumberTreeObjectHelper::numtree_number numtree_number; |
| 1047 | 1050 | ||
| 1048 | -QPDFNumberTreeObjectHelper::Members::Members( | ||
| 1049 | - QPDFObjectHandle& oh, | ||
| 1050 | - QPDF& q, | ||
| 1051 | - std::function<bool(QPDFObjectHandle const&)> value_validator, | ||
| 1052 | - bool auto_repair) : | ||
| 1053 | - impl(std::make_shared<NNTreeImpl>(q, oh, ::ot_integer, value_validator, auto_repair)) | ||
| 1054 | -{ | ||
| 1055 | -} | 1051 | + public: |
| 1052 | + Members( | ||
| 1053 | + QPDFObjectHandle& oh, | ||
| 1054 | + QPDF& q, | ||
| 1055 | + std::function<bool(QPDFObjectHandle const&)> value_validator, | ||
| 1056 | + bool auto_repair) : | ||
| 1057 | + impl(q, oh, ::ot_integer, value_validator, auto_repair) | ||
| 1058 | + { | ||
| 1059 | + } | ||
| 1060 | + Members(Members const&) = delete; | ||
| 1061 | + ~Members() = default; | ||
| 1062 | + | ||
| 1063 | + NNTreeImpl impl; | ||
| 1064 | +}; | ||
| 1065 | + | ||
| 1066 | +// Must be explicit and not inline -- see QPDF_DLL_CLASS in README-maintainer. For this specific | ||
| 1067 | +// class, see github issue #745. | ||
| 1068 | +QPDFNumberTreeObjectHelper::~QPDFNumberTreeObjectHelper() = default; | ||
| 1056 | 1069 | ||
| 1057 | QPDFNumberTreeObjectHelper::QPDFNumberTreeObjectHelper( | 1070 | QPDFNumberTreeObjectHelper::QPDFNumberTreeObjectHelper( |
| 1058 | QPDFObjectHandle oh, QPDF& q, bool auto_repair) : | 1071 | QPDFObjectHandle oh, QPDF& q, bool auto_repair) : |
| 1059 | - QPDFObjectHelper(oh), | ||
| 1060 | - m(new Members( | ||
| 1061 | - oh, q, [](QPDFObjectHandle const& o) -> bool { return static_cast<bool>(o); }, auto_repair)) | 1072 | + QPDFNumberTreeObjectHelper( |
| 1073 | + oh, q, [](QPDFObjectHandle const& o) -> bool { return static_cast<bool>(o); }, auto_repair) | ||
| 1062 | { | 1074 | { |
| 1063 | } | 1075 | } |
| 1064 | 1076 | ||
| @@ -1068,7 +1080,7 @@ QPDFNumberTreeObjectHelper::QPDFNumberTreeObjectHelper( | @@ -1068,7 +1080,7 @@ QPDFNumberTreeObjectHelper::QPDFNumberTreeObjectHelper( | ||
| 1068 | std::function<bool(QPDFObjectHandle const&)> value_validator, | 1080 | std::function<bool(QPDFObjectHandle const&)> value_validator, |
| 1069 | bool auto_repair) : | 1081 | bool auto_repair) : |
| 1070 | QPDFObjectHelper(oh), | 1082 | QPDFObjectHelper(oh), |
| 1071 | - m(new Members(oh, q, value_validator, auto_repair)) | 1083 | + m(std::make_shared<Members>(oh, q, value_validator, auto_repair)) |
| 1072 | { | 1084 | { |
| 1073 | } | 1085 | } |
| 1074 | 1086 | ||
| @@ -1155,39 +1167,39 @@ QPDFNumberTreeObjectHelper::iterator::remove() | @@ -1155,39 +1167,39 @@ QPDFNumberTreeObjectHelper::iterator::remove() | ||
| 1155 | QPDFNumberTreeObjectHelper::iterator | 1167 | QPDFNumberTreeObjectHelper::iterator |
| 1156 | QPDFNumberTreeObjectHelper::begin() const | 1168 | QPDFNumberTreeObjectHelper::begin() const |
| 1157 | { | 1169 | { |
| 1158 | - return {std::make_shared<NNTreeIterator>(m->impl->begin())}; | 1170 | + return {std::make_shared<NNTreeIterator>(m->impl.begin())}; |
| 1159 | } | 1171 | } |
| 1160 | 1172 | ||
| 1161 | QPDFNumberTreeObjectHelper::iterator | 1173 | QPDFNumberTreeObjectHelper::iterator |
| 1162 | QPDFNumberTreeObjectHelper::end() const | 1174 | QPDFNumberTreeObjectHelper::end() const |
| 1163 | { | 1175 | { |
| 1164 | - return {std::make_shared<NNTreeIterator>(m->impl->end())}; | 1176 | + return {std::make_shared<NNTreeIterator>(m->impl.end())}; |
| 1165 | } | 1177 | } |
| 1166 | 1178 | ||
| 1167 | QPDFNumberTreeObjectHelper::iterator | 1179 | QPDFNumberTreeObjectHelper::iterator |
| 1168 | QPDFNumberTreeObjectHelper::last() const | 1180 | QPDFNumberTreeObjectHelper::last() const |
| 1169 | { | 1181 | { |
| 1170 | - return {std::make_shared<NNTreeIterator>(m->impl->last())}; | 1182 | + return {std::make_shared<NNTreeIterator>(m->impl.last())}; |
| 1171 | } | 1183 | } |
| 1172 | 1184 | ||
| 1173 | QPDFNumberTreeObjectHelper::iterator | 1185 | QPDFNumberTreeObjectHelper::iterator |
| 1174 | QPDFNumberTreeObjectHelper::find(numtree_number key, bool return_prev_if_not_found) | 1186 | QPDFNumberTreeObjectHelper::find(numtree_number key, bool return_prev_if_not_found) |
| 1175 | { | 1187 | { |
| 1176 | - auto i = m->impl->find(QPDFObjectHandle::newInteger(key), return_prev_if_not_found); | 1188 | + auto i = m->impl.find(QPDFObjectHandle::newInteger(key), return_prev_if_not_found); |
| 1177 | return {std::make_shared<NNTreeIterator>(i)}; | 1189 | return {std::make_shared<NNTreeIterator>(i)}; |
| 1178 | } | 1190 | } |
| 1179 | 1191 | ||
| 1180 | QPDFNumberTreeObjectHelper::iterator | 1192 | QPDFNumberTreeObjectHelper::iterator |
| 1181 | QPDFNumberTreeObjectHelper::insert(numtree_number key, QPDFObjectHandle value) | 1193 | QPDFNumberTreeObjectHelper::insert(numtree_number key, QPDFObjectHandle value) |
| 1182 | { | 1194 | { |
| 1183 | - auto i = m->impl->insert(QPDFObjectHandle::newInteger(key), value); | 1195 | + auto i = m->impl.insert(QPDFObjectHandle::newInteger(key), value); |
| 1184 | return {std::make_shared<NNTreeIterator>(i)}; | 1196 | return {std::make_shared<NNTreeIterator>(i)}; |
| 1185 | } | 1197 | } |
| 1186 | 1198 | ||
| 1187 | bool | 1199 | bool |
| 1188 | QPDFNumberTreeObjectHelper::remove(numtree_number key, QPDFObjectHandle* value) | 1200 | QPDFNumberTreeObjectHelper::remove(numtree_number key, QPDFObjectHandle* value) |
| 1189 | { | 1201 | { |
| 1190 | - return m->impl->remove(QPDFObjectHandle::newInteger(key), value); | 1202 | + return m->impl.remove(QPDFObjectHandle::newInteger(key), value); |
| 1191 | } | 1203 | } |
| 1192 | 1204 | ||
| 1193 | QPDFNumberTreeObjectHelper::numtree_number | 1205 | QPDFNumberTreeObjectHelper::numtree_number |
| @@ -1245,7 +1257,7 @@ QPDFNumberTreeObjectHelper::findObjectAtOrBelow( | @@ -1245,7 +1257,7 @@ QPDFNumberTreeObjectHelper::findObjectAtOrBelow( | ||
| 1245 | void | 1257 | void |
| 1246 | QPDFNumberTreeObjectHelper::setSplitThreshold(int t) | 1258 | QPDFNumberTreeObjectHelper::setSplitThreshold(int t) |
| 1247 | { | 1259 | { |
| 1248 | - m->impl->setSplitThreshold(t); | 1260 | + m->impl.setSplitThreshold(t); |
| 1249 | } | 1261 | } |
| 1250 | 1262 | ||
| 1251 | std::map<QPDFNumberTreeObjectHelper::numtree_number, QPDFObjectHandle> | 1263 | std::map<QPDFNumberTreeObjectHelper::numtree_number, QPDFObjectHandle> |
| @@ -1259,5 +1271,5 @@ QPDFNumberTreeObjectHelper::getAsMap() const | @@ -1259,5 +1271,5 @@ QPDFNumberTreeObjectHelper::getAsMap() const | ||
| 1259 | bool | 1271 | bool |
| 1260 | QPDFNumberTreeObjectHelper::validate(bool repair) | 1272 | QPDFNumberTreeObjectHelper::validate(bool repair) |
| 1261 | { | 1273 | { |
| 1262 | - return m->impl->validate(repair); | 1274 | + return m->impl.validate(repair); |
| 1263 | } | 1275 | } |