From acb2cea3b8b63ae4ddea184dea4f7e2ad71675c9 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Mon, 23 Jan 2017 17:27:37 +0000 Subject: [PATCH] =?UTF-8?q?EgtGeomKernel=20:=20-=20le=20funzioni=20GetFirs?= =?UTF-8?q?tNameInGroup,=20GetNextName,=20GetLastNameInGroup=20e=20GetPrev?= =?UTF-8?q?Name=20ora=20accettano=20anche=20il=20solo=20inizio=20del=20nom?= =?UTF-8?q?e,=20purch=C3=A8=20terminato=20da=20*.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- GeomDB.cpp | 40 ++++++++++++++++++++++++++++++++-------- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/GeomDB.cpp b/GeomDB.cpp index 0be9bf6..2def247 100644 --- a/GeomDB.cpp +++ b/GeomDB.cpp @@ -666,6 +666,11 @@ GeomDB::GetFirstNameInGroup( int nGroupId, const string& sName) const // verifico validità minima di stringa con nome if ( IsEmptyOrSpaces( sName)) return GDB_ID_NULL ; + // determinazione tipo di ricerca + string sToFind = sName ; + bool bWild = ( sToFind.back() == '*') ; + if ( bWild) + sToFind.pop_back() ; // recupero il gruppo const GdbGroup* pGdbGroup = GetGdbGroup( nGroupId) ; if ( pGdbGroup == nullptr) @@ -673,9 +678,10 @@ GeomDB::GetFirstNameInGroup( int nGroupId, const string& sName) const // recupero il primo oggetto del gruppo const GdbObj* pGdbO = pGdbGroup->GetFirstObj() ; while ( pGdbO != nullptr) { - // se ha il nome cercato + // se ha il nome o la parte iniziale di nome cercato string sObjName ; - if ( pGdbO->GetName( sObjName) && sObjName == sName) + if ( pGdbO->GetName( sObjName) && + (( ! bWild && sObjName == sToFind) || ( bWild && sObjName.find( sToFind) == 0))) return ( pGdbO->m_nId) ; // passo al successivo pGdbO = pGdbO->GetNext() ; @@ -690,6 +696,11 @@ GeomDB::GetNextName( int nId, const string& sName) const // verifico validità minima di stringa con nome if ( IsEmptyOrSpaces( sName)) return GDB_ID_NULL ; + // determinazione tipo di ricerca + string sToFind = sName ; + bool bWild = ( sToFind.back() == '*') ; + if ( bWild) + sToFind.pop_back() ; // recupero l'oggetto const GdbObj* pGdbObj = GetGdbObj( nId) ; if ( pGdbObj == nullptr) @@ -697,9 +708,10 @@ GeomDB::GetNextName( int nId, const string& sName) const // recupero il successivo const GdbObj* pGdbNext = pGdbObj->GetNext() ; while ( pGdbNext != nullptr) { - // se ha il nome cercato + // se ha il nome o la parte iniziale di nome cercato string sObjName ; - if ( pGdbNext->GetName( sObjName) && sObjName == sName) + if ( pGdbNext->GetName( sObjName) && + (( ! bWild && sObjName == sToFind) || ( bWild && sObjName.find( sToFind) == 0))) return ( pGdbNext->m_nId) ; // passo al successivo pGdbNext = pGdbNext->GetNext() ; @@ -714,6 +726,11 @@ GeomDB::GetLastNameInGroup( int nGroupId, const string& sName) const // verifico validità minima di stringa con nome if ( IsEmptyOrSpaces( sName)) return GDB_ID_NULL ; + // determinazione tipo di ricerca + string sToFind = sName ; + bool bWild = ( sToFind.back() == '*') ; + if ( bWild) + sToFind.pop_back() ; // recupero il gruppo const GdbGroup* pGdbGroup = GetGdbGroup( nGroupId) ; if ( pGdbGroup == nullptr) @@ -721,9 +738,10 @@ GeomDB::GetLastNameInGroup( int nGroupId, const string& sName) const // recupero l'ultimo oggetto del gruppo const GdbObj* pGdbO = pGdbGroup->GetLastObj() ; while ( pGdbO != nullptr) { - // se ha il nome cercato + // se ha il nome o la parte iniziale di nome cercato string sObjName ; - if ( pGdbO->GetName( sObjName) && sObjName == sName) + if ( pGdbO->GetName( sObjName) && + (( ! bWild && sObjName == sToFind) || ( bWild && sObjName.find( sToFind) == 0))) return ( pGdbO->m_nId) ; // passo al precedente pGdbO = pGdbO->GetPrev() ; @@ -738,6 +756,11 @@ GeomDB::GetPrevName( int nId, const string& sName) const // verifico validità minima di stringa con nome if ( IsEmptyOrSpaces( sName)) return GDB_ID_NULL ; + // determinazione tipo di ricerca + string sToFind = sName ; + bool bWild = ( sToFind.back() == '*') ; + if ( bWild) + sToFind.pop_back() ; // recupero l'oggetto const GdbObj* pGdbObj = GetGdbObj( nId) ; if ( pGdbObj == nullptr) @@ -745,9 +768,10 @@ GeomDB::GetPrevName( int nId, const string& sName) const // recupero il precedente const GdbObj* pGdbPrev = pGdbObj->GetPrev() ; while ( pGdbPrev != nullptr) { - // se ha il nome cercato + // se ha il nome o la parte iniziale di nome cercato string sObjName ; - if ( pGdbPrev->GetName( sObjName) && sObjName == sName) + if ( pGdbPrev->GetName( sObjName) && + (( ! bWild && sObjName == sToFind) || ( bWild && sObjName.find( sToFind) == 0))) return ( pGdbPrev->m_nId) ; // passo al precedente pGdbPrev = pGdbPrev->GetPrev() ;