Commit 97198c270176f99939bf6293a7df5c5d1a121e77

Authored by m-holger
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.
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&amp; name, QPDFObjectHandle&amp;
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 }
... ...