1/* 2 * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11#ifndef WEBRTC_SYSTEM_WRAPPERS_INTERFACE_LIST_WRAPPER_H_ 12#define WEBRTC_SYSTEM_WRAPPERS_INTERFACE_LIST_WRAPPER_H_ 13 14#include "constructor_magic.h" 15 16namespace webrtc { 17class CriticalSectionWrapper; 18 19class ListItem 20{ 21friend class ListWrapper; 22 23public: 24 ListItem(const void* ptr); 25 ListItem(const unsigned int item); 26 virtual ~ListItem(); 27 void* GetItem() const; 28 unsigned int GetUnsignedItem() const; 29 30protected: 31 ListItem* next_; 32 ListItem* prev_; 33 34private: 35 const void* item_ptr_; 36 const unsigned int item_; 37}; 38 39class ListWrapper 40{ 41public: 42 ListWrapper(); 43 virtual ~ListWrapper(); 44 45 // Returns the number of elements stored in the list. 46 unsigned int GetSize() const; 47 48 // Puts a pointer to anything last in the list. 49 int PushBack(const void* ptr); 50 // Puts a pointer to anything first in the list. 51 int PushFront(const void* ptr); 52 53 // Puts a copy of the specified integer last in the list. 54 int PushBack(const unsigned int item_id); 55 // Puts a copy of the specified integer first in the list. 56 int PushFront(const unsigned int item_id); 57 58 // Pops the first ListItem from the list 59 int PopFront(); 60 61 // Pops the last ListItem from the list 62 int PopBack(); 63 64 // Returns true if the list is empty 65 bool Empty() const; 66 67 // Returns a pointer to the first ListItem in the list. 68 ListItem* First() const; 69 70 // Returns a pointer to the last ListItem in the list. 71 ListItem* Last() const; 72 73 // Returns a pointer to the ListItem stored after item in the list. 74 ListItem* Next(ListItem* item) const; 75 76 // Returns a pointer to the ListItem stored before item in the list. 77 ListItem* Previous(ListItem* item) const; 78 79 // Removes item from the list. 80 int Erase(ListItem* item); 81 82 // Insert list item after existing_previous_item. Please note that new_item 83 // must be created using new ListItem(). The map will take ownership of 84 // new_item following a successfull insert. If insert fails new_item will 85 // not be released by the List 86 int Insert(ListItem* existing_previous_item, 87 ListItem* new_item); 88 89 // Insert list item before existing_next_item. Please note that new_item 90 // must be created using new ListItem(). The map will take ownership of 91 // new_item following a successfull insert. If insert fails new_item will 92 // not be released by the List 93 int InsertBefore(ListItem* existing_next_item, 94 ListItem* new_item); 95 96private: 97 void PushBackImpl(ListItem* item); 98 void PushFrontImpl(ListItem* item); 99 100 CriticalSectionWrapper* critical_section_; 101 ListItem* first_; 102 ListItem* last_; 103 unsigned int size_; 104}; 105} //namespace webrtc 106 107#endif // WEBRTC_SYSTEM_WRAPPERS_INTERFACE_LIST_WRAPPER_H_ 108