StringList ArrayList::GetStringList(const string& lName) { //Look for ann array list whose first item is a string with lName and second item is a stringlist, i.e. {{string, {string string string}} StringList aList; for(u_int i = 0; i < Count(); i++) { ArrayListItemBase* listPtr = const_cast<ArrayListItemBase*>(mList[i]); //Check for a list which first element is a string, i.e. a {{string}, {string, string}} list if(dynamic_cast< ArrayListItem<ArrayList> *>(listPtr)) { ArrayList list = (ArrayList) *(dynamic_cast< ArrayListItem<ArrayList> *>(listPtr)); if(list.Count()) { ArrayListItemBase* anItem = &list[0]; if(dynamic_cast<ArrayListItem<string>*>(anItem)) { string str = (string) *dynamic_cast<ArrayListItem<string>*>(anItem); if(str == lName && list.Count() > 1) { ArrayListItemBase* anItem = &list[1]; if(dynamic_cast<ArrayListItem<StringList> *>(anItem)) { //This is a stringList StringList list = (StringList) *(dynamic_cast<ArrayListItem<StringList>*>(anItem)); for(int i = 0; i < list.Count(); i++) { string str = list[i]; aList.add(str); } } if(dynamic_cast<ArrayListItem<ArrayList> *>(anItem)) { //Assume this list only contains strings! ArrayList list = (ArrayList) *(dynamic_cast<ArrayListItem<ArrayList>*>(anItem)); for(int i = 0; i < list.Count(); i++) { string str = list.GetString(i); aList.add(str); } } } } } } } return aList; }