X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fxml%2Frepr-sorting.cpp;fp=src%2Fxml%2Frepr-sorting.cpp;h=056236d333379665909bf6a89251a344661eb11f;hb=9dc68827cbd515262ecb8d5ae8547d9e82c72e00;hp=df1d2cbb8bd5fed5a754d8a612b7cb9522ed2d4a;hpb=8c6aa1264d2d7b0f1d6e31a97937572068aeaaae;p=inkscape.git diff --git a/src/xml/repr-sorting.cpp b/src/xml/repr-sorting.cpp index df1d2cbb8..056236d33 100644 --- a/src/xml/repr-sorting.cpp +++ b/src/xml/repr-sorting.cpp @@ -3,18 +3,16 @@ #include "xml/repr.h" #include "xml/node-iterators.h" -static bool -same_repr(Inkscape::XML::Node &a, Inkscape::XML::Node &b) +static bool same_repr(Inkscape::XML::Node const &a, Inkscape::XML::Node const &b) { /* todo: I'm not certain that it's legal to take the address of a reference. Check the exact wording of the spec on this matter. */ return &a == &b; } -Inkscape::XML::Node * -LCA(Inkscape::XML::Node *a, Inkscape::XML::Node *b) +Inkscape::XML::Node const *LCA(Inkscape::XML::Node const *a, Inkscape::XML::Node const *b) { using Inkscape::Algorithms::longest_common_suffix; - Inkscape::XML::Node *ancestor = longest_common_suffix( + Inkscape::XML::Node const *ancestor = longest_common_suffix( a, b, NULL, &same_repr ); if ( ancestor && ancestor->type() != Inkscape::XML::DOCUMENT_NODE ) { @@ -24,22 +22,30 @@ LCA(Inkscape::XML::Node *a, Inkscape::XML::Node *b) } } -/** - * Returns a child of \a ancestor such that ret is itself an ancestor of \a descendent. - * - * The current version returns NULL if ancestor or descendent is NULL, though future versions may - * call g_log. Please update this comment if you rely on the current behaviour. - */ -Inkscape::XML::Node * -AncetreFils(Inkscape::XML::Node *descendent, Inkscape::XML::Node *ancestor) +Inkscape::XML::Node *LCA(Inkscape::XML::Node *a, Inkscape::XML::Node *b) { - if (descendent == NULL || ancestor == NULL) - return NULL; - if (sp_repr_parent(descendent) == ancestor) - return descendent; - return AncetreFils(sp_repr_parent(descendent), ancestor); + Inkscape::XML::Node const *tmp = LCA(const_cast(a), const_cast(b)); + return const_cast(tmp); } +Inkscape::XML::Node const *AncetreFils(Inkscape::XML::Node const *descendent, Inkscape::XML::Node const *ancestor) +{ + Inkscape::XML::Node const *result = 0; + if ( descendent && ancestor ) { + if (descendent->parent() == ancestor) { + result = descendent; + } else { + result = AncetreFils(descendent->parent(), ancestor); + } + } + return result; +} + +Inkscape::XML::Node *AncetreFils(Inkscape::XML::Node *descendent, Inkscape::XML::Node *ancestor) +{ + Inkscape::XML::Node const * tmp = AncetreFils(const_cast(descendent), const_cast(ancestor)); + return const_cast(tmp); +} /* Local Variables: