1e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent/* 2e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. 3e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * 4e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Use of this source code is governed by a BSD-style license 5e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * that can be found in the LICENSE file in the root of the source 6e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * tree. An additional intellectual property rights grant can be found 7e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * in the file PATENTS. All contributing project authors may 8e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * be found in the AUTHORS file in the root of the source tree. 9e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent */ 10e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 11e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#include "list_wrapper.h" 12e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 13e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#include "trace.h" 14e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 15e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentnamespace webrtc { 16e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric LaurentListItem::ListItem(const void* item) 17e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent : this_iter_(), 18e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent item_ptr_(item), 19e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent item_(0) 20e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent{ 21e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} 22e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 23e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric LaurentListItem::ListItem(const unsigned int item) 24e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent : this_iter_(), 25e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent item_ptr_(0), 26e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent item_(item) 27e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent{ 28e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} 29e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 30e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric LaurentListItem::~ListItem() 31e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent{ 32e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} 33e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 34e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentvoid* ListItem::GetItem() const 35e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent{ 36e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return const_cast<void*>(item_ptr_); 37e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} 38e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 39e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentunsigned int ListItem::GetUnsignedItem() const 40e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent{ 41e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return item_; 42e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} 43e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 44e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric LaurentListWrapper::ListWrapper() : list_() 45e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent{ 46e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} 47e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 48e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric LaurentListWrapper::~ListWrapper() 49e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent{ 50e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent if (!Empty()) 51e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent { 52e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent // TODO (hellner) I'm not sure this loggin is useful. 53e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent WEBRTC_TRACE(kTraceMemory, kTraceUtility, -1, 54e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent "Potential memory leak in ListWrapper"); 55e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent // Remove all remaining list items. 56e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent while (Erase(First()) == 0) 57e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent {} 58e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 59e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} 60e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 61e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentbool ListWrapper::Empty() const 62e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent{ 63e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return list_.empty(); 64e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} 65e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 66e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentunsigned int ListWrapper::GetSize() const 67e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent{ 68e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return list_.size(); 69e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} 70e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 71e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentint ListWrapper::PushBack(const void* ptr) 72e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent{ 73e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent ListItem* item = new ListItem(ptr); 74e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent list_.push_back(item); 75e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return 0; 76e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} 77e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 78e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentint ListWrapper::PushBack(const unsigned int item_id) 79e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent{ 80e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent ListItem* item = new ListItem(item_id); 81e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent list_.push_back(item); 82e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return 0; 83e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} 84e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 85e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentint ListWrapper::PushFront(const unsigned int item_id) 86e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent{ 87e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent ListItem* item = new ListItem(item_id); 88e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent list_.push_front(item); 89e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return 0; 90e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} 91e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 92e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentint ListWrapper::PushFront(const void* ptr) 93e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent{ 94e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent ListItem* item = new ListItem(ptr); 95e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent list_.push_front(item); 96e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return 0; 97e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} 98e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 99e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentint ListWrapper::PopFront() 100e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent{ 101e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent if(list_.empty()) 102e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent { 103e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return -1; 104e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 105e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent list_.pop_front(); 106e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return 0; 107e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} 108e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 109e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentint ListWrapper::PopBack() 110e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent{ 111e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent if(list_.empty()) 112e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent { 113e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return -1; 114e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 115e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent list_.pop_back(); 116e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return 0; 117e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} 118e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 119e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric LaurentListItem* ListWrapper::First() const 120e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent{ 121e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent if(list_.empty()) 122e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent { 123e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return NULL; 124e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 125e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent std::list<ListItem*>::iterator item_iter = list_.begin(); 126e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent ListItem* return_item = (*item_iter); 127e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return_item->this_iter_ = item_iter; 128e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return return_item; 129e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} 130e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 131e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric LaurentListItem* ListWrapper::Last() const 132e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent{ 133e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent if(list_.empty()) 134e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent { 135e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return NULL; 136e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 137e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent // std::list::end() addresses the last item + 1. Decrement so that the 138e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent // actual last is accessed. 139e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent std::list<ListItem*>::iterator item_iter = list_.end(); 140e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent --item_iter; 141e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent ListItem* return_item = (*item_iter); 142e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return_item->this_iter_ = item_iter; 143e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return return_item; 144e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} 145e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 146e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric LaurentListItem* ListWrapper::Next(ListItem* item) const 147e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent{ 148e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent if(item == NULL) 149e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent { 150e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return NULL; 151e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 152e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent std::list<ListItem*>::iterator item_iter = item->this_iter_; 153e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent ++item_iter; 154e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent if (item_iter == list_.end()) 155e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent { 156e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return NULL; 157e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 158e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent ListItem* return_item = (*item_iter); 159e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return_item->this_iter_ = item_iter; 160e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return return_item; 161e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} 162e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 163e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric LaurentListItem* ListWrapper::Previous(ListItem* item) const 164e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent{ 165e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent if(item == NULL) 166e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent { 167e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return NULL; 168e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 169e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent std::list<ListItem*>::iterator item_iter = item->this_iter_; 170e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent if (item_iter == list_.begin()) 171e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent { 172e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return NULL; 173e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 174e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent --item_iter; 175e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent ListItem* return_item = (*item_iter); 176e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return_item->this_iter_ = item_iter; 177e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return return_item; 178e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} 179e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 180e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentint ListWrapper::Insert(ListItem* existing_previous_item, 181e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent ListItem* new_item) 182e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent{ 183e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent // Allow existingPreviousItem to be NULL if the list is empty. 184e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent // TODO (hellner) why allow this? Keep it as is for now to avoid 185e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent // breaking API contract. 186e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent if (!existing_previous_item && !Empty()) 187e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent { 188e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return -1; 189e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 190e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 191e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent if (!new_item) 192e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent { 193e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return -1; 194e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 195e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 196e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent std::list<ListItem*>::iterator insert_location = list_.begin(); 197e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent if (!Empty()) 198e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent { 199e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent insert_location = existing_previous_item->this_iter_; 200e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent if(insert_location != list_.end()) 201e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent { 202e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent ++insert_location; 203e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 204e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 205e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 206e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent list_.insert(insert_location,new_item); 207e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return 0; 208e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} 209e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 210e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentint ListWrapper::InsertBefore(ListItem* existing_next_item, 211e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent ListItem* new_item) 212e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent{ 213e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent // Allow existing_next_item to be NULL if the list is empty. 214e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent // Todo: why allow this? Keep it as is for now to avoid breaking API 215e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent // contract. 216e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent if (!existing_next_item && !Empty()) 217e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent { 218e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return -1; 219e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 220e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent if (!new_item) 221e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent { 222e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return -1; 223e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 224e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 225e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent std::list<ListItem*>::iterator insert_location = list_.begin(); 226e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent if (!Empty()) 227e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent { 228e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent insert_location = existing_next_item->this_iter_; 229e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 230e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 231e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent list_.insert(insert_location,new_item); 232e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return 0; 233e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} 234e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 235e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentint ListWrapper::Erase(ListItem* item) 236e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent{ 237e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent if(item == NULL) 238e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent { 239e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return -1; 240e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 241e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent list_.erase(item->this_iter_); 242e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return 0; 243e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} 244e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} // namespace webrtc 245