#pragma once #include #include "DString.hpp" #include "Iterator.tlh" #include "ReverseIterator.tlh" //----------------------------------------------------------------------------- // DStringArray //----------------------------------------------------------------------------- class DStringArray : public std::vector { using inherited = std::vector ; public: // using Iterator = Iterator >; public: // Nothing different with Array but add some search functions // find string starting at left, -1 if not found int Find (const DString & str) const { for (auto Iter = Iterator::From (*this); Iter; Iter++) { const auto & s = Iter (); if (s == str) return Iter.Index (); } return -1; } // find string starting at left, -1 if not found int NCFind (const DString & str) const { for (auto Iter = Iterator::From (*this); Iter; Iter++) { const auto & s = Iter (); if (!s.CompareNoCase (str)) return Iter.Index (); } return -1; } int ReverseFind (const DString & str) const { for (auto Iter = ReverseIterator::From (*this); Iter; Iter++) { const auto & s = Iter (); if (s == str) return Iter.Index (); } return -1; } bool IsExist (const DString & str) const { return (Find (str) >= 0); } bool IsEmpty () const { return empty (); } void Add (const DString & str) { push_back (str); } void Add (DString && str) { push_back (std::move (str)); } int GetSize () const { return (int) size (); } void Reset () { clear (); } int GetStringLength (void) const { int Length = 0; for (auto Iter = Iterator::From (*this); Iter; Iter++) { const auto & s = Iter (); Length += s.GetLength (); } return Length; } virtual DString ToString (void) const { return ToString (NULL); } virtual DString ToString (const char * sep) const { int seplen = (int) strlen (sep); int length = 0; for (auto Iter = Iterator::From (*this); Iter; Iter++) { const auto & s = Iter (); length += s.GetLength () + 2; if (sep) length += seplen + 2; } DString rc; rc.GetBuffer (length); for (auto Iter = Iterator::From (*this); Iter; Iter++) { const auto & s = Iter (); rc += s; if (sep) rc += sep; } return rc; } };