0
0
mirror of https://github.com/zeux/pugixml.git synced 2024-12-28 06:10:55 +08:00

XPath: Add missing inline/PUGI__FN specifiers

Also split one-liner if/for loops for better readability and coverage.
This commit is contained in:
Arseny Kapoulkine 2019-03-17 07:13:25 -07:00
parent cdd5d92f26
commit 7247a823b7

View File

@ -7333,14 +7333,14 @@ PUGI__NS_BEGIN
} }
}; };
template <typename T> void swap(T& lhs, T& rhs) template <typename T> inline void swap(T& lhs, T& rhs)
{ {
T temp = lhs; T temp = lhs;
lhs = rhs; lhs = rhs;
rhs = temp; rhs = temp;
} }
template <typename I, typename Pred> I min_element(I begin, I end, const Pred& pred) template <typename I, typename Pred> PUGI__FN I min_element(I begin, I end, const Pred& pred)
{ {
I result = begin; I result = begin;
@ -7351,17 +7351,20 @@ PUGI__NS_BEGIN
return result; return result;
} }
template <typename I> void reverse(I begin, I end) template <typename I> PUGI__FN void reverse(I begin, I end)
{ {
while (end - begin > 1) swap(*begin++, *--end); while (end - begin > 1)
swap(*begin++, *--end);
} }
template <typename I> I unique(I begin, I end) template <typename I> PUGI__FN I unique(I begin, I end)
{ {
// fast skip head // fast skip head
while (end - begin > 1 && *begin != *(begin + 1)) begin++; while (end - begin > 1 && *begin != *(begin + 1))
begin++;
if (begin == end) return begin; if (begin == end)
return begin;
// last written element // last written element
I write = begin++; I write = begin++;
@ -7379,7 +7382,7 @@ PUGI__NS_BEGIN
return write + 1; return write + 1;
} }
template <typename T, typename Pred> void insertion_sort(T* begin, T* end, const Pred& pred) template <typename T, typename Pred> PUGI__FN void insertion_sort(T* begin, T* end, const Pred& pred)
{ {
if (begin == end) if (begin == end)
return; return;
@ -7401,16 +7404,19 @@ PUGI__NS_BEGIN
} }
} }
template <typename I, typename Pred> I median3(I first, I middle, I last, const Pred& pred) template <typename I, typename Pred> inline I median3(I first, I middle, I last, const Pred& pred)
{ {
if (pred(*middle, *first)) swap(middle, first); if (pred(*middle, *first))
if (pred(*last, *middle)) swap(last, middle); swap(middle, first);
if (pred(*middle, *first)) swap(middle, first); if (pred(*last, *middle))
swap(last, middle);
if (pred(*middle, *first))
swap(middle, first);
return middle; return middle;
} }
template <typename T, typename Pred> void partition3(T* begin, T* end, T pivot, const Pred& pred, T** out_eqbeg, T** out_eqend) template <typename T, typename Pred> PUGI__FN void partition3(T* begin, T* end, T pivot, const Pred& pred, T** out_eqbeg, T** out_eqend)
{ {
// invariant: array is split into 4 groups: = < ? > (each variable denotes the boundary between the groups) // invariant: array is split into 4 groups: = < ? > (each variable denotes the boundary between the groups)
T* eq = begin; T* eq = begin;
@ -7437,7 +7443,7 @@ PUGI__NS_BEGIN
*out_eqend = gt; *out_eqend = gt;
} }
template <typename I, typename Pred> void sort(I begin, I end, const Pred& pred) template <typename I, typename Pred> PUGI__FN void sort(I begin, I end, const Pred& pred)
{ {
// sort large chunks // sort large chunks
while (end - begin > 16) while (end - begin > 16)