00001 // ZenLib::InfoMap - Helper for InfoMap 00002 // Copyright (C) 2007-2011 MediaArea.net SARL, Info@MediaArea.net 00003 // 00004 // This software is provided 'as-is', without any express or implied 00005 // warranty. In no event will the authors be held liable for any damages 00006 // arising from the use of this software. 00007 // 00008 // Permission is granted to anyone to use this software for any purpose, 00009 // including commercial applications, and to alter it and redistribute it 00010 // freely, subject to the following restrictions: 00011 // 00012 // 1. The origin of this software must not be misrepresented; you must not 00013 // claim that you wrote the original software. If you use this software 00014 // in a product, an acknowledgment in the product documentation would be 00015 // appreciated but is not required. 00016 // 2. Altered source versions must be plainly marked as such, and must not be 00017 // misrepresented as being the original software. 00018 // 3. This notice may not be removed or altered from any source distribution. 00019 // 00020 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 00021 // 00022 // 00023 // 00024 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 00025 00026 //--------------------------------------------------------------------------- 00027 #ifndef ZenLib_InfoMapH 00028 #define ZenLib_InfoMapH 00029 //--------------------------------------------------------------------------- 00030 00031 //--------------------------------------------------------------------------- 00032 #include "ZenLib/ZtringList.h" 00033 #include <map> 00034 //--------------------------------------------------------------------------- 00035 00036 namespace ZenLib 00037 { 00038 00039 //*************************************************************************** 00040 /// @brief Helper for InfoMap 00041 //*************************************************************************** 00042 00043 class InfoMap : public std::multimap<Ztring, ZtringList> 00044 { 00045 public : 00046 //Constructors/Destructor 00047 InfoMap (); 00048 InfoMap (const Ztring &Source); 00049 InfoMap (const Char *Source); 00050 #ifdef _UNICODE 00051 InfoMap (const char *Source); //convert a UTF-8 string into Unicode 00052 #endif 00053 00054 //In/Out 00055 const Ztring &Get (const Ztring &Value, size_t Pos) const; 00056 const Ztring &Get (const Ztring &Value, size_t Pos, const Ztring &WithValue, size_t WithValue_Pos) const; 00057 void Write (const Ztring &NewLanguage); 00058 00059 //Configuration 00060 /// @brief Set the Separator character 00061 void Separator_Set (size_type Level, const Ztring &NewSeparator); 00062 /// @brief Set the Quote character 00063 /// During Read() or Write() method, if Separator is in the sequence, we must quote it 00064 void Quote_Set (const Ztring &NewQuote); 00065 /// @brief Set the Maximum number of element to read 00066 /// During Read() or Write() method, if there is more elements, merge them with the last element 00067 void Max_Set (size_type Level, size_type Max); 00068 00069 protected : 00070 Ztring Separator[2]; 00071 Ztring Quote; 00072 size_type Max[2]; 00073 }; 00074 00075 } //namespace 00076 #endif 00077