Added new-undo == delete

This commit is contained in:
2025-09-04 17:01:01 +02:00
parent 89c5fd21f1
commit 5d2fb1b378
8 changed files with 116 additions and 84 deletions

View File

@@ -78,6 +78,7 @@ namespace znode
zweak_node _parent;
znode_list _children;
// functor, der auf pointer gleichheit prüft.
struct match_node
{
match_node( zbasic_node* match )
@@ -95,9 +96,11 @@ namespace znode
public:
//! shortcut auf std::make_shared...
static zshared_node make_node( str_cref arg1, str_cref arg2 = "" , zshared_cref parent = nullptr )
//! beachte: der eltern-knoten wird hier nicht gesetzt, der neue knoten
//! wird nirgends eingefügt.
static zshared_node make_node( str_cref arg1, str_cref arg2 = "" )
{
return std::make_shared<zbasic_node>( arg1, arg2, parent );
return std::make_shared<zbasic_node>( arg1, arg2 );
}
//! leerer konstruktor
@@ -136,7 +139,7 @@ namespace znode
zbasic_node(const zbasic_node&) = delete;
zbasic_node& operator=(const zbasic_node&) = delete;
// 'move' geht (shared_from_this bleibt gültig)
//! 'move' geht (shared_from_this bleibt gültig)
zbasic_node(zbasic_node&&) noexcept = default;
zbasic_node& operator=(zbasic_node&&) noexcept = default;
@@ -178,29 +181,31 @@ namespace znode
return _parent.lock();
}
//! gibt den nachfolge-knoten oder 'end()' zurück.
zshared_node sibling()
{
if( parent() )
{
znode_list& childs = _parent->_children;
auto it = std::find( childs.begin(), childs.end(), this->shared_from_this() );
if( ++it != childs.end())
return *(it);
return *(it);
}
return zshared_node();
throw std::runtime_error("sibling(): no parent node");
}
//! gibt den vector mit kind-knoten zurück
inline const znode_list& children() const
{
return _children;
}
//! testet, ob kinder vorhanden sind.
bool has_children() const
{
return !children().empty();
}
//! gibt das erste kind zurück
zshared_node first_child()
{
if(!children().empty())
@@ -208,6 +213,7 @@ namespace znode
return nullptr;
}
//! gibt das letzte kind oder nullptr zurück
zshared_node last_child()
{
if(!children().empty())