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 | 176 | void setSplitThreshold(int); |
| 177 | 177 | |
| 178 | 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 | 181 | std::shared_ptr<Members> m; |
| 198 | 182 | }; | ... | ... |
include/qpdf/QPDFNumberTreeObjectHelper.hh
| ... | ... | @@ -192,24 +192,7 @@ class QPDF_DLL_CLASS QPDFNumberTreeObjectHelper: public QPDFObjectHelper |
| 192 | 192 | void setSplitThreshold(int); |
| 193 | 193 | |
| 194 | 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 | 197 | std::shared_ptr<Members> m; |
| 215 | 198 | }; | ... | ... |
libqpdf/NNTree.cc
| ... | ... | @@ -851,25 +851,30 @@ NNTreeImpl::validate(bool a_repair) |
| 851 | 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 | 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 | 884 | std::function<bool(QPDFObjectHandle const&)> value_validator, |
| 880 | 885 | bool auto_repair) : |
| 881 | 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 | 971 | QPDFNameTreeObjectHelper::iterator |
| 967 | 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 | 977 | QPDFNameTreeObjectHelper::iterator |
| 973 | 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 | 983 | QPDFNameTreeObjectHelper::iterator |
| 979 | 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 | 989 | QPDFNameTreeObjectHelper::iterator |
| 985 | 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 | 993 | return {std::make_shared<NNTreeIterator>(i)}; |
| 989 | 994 | } |
| 990 | 995 | |
| 991 | 996 | QPDFNameTreeObjectHelper::iterator |
| 992 | 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 | 1000 | return {std::make_shared<NNTreeIterator>(i)}; |
| 996 | 1001 | } |
| 997 | 1002 | |
| 998 | 1003 | bool |
| 999 | 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 | 1009 | bool |
| ... | ... | @@ -1022,7 +1027,7 @@ QPDFNameTreeObjectHelper::findObject(std::string const& name, QPDFObjectHandle& |
| 1022 | 1027 | void |
| 1023 | 1028 | QPDFNameTreeObjectHelper::setSplitThreshold(int t) |
| 1024 | 1029 | { |
| 1025 | - m->impl->setSplitThreshold(t); | |
| 1030 | + m->impl.setSplitThreshold(t); | |
| 1026 | 1031 | } |
| 1027 | 1032 | |
| 1028 | 1033 | std::map<std::string, QPDFObjectHandle> |
| ... | ... | @@ -1036,29 +1041,36 @@ QPDFNameTreeObjectHelper::getAsMap() const |
| 1036 | 1041 | bool |
| 1037 | 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 | 1070 | QPDFNumberTreeObjectHelper::QPDFNumberTreeObjectHelper( |
| 1058 | 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 | 1080 | std::function<bool(QPDFObjectHandle const&)> value_validator, |
| 1069 | 1081 | bool auto_repair) : |
| 1070 | 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 | 1167 | QPDFNumberTreeObjectHelper::iterator |
| 1156 | 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 | 1173 | QPDFNumberTreeObjectHelper::iterator |
| 1162 | 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 | 1179 | QPDFNumberTreeObjectHelper::iterator |
| 1168 | 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 | 1185 | QPDFNumberTreeObjectHelper::iterator |
| 1174 | 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 | 1189 | return {std::make_shared<NNTreeIterator>(i)}; |
| 1178 | 1190 | } |
| 1179 | 1191 | |
| 1180 | 1192 | QPDFNumberTreeObjectHelper::iterator |
| 1181 | 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 | 1196 | return {std::make_shared<NNTreeIterator>(i)}; |
| 1185 | 1197 | } |
| 1186 | 1198 | |
| 1187 | 1199 | bool |
| 1188 | 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 | 1205 | QPDFNumberTreeObjectHelper::numtree_number |
| ... | ... | @@ -1245,7 +1257,7 @@ QPDFNumberTreeObjectHelper::findObjectAtOrBelow( |
| 1245 | 1257 | void |
| 1246 | 1258 | QPDFNumberTreeObjectHelper::setSplitThreshold(int t) |
| 1247 | 1259 | { |
| 1248 | - m->impl->setSplitThreshold(t); | |
| 1260 | + m->impl.setSplitThreshold(t); | |
| 1249 | 1261 | } |
| 1250 | 1262 | |
| 1251 | 1263 | std::map<QPDFNumberTreeObjectHelper::numtree_number, QPDFObjectHandle> |
| ... | ... | @@ -1259,5 +1271,5 @@ QPDFNumberTreeObjectHelper::getAsMap() const |
| 1259 | 1271 | bool |
| 1260 | 1272 | QPDFNumberTreeObjectHelper::validate(bool repair) |
| 1261 | 1273 | { |
| 1262 | - return m->impl->validate(repair); | |
| 1274 | + return m->impl.validate(repair); | |
| 1263 | 1275 | } | ... | ... |