Resolve "Toggle Free Look with Hotkey"
[ryzomcore.git] / ryzom / server / src / pd_lib / pd_string_mapper.cpp
blobd19ac2df3bda12a0bf35277844782b8c49bfd25c
1 // Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
2 // Copyright (C) 2010 Winch Gate Property Limited
3 //
4 // This source file has been modified by the following contributors:
5 // Copyright (C) 2015-2020 Jan BOON (Kaetemi) <jan.boon@kaetemi.be>
6 //
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/>.
20 #include "pd_string_mapper.h"
23 * Unknown String
25 std::string CPDStringMapper::_UnknownString = "Unknown";
29 * Constructor
31 CPDStringMapper::CPDStringMapper()
37 * Set Mapping
39 void CPDStringMapper::setMapping(const std::string& str, uint32 id)
41 std::string lowMapStr = NLMISC::toLowerAscii(str);
42 TStringMap::iterator its;
44 TIdMap::iterator iti = _IdMap.find(id);
45 if (iti != _IdMap.end())
47 its = (*iti).second;;
48 if ((*its).first != lowMapStr || (*its).second != id)
50 nlwarning("CPDStringMapper::setMapping(): failed to map '%s' to '%d', id is already mapped to a different string", str.c_str(), id);
51 return;
54 return;
57 its = _StringMap.find(lowMapStr);
59 if (its != _StringMap.end())
61 if ((*its).second != id)
63 nlwarning("CPDStringMapper::setMapping(): failed to map '%s' to '%d', string is already mapped to a different id", str.c_str(), id);
64 return;
67 return;
70 its = _StringMap.insert(std::pair<std::string, uint32>(lowMapStr, id)).first;
71 _IdMap[id] = its;
75 * Serial Mapper
77 void CPDStringMapper::serial(NLMISC::IStream& f)
79 f.serialCheck(NELID("PDSM"));
81 uint version = f.serialVersion(0);
83 f.serialCont(_StringMap);
85 if (f.isReading())
87 buildIdMap();
92 * Rebuild Id Mapping
94 void CPDStringMapper::buildIdMap()
96 _IdMap.clear();
98 TStringMap::iterator it;
99 for (it=_StringMap.begin(); it!=_StringMap.end(); ++it)
101 const std::string& str = (*it).first;
102 uint32 id = (*it).second;
104 _IdMap[id] = it;