1 // NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
2 // Copyright (C) 2010 Winch Gate Property Limited
4 // This source file has been modified by the following contributors:
5 // Copyright (C) 2010-2013 Matt RAYKOWSKI (sfb) <matt.raykowski@gmail.com>
6 // Copyright (C) 2019 Jan BOON (Kaetemi) <jan.boon@kaetemi.be>
8 // This program is free software: you can redistribute it and/or modify
9 // it under the terms of the GNU Affero General Public License as
10 // published by the Free Software Foundation, either version 3 of the
11 // License, or (at your option) any later version.
13 // This program is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 // GNU Affero General Public License for more details.
18 // You should have received a copy of the GNU Affero General Public License
19 // along with this program. If not, see <http://www.gnu.org/licenses/>.
24 #include "nel/ligo/zone_bank.h"
26 #include "nel/misc/debug.h"
27 #include "nel/misc/file.h"
28 #include "nel/misc/i_xml.h"
29 #include "nel/misc/o_xml.h"
33 using namespace NLMISC
;
42 // ***************************************************************************
44 // ***************************************************************************
46 string
CZoneBankElement::_NoCatTypeFound
= STRING_NO_CAT_TYPE
;
48 // ---------------------------------------------------------------------------
49 CZoneBankElement::CZoneBankElement()
54 // ---------------------------------------------------------------------------
55 void CZoneBankElement::addCategory (const std::string
&CatType
, const std::string
&CatValue
)
57 _CategoriesMap
.insert(pair
<string
,string
>(CatType
, CatValue
));
60 // ---------------------------------------------------------------------------
61 const string
& CZoneBankElement::getName ()
63 return getCategory ("zone");
66 // ---------------------------------------------------------------------------
67 const string
& CZoneBankElement::getSize ()
69 return getCategory ("size");
72 // ---------------------------------------------------------------------------
73 const string
& CZoneBankElement::getCategory (const string
&CatType
)
75 map
<string
,string
>::iterator it
= _CategoriesMap
.find (CatType
);
76 if (it
== _CategoriesMap
.end())
77 return _NoCatTypeFound
;
82 // ---------------------------------------------------------------------------
83 void CZoneBankElement::convertSize()
85 const string
&sizeString
= getSize();
89 for (i
= 0; i
< sizeString
.size(); ++i
)
91 if (sizeString
[i
] == 'x')
94 sTmp
+= sizeString
[i
];
96 fromString(sTmp
, _SizeX
);
99 for (; i
< sizeString
.size(); ++i
)
101 sTmp
+= sizeString
[i
];
103 fromString(sTmp
, _SizeY
);
106 // ---------------------------------------------------------------------------
107 void CZoneBankElement::serial (NLMISC::IStream
&f
)
109 f
.xmlPush ("LIGOZONE");
112 f
.serialVersion (version
);
113 string check
= "LIGOZONE";
114 f
.serialCheck (check
);
116 f
.xmlPush ("CATEGORIES");
117 f
.serialCont (_CategoriesMap
);
121 f
.serialCont (_Mask
);
130 // ---------------------------------------------------------------------------
131 void CZoneBankElement::setMask (const std::vector
<bool> &mask
, uint8 sizeX
, uint8 sizeY
)
138 // ***************************************************************************
140 // ***************************************************************************
142 // ---------------------------------------------------------------------------
143 void CZoneBank::debugSaveInit (CZoneBankElement
&zbeTmp
, const string
&fileName
)
148 fileOut
.open (fileName
);
150 output
.init (&fileOut
);
151 zbeTmp
.serial (output
);
153 catch (const Exception
& /*e*/)
159 // ---------------------------------------------------------------------------
160 void CZoneBank::debugInit(const std::string
&sPath
) // \ todo trap remove this
162 CZoneBankElement zbeTmp
;
163 zbeTmp
.addCategory ("zone", "Zone001");
164 zbeTmp
.addCategory ("size", "1x1");
165 zbeTmp
.addCategory ("material", "titFleur");
166 zbeTmp
._Mask
.push_back (true);
167 _ElementsMap
.insert (pair
<string
,CZoneBankElement
>(zbeTmp
.getName(), zbeTmp
));
168 debugSaveInit (zbeTmp
, sPath
+ "Zone001.ligozone");
169 zbeTmp
._CategoriesMap
.clear ();
170 zbeTmp
._Mask
.clear ();
173 zbeTmp
.addCategory ("zone", "Zone002");
174 zbeTmp
.addCategory ("size", "1x1");
175 zbeTmp
.addCategory ("material", "titFleur");
176 zbeTmp
._Mask
.push_back (true);
177 _ElementsMap
.insert (pair
<string
,CZoneBankElement
>(zbeTmp
.getName(), zbeTmp
));
178 debugSaveInit (zbeTmp
, sPath
+ "Zone002.ligozone");
179 zbeTmp
._CategoriesMap
.clear ();
180 zbeTmp
._Mask
.clear ();
182 zbeTmp
.addCategory ("zone", "Zone003");
183 zbeTmp
.addCategory ("size", "2x2");
184 zbeTmp
.addCategory ("material", "titFleur");
185 zbeTmp
._Mask
.push_back (true);
186 zbeTmp
._Mask
.push_back (true);
187 zbeTmp
._Mask
.push_back (false);
188 zbeTmp
._Mask
.push_back (true);
189 _ElementsMap
.insert (pair
<string
,CZoneBankElement
>(zbeTmp
.getName(), zbeTmp
));
190 debugSaveInit (zbeTmp
, sPath
+ "Zone003.ligozone");
191 zbeTmp
._CategoriesMap
.clear ();
192 zbeTmp
._Mask
.clear ();
194 zbeTmp
.addCategory ("zone", "Zone004");
195 zbeTmp
.addCategory ("size", "2x2");
196 zbeTmp
.addCategory ("material", "grozFleur");
197 zbeTmp
._Mask
.push_back (false);
198 zbeTmp
._Mask
.push_back (true);
199 zbeTmp
._Mask
.push_back (true);
200 zbeTmp
._Mask
.push_back (true);
201 _ElementsMap
.insert (pair
<string
,CZoneBankElement
>(zbeTmp
.getName(), zbeTmp
));
202 debugSaveInit (zbeTmp
, sPath
+ "Zone004.ligozone");
203 zbeTmp
._CategoriesMap
.clear ();
204 zbeTmp
._Mask
.clear ();
206 zbeTmp
.addCategory ("zone", "Zone005");
207 zbeTmp
.addCategory ("size", "1x1");
208 zbeTmp
.addCategory ("material", "grozFleur");
209 zbeTmp
._Mask
.push_back (true);
210 _ElementsMap
.insert (pair
<string
,CZoneBankElement
>(zbeTmp
.getName(), zbeTmp
));
211 debugSaveInit (zbeTmp
, sPath
+ "Zone005.ligozone");
212 zbeTmp
._CategoriesMap
.clear ();
213 zbeTmp
._Mask
.clear ();
215 zbeTmp
.addCategory ("zone", "Zone006");
216 zbeTmp
.addCategory ("size", "4x2");
217 zbeTmp
.addCategory ("material", "grozFleur");
218 zbeTmp
._Mask
.push_back (true);
219 zbeTmp
._Mask
.push_back (true);
220 zbeTmp
._Mask
.push_back (false);
221 zbeTmp
._Mask
.push_back (false);
222 zbeTmp
._Mask
.push_back (false);
223 zbeTmp
._Mask
.push_back (true);
224 zbeTmp
._Mask
.push_back (true);
225 zbeTmp
._Mask
.push_back (false);
226 _ElementsMap
.insert (pair
<string
,CZoneBankElement
>(zbeTmp
.getName(), zbeTmp
));
227 debugSaveInit (zbeTmp
, sPath
+ "Zone006.ligozone");
228 zbeTmp
._CategoriesMap
.clear ();
229 zbeTmp
._Mask
.clear ();
230 _ElementsMap
.clear ();
232 zbeTmp
.addCategory ("zone", "Zone007");
233 zbeTmp
.addCategory ("size", "1x1");
234 zbeTmp
.addCategory ("material", "grozFleur");
235 zbeTmp
._Mask
.push_back (true);
236 _ElementsMap
.insert (pair
<string
,CZoneBankElement
>(zbeTmp
.getName(), zbeTmp
));
237 debugSaveInit (zbeTmp
, sPath
+ "Zone007.ligozone");
238 zbeTmp
._CategoriesMap
.clear ();
239 zbeTmp
._Mask
.clear ();
240 _ElementsMap
.clear ();
242 zbeTmp
.addCategory ("zone", "Zone008");
243 zbeTmp
.addCategory ("size", "2x2");
244 zbeTmp
.addCategory ("material", "prairie");
245 zbeTmp
._Mask
.push_back (true);
246 zbeTmp
._Mask
.push_back (true);
247 zbeTmp
._Mask
.push_back (true);
248 zbeTmp
._Mask
.push_back (true);
249 _ElementsMap
.insert (pair
<string
,CZoneBankElement
>(zbeTmp
.getName(), zbeTmp
));
250 debugSaveInit (zbeTmp
, sPath
+ "Zone008.ligozone");
251 zbeTmp
._CategoriesMap
.clear ();
252 zbeTmp
._Mask
.clear ();
253 _ElementsMap
.clear ();
255 zbeTmp
.addCategory ("zone", "Zone009");
256 zbeTmp
.addCategory ("size", "2x2");
257 zbeTmp
.addCategory ("material", "prairie");
258 zbeTmp
._Mask
.push_back (true);
259 zbeTmp
._Mask
.push_back (true);
260 zbeTmp
._Mask
.push_back (true);
261 zbeTmp
._Mask
.push_back (true);
262 _ElementsMap
.insert (pair
<string
,CZoneBankElement
>(zbeTmp
.getName(), zbeTmp
));
263 debugSaveInit (zbeTmp
, sPath
+ "Zone009.ligozone");
264 zbeTmp
._CategoriesMap
.clear ();
265 zbeTmp
._Mask
.clear ();
266 _ElementsMap
.clear ();
268 zbeTmp
.addCategory ("zone", "Zone010");
269 zbeTmp
.addCategory ("size", "1x1");
270 zbeTmp
.addCategory ("material", "prairie");
271 zbeTmp
._Mask
.push_back (true);
272 _ElementsMap
.insert (pair
<string
,CZoneBankElement
>(zbeTmp
.getName(), zbeTmp
));
273 debugSaveInit (zbeTmp
, sPath
+ "Zone010.ligozone");
274 zbeTmp
._CategoriesMap
.clear ();
275 zbeTmp
._Mask
.clear ();
276 _ElementsMap
.clear ();
278 zbeTmp
.addCategory ("zone", "WT0");
279 zbeTmp
.addCategory ("size", "1x1");
280 zbeTmp
.addCategory ("transname", "grozFleur-prairie");
281 zbeTmp
.addCategory ("transtype", "Flat");
282 zbeTmp
.addCategory ("transnum", "0");
283 zbeTmp
._Mask
.push_back (true);
284 _ElementsMap
.insert (pair
<string
,CZoneBankElement
>(zbeTmp
.getName(), zbeTmp
));
285 debugSaveInit (zbeTmp
, sPath
+ "WT0.ligozone");
286 zbeTmp
._CategoriesMap
.clear ();
287 zbeTmp
._Mask
.clear ();
288 _ElementsMap
.clear ();
290 zbeTmp
.addCategory ("zone", "WT1");
291 zbeTmp
.addCategory ("size", "1x1");
292 zbeTmp
.addCategory ("transname", "grozFleur-prairie");
293 zbeTmp
.addCategory ("transtype", "Flat");
294 zbeTmp
.addCategory ("transnum", "1");
295 zbeTmp
._Mask
.push_back (true);
296 _ElementsMap
.insert (pair
<string
,CZoneBankElement
>(zbeTmp
.getName(), zbeTmp
));
297 debugSaveInit (zbeTmp
, sPath
+ "WT1.ligozone");
298 zbeTmp
._CategoriesMap
.clear ();
299 zbeTmp
._Mask
.clear ();
300 _ElementsMap
.clear ();
302 zbeTmp
.addCategory ("zone", "WT2");
303 zbeTmp
.addCategory ("size", "1x1");
304 zbeTmp
.addCategory ("transname", "grozFleur-prairie");
305 zbeTmp
.addCategory ("transtype", "Flat");
306 zbeTmp
.addCategory ("transnum", "2");
307 zbeTmp
._Mask
.push_back (true);
308 _ElementsMap
.insert (pair
<string
,CZoneBankElement
>(zbeTmp
.getName(), zbeTmp
));
309 debugSaveInit (zbeTmp
, sPath
+ "WT2.ligozone");
310 zbeTmp
._CategoriesMap
.clear ();
311 zbeTmp
._Mask
.clear ();
312 _ElementsMap
.clear ();
314 zbeTmp
.addCategory ("zone", "WT3");
315 zbeTmp
.addCategory ("size", "1x1");
316 zbeTmp
.addCategory ("transname", "grozFleur-prairie");
317 zbeTmp
.addCategory ("transtype", "CornerA");
318 zbeTmp
.addCategory ("transnum", "3");
319 zbeTmp
._Mask
.push_back (true);
320 _ElementsMap
.insert (pair
<string
,CZoneBankElement
>(zbeTmp
.getName(), zbeTmp
));
321 debugSaveInit (zbeTmp
, sPath
+ "WT3.ligozone");
322 zbeTmp
._CategoriesMap
.clear ();
323 zbeTmp
._Mask
.clear ();
324 _ElementsMap
.clear ();
326 zbeTmp
.addCategory ("zone", "WT4");
327 zbeTmp
.addCategory ("size", "1x1");
328 zbeTmp
.addCategory ("transname", "grozFleur-prairie");
329 zbeTmp
.addCategory ("transtype", "CornerA");
330 zbeTmp
.addCategory ("transnum", "4");
331 zbeTmp
._Mask
.push_back (true);
332 _ElementsMap
.insert (pair
<string
,CZoneBankElement
>(zbeTmp
.getName(), zbeTmp
));
333 debugSaveInit (zbeTmp
, sPath
+ "WT4.ligozone");
334 zbeTmp
._CategoriesMap
.clear ();
335 zbeTmp
._Mask
.clear ();
336 _ElementsMap
.clear ();
338 zbeTmp
.addCategory ("zone", "WT5");
339 zbeTmp
.addCategory ("size", "1x1");
340 zbeTmp
.addCategory ("transname", "grozFleur-prairie");
341 zbeTmp
.addCategory ("transtype", "CornerA");
342 zbeTmp
.addCategory ("transnum", "5");
343 zbeTmp
._Mask
.push_back (true);
344 _ElementsMap
.insert (pair
<string
,CZoneBankElement
>(zbeTmp
.getName(), zbeTmp
));
345 debugSaveInit (zbeTmp
, sPath
+ "WT5.ligozone");
346 zbeTmp
._CategoriesMap
.clear ();
347 zbeTmp
._Mask
.clear ();
348 _ElementsMap
.clear ();
350 zbeTmp
.addCategory ("zone", "WT6");
351 zbeTmp
.addCategory ("size", "1x1");
352 zbeTmp
.addCategory ("transname", "grozFleur-prairie");
353 zbeTmp
.addCategory ("transtype", "CornerB");
354 zbeTmp
.addCategory ("transnum", "6");
355 zbeTmp
._Mask
.push_back (true);
356 _ElementsMap
.insert (pair
<string
,CZoneBankElement
>(zbeTmp
.getName(), zbeTmp
));
357 debugSaveInit (zbeTmp
, sPath
+ "WT6.ligozone");
358 zbeTmp
._CategoriesMap
.clear ();
359 zbeTmp
._Mask
.clear ();
360 _ElementsMap
.clear ();
362 zbeTmp
.addCategory ("zone", "WT7");
363 zbeTmp
.addCategory ("size", "1x1");
364 zbeTmp
.addCategory ("transname", "grozFleur-prairie");
365 zbeTmp
.addCategory ("transtype", "CornerB");
366 zbeTmp
.addCategory ("transnum", "7");
367 zbeTmp
._Mask
.push_back (true);
368 _ElementsMap
.insert (pair
<string
,CZoneBankElement
>(zbeTmp
.getName(), zbeTmp
));
369 debugSaveInit (zbeTmp
, sPath
+ "WT7.ligozone");
370 zbeTmp
._CategoriesMap
.clear ();
371 zbeTmp
._Mask
.clear ();
372 _ElementsMap
.clear ();
374 zbeTmp
.addCategory ("zone", "WT8");
375 zbeTmp
.addCategory ("size", "1x1");
376 zbeTmp
.addCategory ("transname", "grozFleur-prairie");
377 zbeTmp
.addCategory ("transtype", "CornerB");
378 zbeTmp
.addCategory ("transnum", "8");
379 zbeTmp
._Mask
.push_back (true);
380 _ElementsMap
.insert (pair
<string
,CZoneBankElement
>(zbeTmp
.getName(), zbeTmp
));
381 debugSaveInit (zbeTmp
, sPath
+ "WT8.ligozone");
382 zbeTmp
._CategoriesMap
.clear ();
383 zbeTmp
._Mask
.clear ();
384 _ElementsMap
.clear ();
386 zbeTmp
.addCategory ("zone", "ZT0");
387 zbeTmp
.addCategory ("size", "1x1");
388 zbeTmp
.addCategory ("transname", "titFleur-grozFleur");
389 zbeTmp
.addCategory ("transtype", "Flat");
390 zbeTmp
.addCategory ("transnum", "0");
391 zbeTmp
._Mask
.push_back (true);
392 _ElementsMap
.insert (pair
<string
,CZoneBankElement
>(zbeTmp
.getName(), zbeTmp
));
393 debugSaveInit (zbeTmp
, sPath
+ "ZT0.ligozone");
394 zbeTmp
._CategoriesMap
.clear ();
395 zbeTmp
._Mask
.clear ();
396 _ElementsMap
.clear ();
398 zbeTmp
.addCategory ("zone", "ZT1");
399 zbeTmp
.addCategory ("size", "1x1");
400 zbeTmp
.addCategory ("transname", "titFleur-grozFleur");
401 zbeTmp
.addCategory ("transtype", "Flat");
402 zbeTmp
.addCategory ("transnum", "1");
403 zbeTmp
._Mask
.push_back (true);
404 _ElementsMap
.insert (pair
<string
,CZoneBankElement
>(zbeTmp
.getName(), zbeTmp
));
405 debugSaveInit (zbeTmp
, sPath
+ "ZT1.ligozone");
406 zbeTmp
._CategoriesMap
.clear ();
407 zbeTmp
._Mask
.clear ();
408 _ElementsMap
.clear ();
410 zbeTmp
.addCategory ("zone", "ZT2");
411 zbeTmp
.addCategory ("size", "1x1");
412 zbeTmp
.addCategory ("transname", "titFleur-grozFleur");
413 zbeTmp
.addCategory ("transtype", "Flat");
414 zbeTmp
.addCategory ("transnum", "2");
415 zbeTmp
._Mask
.push_back (true);
416 _ElementsMap
.insert (pair
<string
,CZoneBankElement
>(zbeTmp
.getName(), zbeTmp
));
417 debugSaveInit (zbeTmp
, sPath
+ "ZT2.ligozone");
418 zbeTmp
._CategoriesMap
.clear ();
419 zbeTmp
._Mask
.clear ();
420 _ElementsMap
.clear ();
422 zbeTmp
.addCategory ("zone", "ZT3");
423 zbeTmp
.addCategory ("size", "1x1");
424 zbeTmp
.addCategory ("transname", "titFleur-grozFleur");
425 zbeTmp
.addCategory ("transtype", "CornerA");
426 zbeTmp
.addCategory ("transnum", "3");
427 zbeTmp
._Mask
.push_back (true);
428 _ElementsMap
.insert (pair
<string
,CZoneBankElement
>(zbeTmp
.getName(), zbeTmp
));
429 debugSaveInit (zbeTmp
, sPath
+ "ZT3.ligozone");
430 zbeTmp
._CategoriesMap
.clear ();
431 zbeTmp
._Mask
.clear ();
432 _ElementsMap
.clear ();
434 zbeTmp
.addCategory ("zone", "ZT4");
435 zbeTmp
.addCategory ("size", "1x1");
436 zbeTmp
.addCategory ("transname", "titFleur-grozFleur");
437 zbeTmp
.addCategory ("transtype", "CornerA");
438 zbeTmp
.addCategory ("transnum", "4");
439 zbeTmp
._Mask
.push_back (true);
440 _ElementsMap
.insert (pair
<string
,CZoneBankElement
>(zbeTmp
.getName(), zbeTmp
));
441 debugSaveInit (zbeTmp
, sPath
+ "ZT4.ligozone");
442 zbeTmp
._CategoriesMap
.clear ();
443 zbeTmp
._Mask
.clear ();
444 _ElementsMap
.clear ();
446 zbeTmp
.addCategory ("zone", "ZT5");
447 zbeTmp
.addCategory ("size", "1x1");
448 zbeTmp
.addCategory ("transname", "titFleur-grozFleur");
449 zbeTmp
.addCategory ("transtype", "CornerA");
450 zbeTmp
.addCategory ("transnum", "5");
451 zbeTmp
._Mask
.push_back (true);
452 _ElementsMap
.insert (pair
<string
,CZoneBankElement
>(zbeTmp
.getName(), zbeTmp
));
453 debugSaveInit (zbeTmp
, sPath
+ "ZT5.ligozone");
454 zbeTmp
._CategoriesMap
.clear ();
455 zbeTmp
._Mask
.clear ();
456 _ElementsMap
.clear ();
458 zbeTmp
.addCategory ("zone", "ZT6");
459 zbeTmp
.addCategory ("size", "1x1");
460 zbeTmp
.addCategory ("transname", "titFleur-grozFleur");
461 zbeTmp
.addCategory ("transtype", "CornerB");
462 zbeTmp
.addCategory ("transnum", "6");
463 zbeTmp
._Mask
.push_back (true);
464 _ElementsMap
.insert (pair
<string
,CZoneBankElement
>(zbeTmp
.getName(), zbeTmp
));
465 debugSaveInit (zbeTmp
, sPath
+ "ZT6.ligozone");
466 zbeTmp
._CategoriesMap
.clear ();
467 zbeTmp
._Mask
.clear ();
468 _ElementsMap
.clear ();
470 zbeTmp
.addCategory ("zone", "ZT7");
471 zbeTmp
.addCategory ("size", "1x1");
472 zbeTmp
.addCategory ("transname", "titFleur-grozFleur");
473 zbeTmp
.addCategory ("transtype", "CornerB");
474 zbeTmp
.addCategory ("transnum", "7");
475 zbeTmp
._Mask
.push_back (true);
476 _ElementsMap
.insert (pair
<string
,CZoneBankElement
>(zbeTmp
.getName(), zbeTmp
));
477 debugSaveInit (zbeTmp
, sPath
+ "ZT7.ligozone");
478 zbeTmp
._CategoriesMap
.clear ();
479 zbeTmp
._Mask
.clear ();
480 _ElementsMap
.clear ();
482 zbeTmp
.addCategory ("zone", "ZT8");
483 zbeTmp
.addCategory ("size", "1x1");
484 zbeTmp
.addCategory ("transname", "titFleur-grozFleur");
485 zbeTmp
.addCategory ("transtype", "CornerB");
486 zbeTmp
.addCategory ("transnum", "8");
487 zbeTmp
._Mask
.push_back (true);
488 _ElementsMap
.insert (pair
<string
,CZoneBankElement
>(zbeTmp
.getName(), zbeTmp
));
489 debugSaveInit (zbeTmp
, sPath
+ "ZT8.ligozone");
490 zbeTmp
._CategoriesMap
.clear ();
491 zbeTmp
._Mask
.clear ();
492 _ElementsMap
.clear ();
496 // ---------------------------------------------------------------------------
497 void CZoneBank::reset ()
499 _ElementsMap
.clear ();
503 // ---------------------------------------------------------------------------
504 bool CZoneBank::initFromPath(const std::string
&sPathName
, std::string
&error
)
506 std::vector
<std::string
> files
;
507 NLMISC::CPath::getPathContent(sPathName
, false, false, true, files
);
509 for (uint i
= 0, len
= files
.size(); i
< len
; ++i
)
511 std::string ext
= NLMISC::CFile::getExtension(files
[i
]);
513 if (ext
== "ligozone")
515 if (!addElement(files
[i
], error
))
523 // ---------------------------------------------------------------------------
524 bool CZoneBank::addElement (const std::string
&elementName
, std::string
&error
)
528 CZoneBankElement zbeTmp
;
530 if (fileIn
.open (elementName
))
534 zbeTmp
.serial (input
);
535 _ElementsMap
.insert (pair
<string
,CZoneBankElement
>(zbeTmp
.getName(),zbeTmp
));
540 error
= "Can't open file " + elementName
;
543 catch (const Exception
& e
)
545 error
= "Error while loading ligozone "+elementName
+" : "+e
.what();
550 // ---------------------------------------------------------------------------
551 void CZoneBank::getCategoriesType (std::vector
<std::string
> &CategoriesType
)
553 map
<string
,CZoneBankElement
>::iterator itElt
= _ElementsMap
.begin();
555 while (itElt
!= _ElementsMap
.end())
557 CZoneBankElement
&rZBE
= itElt
->second
;
559 map
<string
,string
>::iterator it
= rZBE
._CategoriesMap
.begin();
561 while (it
!= rZBE
._CategoriesMap
.end())
564 for (uint32 k
= 0; k
< CategoriesType
.size(); ++k
)
565 if (it
->first
== CategoriesType
[k
])
571 CategoriesType
.push_back (it
->first
);
579 // ---------------------------------------------------------------------------
580 void CZoneBank::getCategoryValues (const std::string
&CategoryType
, std::vector
<std::string
> &CategoryValues
)
582 map
<string
,CZoneBankElement
>::iterator itElt
= _ElementsMap
.begin();
584 while (itElt
!= _ElementsMap
.end())
586 CZoneBankElement
&rZBE
= itElt
->second
;
588 map
<string
,string
>::iterator it
= rZBE
._CategoriesMap
.find (CategoryType
);
590 if (it
!= rZBE
._CategoriesMap
.end())
593 for (uint32 k
= 0; k
< CategoryValues
.size(); ++k
)
594 if (it
->second
== CategoryValues
[k
])
600 CategoryValues
.push_back (it
->second
);
606 // ---------------------------------------------------------------------------
607 CZoneBankElement
*CZoneBank::getElementByZoneName (const std::string
&ZoneName
)
609 map
<string
,CZoneBankElement
>::iterator it
= _ElementsMap
.find (ZoneName
);
610 if (it
!= _ElementsMap
.end())
612 return &(it
->second
);
617 // ---------------------------------------------------------------------------
618 void CZoneBank::resetSelection ()
623 // ---------------------------------------------------------------------------
624 void CZoneBank::addOrSwitch (const std::string
&CategoryType
, const std::string
&CategoryValue
)
626 map
<string
,CZoneBankElement
>::iterator itElt
= _ElementsMap
.begin();
628 while (itElt
!= _ElementsMap
.end())
630 CZoneBankElement
&rZBE
= itElt
->second
;
632 map
<string
,string
>::iterator it
= rZBE
._CategoriesMap
.find (CategoryType
);
634 if (it
!= rZBE
._CategoriesMap
.end())
636 if (it
->second
== CategoryValue
)
638 // Check if the element is not already present in the selection
640 for (uint32 k
= 0; k
< _Selection
.size(); ++k
)
641 if (&rZBE
== _Selection
[k
])
647 _Selection
.push_back (&rZBE
);
654 // ---------------------------------------------------------------------------
655 void CZoneBank::addAndSwitch (const std::string
&CategoryType
, const std::string
&CategoryValue
)
658 // And the selection with some constraints
659 // All elements of the selection must have a catType and catValue equal to those given in parameters
660 for (i
= 0; i
< _Selection
.size(); ++i
)
662 CZoneBankElement
*pZBE
= _Selection
[i
];
665 map
<string
,string
>::iterator it
= pZBE
->_CategoriesMap
.find (CategoryType
);
666 if (it
!= pZBE
->_CategoriesMap
.end())
668 if (it
->second
== CategoryValue
)
673 _Selection
[i
] = NULL
; // Mark this item to be removed
676 // Remove all unused items
677 for (i
= 0, j
= 0; i
< _Selection
.size(); ++i
)
679 if (_Selection
[i
] != NULL
)
681 _Selection
[j
] = _Selection
[i
];
685 _Selection
.resize (j
);
688 // ---------------------------------------------------------------------------
689 void CZoneBank::getSelection (std::vector
<CZoneBankElement
*> &SelectedElements
)
691 SelectedElements
= _Selection
;
694 // ***************************************************************************
696 } // namespace NLLIGO