mirror of
https://anongit.gentoo.org/git/repo/gentoo.git
synced 2026-05-06 07:27:03 -04:00
dev-cpp/tree: fixes for gcc-16 compile/test failures
Also unhardcode g++ to allow building/testing with different compilers. Closes: https://bugs.gentoo.org/964308 Signed-off-by: Holger Hoffstätte <holger@applied-asynchrony.com> Part-of: https://github.com/gentoo/gentoo/pull/45767 Closes: https://github.com/gentoo/gentoo/pull/45767 Signed-off-by: Sam James <sam@gentoo.org>
This commit is contained in:
committed by
Sam James
parent
42c2e7821f
commit
3cd4670949
@@ -0,0 +1,82 @@
|
||||
https://github.com/kpeeters/tree.hh/commit/1bd1cd80cdcec2ba1c677ee0ef3766a9485d1d2f
|
||||
|
||||
From: Kasper Peeters <kasper.peeters@phi-sci.com>
|
||||
Date: Fri, 17 Nov 2023 11:24:49 +0000
|
||||
Subject: [PATCH] Add a missing 'insert(sibling_iterators, T&&)'. Fixes issue
|
||||
#24.
|
||||
|
||||
---
|
||||
src/tree.hh | 39 +++++++++++++++++++++++++++++++++++----
|
||||
1 file changed, 35 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/src/tree.hh b/src/tree.hh
|
||||
index 906cda1..d460165 100644
|
||||
--- a/src/tree.hh
|
||||
+++ b/src/tree.hh
|
||||
@@ -1,7 +1,7 @@
|
||||
|
||||
// STL-like templated tree class.
|
||||
//
|
||||
-// Copyright (C) 2001-2020 Kasper Peeters <kasper@phi-sci.com>
|
||||
+// Copyright (C) 2001-2023 Kasper Peeters <kasper@phi-sci.com>
|
||||
// Distributed under the GNU General Public License version 3.
|
||||
//
|
||||
// Special permission to use tree.hh under the conditions of a
|
||||
@@ -9,9 +9,8 @@
|
||||
|
||||
/** \mainpage tree.hh
|
||||
\author Kasper Peeters
|
||||
- \version 3.18
|
||||
- \date 13-Feb-2021
|
||||
- \see http://tree.phi-sci.com/
|
||||
+ \version 3.19
|
||||
+ \date 2023-11-17
|
||||
\see http://github.com/kpeeters/tree.hh/
|
||||
|
||||
The tree.hh library for C++ provides an STL-like container class
|
||||
@@ -363,6 +362,7 @@ class tree {
|
||||
template<typename iter> iter insert(iter position, T&& x);
|
||||
/// Specialisation of previous member.
|
||||
sibling_iterator insert(sibling_iterator position, const T& x);
|
||||
+ sibling_iterator insert(sibling_iterator position, T&& x);
|
||||
/// Insert node (with children) pointed to by subtree as previous sibling of node pointed to by position.
|
||||
/// Does not change the subtree itself (use move_in or move_in_below for that).
|
||||
template<typename iter> iter insert_subtree(iter position, const iterator_base& subtree);
|
||||
@@ -1363,6 +1363,37 @@ typename tree<T, tree_node_allocator>::sibling_iterator tree<T, tree_node_alloca
|
||||
return tmp;
|
||||
}
|
||||
|
||||
+template <class T, class tree_node_allocator>
|
||||
+typename tree<T, tree_node_allocator>::sibling_iterator tree<T, tree_node_allocator>::insert(sibling_iterator position, T&& x)
|
||||
+ {
|
||||
+ tree_node *tmp=std::allocator_traits<decltype(alloc_)>::allocate(alloc_, 1, 0);
|
||||
+ std::allocator_traits<decltype(alloc_)>::construct(alloc_, tmp);
|
||||
+ std::swap(tmp->data, x); // Move semantics
|
||||
+
|
||||
+ tmp->first_child=0;
|
||||
+ tmp->last_child=0;
|
||||
+
|
||||
+ tmp->next_sibling=position.node;
|
||||
+ if(position.node==0) { // iterator points to end of a subtree
|
||||
+ tmp->parent=position.parent_;
|
||||
+ tmp->prev_sibling=position.range_last();
|
||||
+ tmp->parent->last_child=tmp;
|
||||
+ }
|
||||
+ else {
|
||||
+ tmp->parent=position.node->parent;
|
||||
+ tmp->prev_sibling=position.node->prev_sibling;
|
||||
+ position.node->prev_sibling=tmp;
|
||||
+ }
|
||||
+
|
||||
+ if(tmp->prev_sibling==0) {
|
||||
+ if(tmp->parent) // when inserting nodes at the head, there is no parent
|
||||
+ tmp->parent->first_child=tmp;
|
||||
+ }
|
||||
+ else
|
||||
+ tmp->prev_sibling->next_sibling=tmp;
|
||||
+ return tmp;
|
||||
+ }
|
||||
+
|
||||
template <class T, class tree_node_allocator>
|
||||
template <class iter>
|
||||
iter tree<T, tree_node_allocator>::insert_after(iter position, const T& x)
|
||||
@@ -0,0 +1,23 @@
|
||||
https://github.com/kpeeters/tree.hh/commit/0ee8b5a4c3a93814bbf465ffc56c296cf84f1832
|
||||
|
||||
From: Kasper Peeters <kasper.peeters@phi-sci.com>
|
||||
Date: Fri, 17 Nov 2023 11:27:13 +0000
|
||||
Subject: [PATCH] Fix const-correctness for comparison.
|
||||
|
||||
---
|
||||
src/tree.hh | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/tree.hh b/src/tree.hh
|
||||
index d460165..be45f99 100644
|
||||
--- a/src/tree.hh
|
||||
+++ b/src/tree.hh
|
||||
@@ -505,7 +505,7 @@ class tree {
|
||||
public:
|
||||
compare_nodes(StrictWeakOrdering comp) : comp_(comp) {}
|
||||
|
||||
- bool operator()(const tree_node *a, const tree_node *b)
|
||||
+ bool operator()(const tree_node *a, const tree_node *b) const
|
||||
{
|
||||
return comp_(a->data, b->data);
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
--- tree.hh-3.18/src/Makefile
|
||||
+++ tree.hh-3.18/src/Makefile
|
||||
@@ -2,19 +2,19 @@
|
||||
all: test1 test2 test_tree
|
||||
|
||||
%.o: %.cc tree.hh
|
||||
- g++ -g -c -o $@ -Wall -O2 -std=c++11 -I. $<
|
||||
+ $(CXX) -g -c -o $@ -Wall -O2 -std=c++11 -I. $<
|
||||
|
||||
test1: test1.o
|
||||
- g++ -o test1 test1.o
|
||||
+ $(CXX) -o test1 test1.o
|
||||
|
||||
test2: test2.o
|
||||
- g++ -o test2 test2.o
|
||||
+ $(CXX) -o test2 test2.o
|
||||
|
||||
test_tree: test_tree.o
|
||||
- g++ -o test_tree test_tree.o
|
||||
+ $(CXX) -o test_tree test_tree.o
|
||||
|
||||
sample_path: sample_path.o
|
||||
- g++ -o sample_path sample_path.o
|
||||
+ $(CXX) -o sample_path sample_path.o
|
||||
|
||||
run_tests: test1 test1.req
|
||||
./test1 > test1.res
|
||||
@@ -0,0 +1,46 @@
|
||||
https://github.com/kpeeters/tree.hh/commit/66f71a672698909e5b613a3c04a918bac3d4282f
|
||||
|
||||
From: Kasper Peeters <kasper.peeters@phi-sci.com>
|
||||
Date: Fri, 17 Nov 2023 11:33:30 +0000
|
||||
Subject: [PATCH] Fix move_out for cases when the moved-out node was first or
|
||||
last child of the old parent.
|
||||
|
||||
---
|
||||
src/tree.hh | 17 ++++++++++++++++-
|
||||
1 file changed, 16 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/tree.hh b/src/tree.hh
|
||||
index be45f99..743a81b 100644
|
||||
--- a/src/tree.hh
|
||||
+++ b/src/tree.hh
|
||||
@@ -1860,7 +1860,6 @@ tree<T, tree_node_allocator> tree<T, tree_node_allocator>::move_out(iterator sou
|
||||
// Move source node into the 'ret' tree.
|
||||
ret.head->next_sibling = source.node;
|
||||
ret.feet->prev_sibling = source.node;
|
||||
- source.node->parent=0;
|
||||
|
||||
// Close the links in the current tree.
|
||||
if(source.node->prev_sibling!=0)
|
||||
@@ -1869,6 +1868,22 @@ tree<T, tree_node_allocator> tree<T, tree_node_allocator>::move_out(iterator sou
|
||||
if(source.node->next_sibling!=0)
|
||||
source.node->next_sibling->prev_sibling = source.node->prev_sibling;
|
||||
|
||||
+ // If the moved-out node was a first or last child of
|
||||
+ // the parent, adjust those links.
|
||||
+ if(source.node->parent->first_child==source.node) {
|
||||
+ if(source.node->next_sibling!=0)
|
||||
+ source.node->parent->first_child=source.node->next_sibling;
|
||||
+ else
|
||||
+ source.node->parent->first_child=0;
|
||||
+ }
|
||||
+ if(source.node->parent->last_child==source.node) {
|
||||
+ if(source.node->prev_sibling!=0)
|
||||
+ source.node->parent->last_child=source.node->prev_sibling;
|
||||
+ else
|
||||
+ source.node->parent->last_child=0;
|
||||
+ }
|
||||
+ source.node->parent=0;
|
||||
+
|
||||
// Fix source prev/next links.
|
||||
source.node->prev_sibling = ret.head;
|
||||
source.node->next_sibling = ret.feet;
|
||||
@@ -0,0 +1,46 @@
|
||||
# Copyright 1999-2026 Gentoo Authors
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
EAPI=8
|
||||
|
||||
DOCS_BUILDER="doxygen"
|
||||
DOCS_CONFIG_NAME="doxygen_tree.config"
|
||||
DOCS_DIR="doc"
|
||||
|
||||
inherit docs toolchain-funcs
|
||||
|
||||
DESCRIPTION="An STL-like tree class"
|
||||
HOMEPAGE="https://github.com/kpeeters/tree.hh"
|
||||
SRC_URI="https://github.com/kpeeters/tree.hh/archive/refs/tags/${PV}.tar.gz -> ${P}.tar.gz"
|
||||
S="${WORKDIR}/${PN}.hh-${PV}"
|
||||
|
||||
LICENSE="|| ( GPL-2 GPL-3 )"
|
||||
SLOT="0"
|
||||
KEYWORDS="~amd64 ~ppc64 ~x86"
|
||||
|
||||
PATCHES=(
|
||||
"${FILESDIR}"/3.18-add-missing-insert.patch
|
||||
"${FILESDIR}"/3.18-const.patch
|
||||
"${FILESDIR}"/3.18-cxx.patch
|
||||
"${FILESDIR}"/3.18-fix-move-out.patch
|
||||
)
|
||||
|
||||
src_configure() {
|
||||
tc-export CXX
|
||||
}
|
||||
|
||||
src_compile() {
|
||||
docs_compile
|
||||
}
|
||||
|
||||
src_test() {
|
||||
cd src || die
|
||||
emake
|
||||
emake run_tests
|
||||
}
|
||||
|
||||
src_install() {
|
||||
doheader src/tree.hh src/tree_util.hh
|
||||
dodoc -r examples
|
||||
einstalldocs
|
||||
}
|
||||
Reference in New Issue
Block a user