李国帅 2018/1/22
Darwin流媒体中自定义的双向链表的使用
#include "Win32header.h" #include "OSMemory.h" #include "OS.h" #include "PLDoubleLinkedList.h" class PairListElement { public: PairListElement(char* name, char* value) { mName = name; mValue = value; } virtual ~PairListElement() { delete[] mName; delete[] mValue; } char *mName; char *mValue; }; static void PrintNameAndValue(PLDoubleLinkedListNode<PairListElement> *node, void *userData) { PairListElement* nvPair = node->fElement; char *idString = (char *)userData;// StrPtrLen name(idString); if (name.EqualIgnoreCase(idString, strlen((char*)userData))) { qtss_printf("qpl: %s, name %s, val %s\n", idString, nvPair->mName, nvPair->mValue); } } static bool CompareStrToName(PLDoubleLinkedListNode<PairListElement> *node, void *userData) { PairListElement* nvPair = node->fElement; char *idString = (char *)userData;// StrPtrLen name(idString); if (name.EqualIgnoreCase((char*)userData, strlen((char*)userData))) return true; return false; } int main(int argc, char* argv[]) { PLDoubleLinkedList<PairListElement> *fNameValuelist; fNameValuelist = NEW PLDoubleLinkedList<PairListElement>; char* Str1 = new char[10]; strcpy(Str1, "Str1"); char* Val1 = new char[10]; strcpy(Val1, "1"); char* Val2 = new char[10]; strcpy(Val2, "2"); char* Str2 = new char[10]; strcpy(Str2, "Str2"); PairListElement element1(Str1, Val1); PairListElement element2(Str2, Val2); // create a node to hold the pair PLDoubleLinkedListNode<PairListElement>* nvNode1 = NEW PLDoubleLinkedListNode<PairListElement>(&element1); fNameValuelist->AddNode(nvNode1);// add it to the list PLDoubleLinkedListNode<PairListElement>* nvNode2 = NEW PLDoubleLinkedListNode<PairListElement>(&element2); fNameValuelist->AddNodeToTail(nvNode2);// add it to the list tail fNameValuelist->ForEach(PrintNameAndValue, element1.mName); PLDoubleLinkedListNode<PairListElement>* node; node = fNameValuelist->ForEachUntil(CompareStrToName, element1.mName); if (node != NULL) { PairListElement* nvPair = (PairListElement*)node->fElement; qtss_printf("qpl: %s, name %s, val %s\n", (char*)element1.mName, nvPair->mName, nvPair->mValue); } node = fNameValuelist->GetNthNode(0); node = fNameValuelist->GetFirst(); int count = fNameValuelist->GetNumNodes(); fNameValuelist->RemoveNode(nvNode1); fNameValuelist->RemoveNode(nvNode2); delete fNameValuelist; }