1 // Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
2 // Copyright (C) 2010 Winch Gate Property Limited
4 // This source file has been modified by the following contributors:
5 // Copyright (C) 2013 Laszlo KIS-ADAM (dfighter) <dfighter1985@gmail.com>
7 // This program is free software: you can redistribute it and/or modify
8 // it under the terms of the GNU Affero General Public License as
9 // published by the Free Software Foundation, either version 3 of the
10 // License, or (at your option) any later version.
12 // This program is distributed in the hope that it will be useful,
13 // but WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 // GNU Affero General Public License for more details.
17 // You should have received a copy of the GNU Affero General Public License
18 // along with this program. If not, see <http://www.gnu.org/licenses/>.
21 #include "nel/misc/cdb_bank_handler.h"
28 CCDBBankHandler::CCDBBankHandler(uint maxbanks
) :
29 _CDBBankToUnifiedIndexMapping( maxbanks
, std::vector
< uint
>() ),
30 _FirstLevelIdBitsByBank( maxbanks
)
32 std::fill( _FirstLevelIdBitsByBank
.begin(), _FirstLevelIdBitsByBank
.end(), 0 );
36 uint
CCDBBankHandler::getUIDForBank( uint bank
) const
38 uint uid
= static_cast< uint
>( -1 );
40 for( uint i
= 0; i
< _UnifiedIndexToBank
.size(); i
++ )
41 if( _UnifiedIndexToBank
[ i
] == bank
)
47 uint
CCDBBankHandler::getBankByName( const std::string
&name
) const
49 uint b
= static_cast< uint
>( -1 );
51 for( uint i
= 0; i
< _CDBBankNames
.size(); i
++ )
52 if( _CDBBankNames
[ i
].compare( name
) == 0 )
58 void CCDBBankHandler::mapNodeByBank( const std::string
&bankName
)
60 uint b
= getBankByName( bankName
);
62 if( b
== static_cast< uint
>( -1 ) )
65 _CDBBankToUnifiedIndexMapping
[ b
].push_back( _CDBLastUnifiedIndex
);
66 ++_CDBLastUnifiedIndex
;
67 _UnifiedIndexToBank
.push_back( b
);
70 void CCDBBankHandler::fillBankNames( const char **strings
, uint size
)
72 _CDBBankNames
.clear();
74 for( uint i
= 0; i
< size
; i
++ )
75 _CDBBankNames
.push_back( std::string( strings
[ i
] ) );
78 void CCDBBankHandler::reset()
80 for( std::vector
< std::vector
< uint
> >::iterator itr
=_CDBBankToUnifiedIndexMapping
.begin();
81 itr
!= _CDBBankToUnifiedIndexMapping
.end(); ++itr
)
84 _UnifiedIndexToBank
.clear();
85 _CDBLastUnifiedIndex
= 0;
88 void CCDBBankHandler::calcIdBitsByBank()
90 for( uint bank
= 0; bank
!= maxBanks
; bank
++ )
92 uint nbNodesOfBank
= static_cast< uint
>( _CDBBankToUnifiedIndexMapping
[ bank
].size() );
95 if ( nbNodesOfBank
> 0 )
96 for ( idb
= 1; nbNodesOfBank
> unsigned( 1 << idb
) ; idb
++ )
99 _FirstLevelIdBitsByBank
[ bank
] = idb
;
103 void CCDBBankHandler::resize( uint newSize
)
107 _CDBBankNames
.clear();
108 _CDBBankToUnifiedIndexMapping
.clear();
109 _FirstLevelIdBitsByBank
.clear();
111 _CDBBankToUnifiedIndexMapping
.reserve( newSize
);
112 _FirstLevelIdBitsByBank
.reserve( newSize
);