00001 // ZenLib::ZtringList - std::vector<std::(w)string> is better 00002 // Copyright (C) 2002-2005 Jerome Martinez, Zen@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 // ZtringList 00023 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 00024 // 00025 // More methods for std::vector<std::(w)string> 00026 // 00027 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 00028 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 00029 // 00030 // 2005-03-25, Zen@MediaArea.net 00031 // New design 00032 // 00033 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 00034 00035 //--------------------------------------------------------------------------- 00036 #ifndef ZenLib_ZtringListH 00037 #define ZenLib_ZtringListH 00038 //--------------------------------------------------------------------------- 00039 00040 //--------------------------------------------------------------------------- 00041 #include <ZenLib/Ztring.h> 00042 #include <vector> 00043 //--------------------------------------------------------------------------- 00044 00045 namespace ZenLib 00046 { 00047 00048 //*************************************************************************** 00049 /// @brief Vector of strings manipulation (based on std::vector<std::(w)string>) 00050 //*************************************************************************** 00051 00052 class ZtringList : public std::vector<Ztring> 00053 { 00054 public : 00055 //Constructors/destructor 00056 ZtringList (); 00057 ZtringList (const ZtringList &Source); 00058 ZtringList (const Ztring &Source); 00059 ZtringList (const Char *Source); 00060 #ifdef _UNICODE 00061 ZtringList (const char *Source); //convert a UTF-8 string into Unicode 00062 #endif 00063 00064 //Operators 00065 bool operator == (const ZtringList &Source) const; 00066 bool operator != (const ZtringList &Source) const; 00067 ZtringList &operator += (const ZtringList &Source); 00068 ZtringList &operator = (const ZtringList &Source); 00069 00070 Ztring &operator () (size_t Pos); ///< Same as [], but write a empty string if Pos doesn't exist yet 00071 00072 //In/out 00073 Ztring Read () const; //Read all 00074 Ztring Read (size_t Pos) const; //Read a string 00075 void Write (const Ztring &ToWrite); //Write all 00076 void Write (const Ztring &ToWrite, size_t Pos); //Write a string 00077 /// @brief Insert a string at position Pos0 00078 void Insert (const Ztring &ToInsert, size_t Pos0) {insert(begin()+Pos0, ToInsert);}; 00079 /// @brief Delete a string at position Pos0 00080 void Delete (size_t Pos0) {erase(begin()+Pos0);}; 00081 00082 //Edition 00083 /// @brief Swap 2 positions 00084 void Swap (size_t Pos0_A, size_t Pos0_B); 00085 /// @brief Sort 00086 void Sort (ztring_t Options=Ztring_Nothing); 00087 00088 //Information 00089 /// @brief Find the position of the string in the vector 00090 size_t Find (const Ztring &ToFind, size_t PosBegin=0, const Ztring &Comparator=_T("=="), ztring_t Options=Ztring_Nothing) const; 00091 /// @brief Return the length of the longest string in the list. 00092 size_t MaxStringLength_Get (); 00093 00094 //Configuration 00095 /// @brief Set the Separator character 00096 void Separator_Set (size_t Level, const Ztring &NewSeparator); 00097 /// @brief Set the Quote character 00098 /// During Read() or Write() method, if Separator is in the sequence, we must quote it 00099 void Quote_Set (const Ztring &NewQuote); 00100 00101 protected : 00102 Ztring Separator[1]; 00103 Ztring Quote; 00104 }; 00105 00106 } //namespace 00107 #endif 00108