* fix: don't rename target/names without numeric suffix on paste to non clashing namespace

This commit is contained in:
Garux 2021-11-24 18:00:37 +03:00
parent e62483970f
commit 1f7d0250b0
3 changed files with 21 additions and 22 deletions

View File

@ -29,15 +29,16 @@
#if 1
class Postfix
{
unsigned int m_value;
int m_value; // -1 is special value to handle empty postfix
public:
Postfix( const char* postfix ) : m_value( atoi( postfix ) ){
Postfix( const char* postfix ) : m_value( string_empty( postfix )? -1 : atoi( postfix ) ){
}
unsigned int number() const {
int number() const {
return m_value;
}
void write( char* buffer ) const {
sprintf( buffer, "%u", m_value );
if( m_value != -1 )
sprintf( buffer, "%i", m_value );
}
Postfix& operator++(){
++m_value;

View File

@ -71,15 +71,15 @@ class NameKeys : public Entity::Observer, public Namespaced
}
}
void insertAll(){
for ( KeyValues::iterator i = m_keyValues.begin(); i != m_keyValues.end(); ++i )
for ( auto& [key, value] : m_keyValues )
{
insertName( ( *i ).first.c_str(), *( *i ).second );
insertName( key.c_str(), *value );
}
}
void eraseAll(){
for ( KeyValues::iterator i = m_keyValues.begin(); i != m_keyValues.end(); ++i )
for ( auto& [key, value] : m_keyValues )
{
eraseName( ( *i ).first.c_str(), *( *i ).second );
eraseName( key.c_str(), *value );
}
}
public:

View File

@ -158,26 +158,24 @@ public:
UniqueNames uniqueNames( other.m_uniqueNames );
for ( Names::const_iterator i = m_names.begin(); i != m_names.end(); ++i )
for ( const auto& [callback, observer] : m_names )
{
groups[( *i ).second.c_str()].push_back( ( *i ).first );
groups[observer.c_str()].push_back( callback );
}
for ( NameGroups::iterator i = groups.begin(); i != groups.end(); ++i )
for ( const auto& [name, setNameCallbacks] : groups )
{
name_t uniqueName( uniqueNames.make_unique( name_read( ( *i ).first.c_str() ) ) );
name_t uniqueName( uniqueNames.make_unique( name_read( name.c_str() ) ) );
uniqueNames.insert( uniqueName );
char buffer[1024];
name_write( buffer, uniqueName );
//globalOutputStream() << "renaming " << makeQuoted((*i).first.c_str()) << " to " << makeQuoted(buffer) << "\n";
//globalOutputStream() << "renaming " << makeQuoted(name.c_str()) << " to " << makeQuoted(buffer) << "\n";
SetNameCallbacks& setNameCallbacks = ( *i ).second;
for ( SetNameCallbacks::const_iterator j = setNameCallbacks.begin(); j != setNameCallbacks.end(); ++j )
for ( const NameCallback& nameCallback : setNameCallbacks )
{
( *j )( buffer );
nameCallback( buffer );
}
}
}
@ -206,7 +204,7 @@ typedef Static<NamespaceModule> StaticNamespaceModule;
StaticRegisterModule staticRegisterDefaultNamespace( StaticNamespaceModule::instance() );
std::list<Namespaced*> g_cloned;
std::vector<Namespaced*> g_cloned;
inline Namespaced* Node_getNamespaced( scene::Node& node ){
return NodeTypeCast<Namespaced>::cast( node );
@ -234,15 +232,15 @@ void Map_gatherNamespaced( scene::Node& root ){
void Map_mergeClonedNames( bool makeUnique /*= true*/ ){
if( makeUnique ){
for ( std::list<Namespaced*>::const_iterator i = g_cloned.begin(); i != g_cloned.end(); ++i )
for ( Namespaced *namespaced : g_cloned )
{
( *i )->setNamespace( g_cloneNamespace );
namespaced->setNamespace( g_cloneNamespace );
}
g_cloneNamespace.mergeNames( g_defaultNamespace );
}
for ( std::list<Namespaced*>::const_iterator i = g_cloned.begin(); i != g_cloned.end(); ++i )
for ( Namespaced *namespaced : g_cloned )
{
( *i )->setNamespace( g_defaultNamespace );
namespaced->setNamespace( g_defaultNamespace );
}
g_cloned.clear();