Rev 246 | Blame | Compare with Previous | Last modification | View Log | RSS feed
#include "WStringList.h"#include "spkdef.h"namespace Utils {WStringList::WStringList(){_lList = new CList<WStringNode>();}WStringList::~WStringList(){delete _lList;}void WStringList::pushBack(const WString& str, const WString& data){WStringNode* strNode = new WStringNode;strNode->str = str;strNode->data = data;_lList->push_back(strNode);}void WStringList::pushBackUnique(const WString& str, const WString& data){if (!contains(str)){WStringNode* strNode = new WStringNode;strNode->str = str;strNode->data = data;_lList->push_back(strNode);}}void WStringList::popFront(){if (!_lList->empty()){delete _lList->front();_lList->removeAt(0);}}void WStringList::popBack(){if (!_lList->empty()){delete _lList->back();_lList->pop_back();}}void WStringList::pushBack(const WString& str){pushBack(str, L"");}void WStringList::pushBackUnique(const WString& str){pushBackUnique(str, L"");}void WStringList::pushFront(const WString &str, const WString &data){WStringNode* strNode = new WStringNode;strNode->str = str;strNode->data = data;_lList->push_front(strNode);}void WStringList::pushFront(const WString &str){pushFront(str, L"");}void WStringList::insertAt(size_t at, const WString& str, const WString& data){WStringNode *strNode = new WStringNode;strNode->str = str;strNode->data = data;_lList->insertAt(at, strNode);}void WStringList::insertAt(size_t at, const WString& str){insertAt(at, str, L"");}void WStringList::clear(){_lList->clear();}void WStringList::tokenise(const WString &str, const WString &token){int max = 0;Utils::WString *strs = str.tokenise(token, &max);for ( int i = 0; i < max; i++ ) {this->pushBack(strs[i], Utils::WString::Null());}CLEANSPLIT(strs, max);}Utils::WString WStringList::firstString(){WStringNode *node = _lList->first();if ( node ) return node->str;return Utils::WString::Null();}Utils::WString WStringList::nextString(){WStringNode *node = _lList->next();if ( node ) return node->str;return Utils::WString::Null();}Utils::WStringNode *WStringList::first(){return _lList->first();}Utils::WStringNode *WStringList::next(){return _lList->next();}WStringListIterator WStringList::begin() const{return _lList->begin();}WStringListIterator WStringList::end() const{return _lList->end();}Utils::WString WStringList::front() const{auto front = _lList->front();if (front)return front->str;return Utils::WString::Null();}Utils::WString WStringList::back() const{auto front = _lList->back();if (front)return front->str;return Utils::WString::Null();}Utils::WStringNode *WStringList::get(size_t i) const{return _lList->get(i);}Utils::WString WStringList::findData(const Utils::WString &data, bool bIgnoreCase) const{for (CList<WStringNode>::iterator itr = _lList->begin(); itr != _lList->end(); itr++) {if ((*itr)->data.Compare(data, !bIgnoreCase))return (*itr)->str;}return WString::Null();}Utils::WString WStringList::findString(const Utils::WString &str, bool bIgnoreCase) const{for (CList<WStringNode>::iterator itr = _lList->begin(); itr != _lList->end(); itr++) {if ((*itr)->str.Compare(str, !bIgnoreCase))return (*itr)->data;}return WString::Null();}long WStringList::findStringAndData(const Utils::WString& str, const Utils::WString& data, bool bIgnoreCase) const{size_t pos = 0;for (CList<WStringNode>::iterator itr = _lList->begin(); itr != _lList->end(); itr++, pos++) {if ((*itr)->str.Compare(str, !bIgnoreCase)){if ((*itr)->data.Compare(data, !bIgnoreCase))return static_cast<long>(pos);}}return -1;}long WStringList::findPos(const Utils::WString& str, bool bIgnoreCase) const{size_t pos = 0;for (CList<WStringNode>::iterator itr = _lList->begin(); itr != _lList->end(); itr++, pos++) {if ((*itr)->str.Compare(str, !bIgnoreCase))return static_cast<long>(pos);}return -1;}bool WStringList::containsStringAndData(const Utils::WString& str, const Utils::WString& data, bool bIgnoreCase) const{size_t pos = 0;for (CList<WStringNode>::iterator itr = _lList->begin(); itr != _lList->end(); itr++, pos++) {if ((*itr)->str.Compare(str, !bIgnoreCase)){if ((*itr)->data.Compare(data, !bIgnoreCase))return true;}}return false;}bool WStringList::containsData(const Utils::WString &data, bool bIgnoreCase) const{for (CList<WStringNode>::iterator itr = _lList->begin(); itr != _lList->end(); itr++) {if ((*itr)->data.Compare(data, !bIgnoreCase))return true;}return false;}bool WStringList::changeData(const Utils::WString &str, const Utils::WString &data, bool bIgnoreCase){for (CList<WStringNode>::iterator itr = _lList->begin(); itr != _lList->end(); itr++) {if ((*itr)->str.Compare(str, !bIgnoreCase)){(*itr)->data = data;return true;}}return false;}bool WStringList::contains(const Utils::WString &str, bool bIgnoreCase) const{for (CList<WStringNode>::iterator itr = _lList->begin(); itr != _lList->end(); itr++) {if ((*itr)->str.Compare(str, !bIgnoreCase))return true;}return false;}void WStringList::removeAt(size_t at){if (!_lList->empty()){auto var = _lList->get(at);if (var)delete var;_lList->removeAt(at);}}WStringListIterator WStringList::remove(WStringListIterator itr){return _lList->remove(itr);}bool WStringList::remove(const Utils::WString &str, bool single){bool removed = false;CList<Utils::WStringNode>::iterator itr = _lList->begin();while (itr != _lList->end()){Utils::WStringNode *node = *itr;if (node->str == str){itr = _lList->remove(itr);if (single)break;}else++itr;}return removed;}size_t WStringList::size() const{return _lList->size();}bool WStringList::empty() const{return _lList->empty();}const Utils::WStringNode* WStringList::operator[](size_t num) const{return _lList->get(num);}Utils::WStringNode* WStringList::operator[](size_t num){return _lList->get(num);}const Utils::WStringNode* WStringList::operator[](const WString& str) const{for (CList<WStringNode>::iterator itr = _lList->begin(); itr != _lList->end(); itr++) {if ((*itr)->str.Compare(str, true))return *itr;}return nullptr;}Utils::WStringNode* WStringList::operator[](const WString& str){for (CList<WStringNode>::iterator itr = _lList->begin(); itr != _lList->end(); itr++) {if ((*itr)->str.Compare(str, true))return *itr;}return nullptr;}}