Reformatted map classes.
BUG= TEST=Trybots. Review URL: https://webrtc-codereview.appspot.com/1006004 git-svn-id: http://webrtc.googlecode.com/svn/trunk@3308 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
parent
61f39a3174
commit
6e0ce73741
@ -13,14 +13,13 @@
|
||||
|
||||
#include <map>
|
||||
|
||||
#include "constructor_magic.h"
|
||||
#include "webrtc/system_wrappers/interface/constructor_magic.h"
|
||||
|
||||
namespace webrtc {
|
||||
class MapItem
|
||||
{
|
||||
friend class MapWrapper;
|
||||
class MapItem {
|
||||
friend class MapWrapper;
|
||||
|
||||
public:
|
||||
public:
|
||||
MapItem(int id, void* ptr);
|
||||
virtual ~MapItem();
|
||||
void* GetItem();
|
||||
@ -28,14 +27,13 @@ public:
|
||||
unsigned int GetUnsignedId();
|
||||
void SetItem(void* ptr);
|
||||
|
||||
private:
|
||||
private:
|
||||
int item_id_;
|
||||
void* item_pointer_;
|
||||
};
|
||||
|
||||
class MapWrapper
|
||||
{
|
||||
public:
|
||||
class MapWrapper {
|
||||
public:
|
||||
MapWrapper();
|
||||
~MapWrapper();
|
||||
|
||||
@ -67,9 +65,10 @@ public:
|
||||
// Returns a pointer to the MapItem associated with id from the map.
|
||||
MapItem* Find(int id) const;
|
||||
|
||||
private:
|
||||
private:
|
||||
std::map<int, MapItem*> map_;
|
||||
};
|
||||
|
||||
} // namespace webrtc
|
||||
|
||||
#endif // WEBRTC_SYSTEM_WRAPPERS_INTERFACE_MAP_WRAPPER_H_
|
||||
|
@ -8,47 +8,41 @@
|
||||
* be found in the AUTHORS file in the root of the source tree.
|
||||
*/
|
||||
|
||||
#include "map_wrapper.h"
|
||||
#include "webrtc/system_wrappers/interface/map_wrapper.h"
|
||||
|
||||
#include "trace.h"
|
||||
#include "webrtc/system_wrappers/interface/trace.h"
|
||||
|
||||
namespace webrtc {
|
||||
MapItem::MapItem(int id, void* item) : item_id_(id), item_pointer_(item)
|
||||
{
|
||||
|
||||
MapItem::MapItem(int id, void* item)
|
||||
: item_id_(id),
|
||||
item_pointer_(item) {
|
||||
}
|
||||
|
||||
MapItem::~MapItem()
|
||||
{
|
||||
MapItem::~MapItem() {
|
||||
}
|
||||
|
||||
void* MapItem::GetItem()
|
||||
{
|
||||
void* MapItem::GetItem() {
|
||||
return item_pointer_;
|
||||
}
|
||||
|
||||
int MapItem::GetId()
|
||||
{
|
||||
int MapItem::GetId() {
|
||||
return item_id_;
|
||||
}
|
||||
|
||||
unsigned int MapItem::GetUnsignedId()
|
||||
{
|
||||
unsigned int MapItem::GetUnsignedId() {
|
||||
return static_cast<unsigned int>(item_id_);
|
||||
}
|
||||
|
||||
void MapItem::SetItem(void* ptr)
|
||||
{
|
||||
void MapItem::SetItem(void* ptr) {
|
||||
item_pointer_ = ptr;
|
||||
}
|
||||
|
||||
MapWrapper::MapWrapper() : map_()
|
||||
{
|
||||
MapWrapper::MapWrapper() : map_() {
|
||||
}
|
||||
|
||||
MapWrapper::~MapWrapper()
|
||||
{
|
||||
if (!map_.empty())
|
||||
{
|
||||
MapWrapper::~MapWrapper() {
|
||||
if (!map_.empty()) {
|
||||
WEBRTC_TRACE(kTraceMemory, kTraceUtility, -1,
|
||||
"Potential memory leak in MapWrapper");
|
||||
// Remove all map items. Please note that std::map::clear() can't be
|
||||
@ -60,91 +54,73 @@ MapWrapper::~MapWrapper()
|
||||
}
|
||||
}
|
||||
|
||||
int MapWrapper::Size() const
|
||||
{
|
||||
int MapWrapper::Size() const {
|
||||
return (int)map_.size();
|
||||
}
|
||||
|
||||
int MapWrapper::Insert(int id, void* ptr)
|
||||
{
|
||||
map_[id] = new MapItem(id,ptr);
|
||||
int MapWrapper::Insert(int id, void* ptr) {
|
||||
map_[id] = new MapItem(id, ptr);
|
||||
return 0;
|
||||
}
|
||||
|
||||
MapItem* MapWrapper::First() const
|
||||
{
|
||||
MapItem* MapWrapper::First() const {
|
||||
std::map<int, MapItem*>::const_iterator it = map_.begin();
|
||||
if (it != map_.end())
|
||||
{
|
||||
if (it != map_.end()) {
|
||||
return it->second;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
MapItem* MapWrapper::Last() const
|
||||
{
|
||||
MapItem* MapWrapper::Last() const {
|
||||
std::map<int, MapItem*>::const_reverse_iterator it = map_.rbegin();
|
||||
if (it != map_.rend())
|
||||
{
|
||||
if (it != map_.rend()) {
|
||||
return it->second;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
MapItem* MapWrapper::Next(MapItem* item) const
|
||||
{
|
||||
if (item == 0)
|
||||
{
|
||||
MapItem* MapWrapper::Next(MapItem* item) const {
|
||||
if (item == 0) {
|
||||
return 0;
|
||||
}
|
||||
std::map<int, MapItem*>::const_iterator it = map_.find(item->item_id_);
|
||||
if (it != map_.end())
|
||||
{
|
||||
if (it != map_.end()) {
|
||||
it++;
|
||||
if (it != map_.end())
|
||||
{
|
||||
if (it != map_.end()) {
|
||||
return it->second;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
MapItem* MapWrapper::Previous(MapItem* item) const
|
||||
{
|
||||
if (item == 0)
|
||||
{
|
||||
MapItem* MapWrapper::Previous(MapItem* item) const {
|
||||
if (item == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
std::map<int, MapItem*>::const_iterator it = map_.find(item->item_id_);
|
||||
if ((it != map_.end()) &&
|
||||
(it != map_.begin()))
|
||||
{
|
||||
(it != map_.begin())) {
|
||||
--it;
|
||||
return it->second;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
MapItem* MapWrapper::Find(int id) const
|
||||
{
|
||||
MapItem* MapWrapper::Find(int id) const {
|
||||
std::map<int, MapItem*>::const_iterator it = map_.find(id);
|
||||
if (it != map_.end())
|
||||
{
|
||||
if (it != map_.end()) {
|
||||
return it->second;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int MapWrapper::Erase(MapItem* item)
|
||||
{
|
||||
if (item == 0)
|
||||
{
|
||||
int MapWrapper::Erase(MapItem* item) {
|
||||
if (item == 0) {
|
||||
return -1;
|
||||
}
|
||||
std::map<int, MapItem*>::iterator it = map_.find(item->item_id_);
|
||||
if (it != map_.end())
|
||||
{
|
||||
if (it != map_.end()) {
|
||||
delete it->second;
|
||||
map_.erase(it);
|
||||
return 0;
|
||||
@ -152,15 +128,14 @@ int MapWrapper::Erase(MapItem* item)
|
||||
return -1;
|
||||
}
|
||||
|
||||
int MapWrapper::Erase(const int id)
|
||||
{
|
||||
int MapWrapper::Erase(const int id) {
|
||||
std::map<int, MapItem*>::iterator it = map_.find(id);
|
||||
if (it != map_.end())
|
||||
{
|
||||
if (it != map_.end()) {
|
||||
delete it->second;
|
||||
map_.erase(it);
|
||||
return 0;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
} // namespace webrtc
|
||||
|
@ -8,41 +8,36 @@
|
||||
* be found in the AUTHORS file in the root of the source tree.
|
||||
*/
|
||||
|
||||
#include "map_no_stl.h"
|
||||
#include "webrtc/system_wrappers/source/map_no_stl.h"
|
||||
|
||||
#include "critical_section_wrapper.h"
|
||||
#include "trace.h"
|
||||
#include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
|
||||
#include "webrtc/system_wrappers/interface/trace.h"
|
||||
|
||||
namespace webrtc {
|
||||
|
||||
MapNoStlItem::MapNoStlItem(int id, void* item)
|
||||
: next_(0),
|
||||
prev_(0),
|
||||
item_id_(id),
|
||||
item_ptr_(item)
|
||||
{
|
||||
item_ptr_(item) {
|
||||
}
|
||||
|
||||
MapNoStlItem::~MapNoStlItem()
|
||||
{
|
||||
MapNoStlItem::~MapNoStlItem() {
|
||||
}
|
||||
|
||||
void* MapNoStlItem::GetItem()
|
||||
{
|
||||
void* MapNoStlItem::GetItem() {
|
||||
return item_ptr_;
|
||||
}
|
||||
|
||||
int MapNoStlItem::GetId()
|
||||
{
|
||||
int MapNoStlItem::GetId() {
|
||||
return item_id_;
|
||||
}
|
||||
|
||||
unsigned int MapNoStlItem::GetUnsignedId()
|
||||
{
|
||||
unsigned int MapNoStlItem::GetUnsignedId() {
|
||||
return static_cast<unsigned int>(item_id_);
|
||||
}
|
||||
|
||||
void MapNoStlItem::SetItem(void* ptr)
|
||||
{
|
||||
void MapNoStlItem::SetItem(void* ptr) {
|
||||
item_ptr_ = ptr;
|
||||
}
|
||||
|
||||
@ -50,14 +45,11 @@ MapNoStl::MapNoStl()
|
||||
: critical_section_(CriticalSectionWrapper::CreateCriticalSection()),
|
||||
first_(0),
|
||||
last_(0),
|
||||
size_(0)
|
||||
{
|
||||
size_(0) {
|
||||
}
|
||||
|
||||
MapNoStl::~MapNoStl()
|
||||
{
|
||||
if (First())
|
||||
{
|
||||
MapNoStl::~MapNoStl() {
|
||||
if (First()) {
|
||||
WEBRTC_TRACE(kTraceMemory, kTraceUtility, -1,
|
||||
"Potential memory leak in MapNoStl");
|
||||
while (Erase(First()) == 0)
|
||||
@ -66,40 +58,32 @@ MapNoStl::~MapNoStl()
|
||||
delete critical_section_;
|
||||
}
|
||||
|
||||
int MapNoStl::Size() const
|
||||
{
|
||||
int MapNoStl::Size() const {
|
||||
return size_;
|
||||
}
|
||||
|
||||
int MapNoStl::Insert(int id, void* ptr)
|
||||
{
|
||||
int MapNoStl::Insert(int id, void* ptr) {
|
||||
MapNoStlItem* new_item = new MapNoStlItem(id, ptr);
|
||||
|
||||
CriticalSectionScoped lock(critical_section_);
|
||||
MapNoStlItem* item = first_;
|
||||
size_++;
|
||||
if (!item)
|
||||
{
|
||||
if (!item) {
|
||||
first_ = new_item;
|
||||
last_ = new_item;
|
||||
return 0;
|
||||
}
|
||||
while(item->next_)
|
||||
{
|
||||
while (item->next_) {
|
||||
// Three scenarios
|
||||
// 1. Item should be inserted first.
|
||||
// 2. Item should be inserted between two items
|
||||
// 3. Item should be inserted last
|
||||
if (item->GetId() > id)
|
||||
{
|
||||
if (item->GetId() > id) {
|
||||
new_item->next_ = item;
|
||||
item->prev_ = new_item;
|
||||
if (item == first_)
|
||||
{
|
||||
if (item == first_) {
|
||||
first_ = new_item;
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
new_item->prev_ = item->prev_;
|
||||
new_item->prev_->next_ = new_item;
|
||||
}
|
||||
@ -114,69 +98,55 @@ int MapNoStl::Insert(int id, void* ptr)
|
||||
return 0;
|
||||
}
|
||||
|
||||
MapNoStlItem* MapNoStl::First() const
|
||||
{
|
||||
MapNoStlItem* MapNoStl::First() const {
|
||||
return first_;
|
||||
}
|
||||
|
||||
MapNoStlItem* MapNoStl::Last() const
|
||||
{
|
||||
MapNoStlItem* MapNoStl::Last() const {
|
||||
return last_;
|
||||
}
|
||||
|
||||
MapNoStlItem* MapNoStl::Next(MapNoStlItem* item) const
|
||||
{
|
||||
if (!item)
|
||||
{
|
||||
MapNoStlItem* MapNoStl::Next(MapNoStlItem* item) const {
|
||||
if (!item) {
|
||||
return 0;
|
||||
}
|
||||
return item->next_;
|
||||
}
|
||||
|
||||
MapNoStlItem* MapNoStl::Previous(MapNoStlItem* item) const
|
||||
{
|
||||
if (!item)
|
||||
{
|
||||
MapNoStlItem* MapNoStl::Previous(MapNoStlItem* item) const {
|
||||
if (!item) {
|
||||
return 0;
|
||||
}
|
||||
return item->prev_;
|
||||
}
|
||||
|
||||
MapNoStlItem* MapNoStl::Find(int id) const
|
||||
{
|
||||
MapNoStlItem* MapNoStl::Find(int id) const {
|
||||
CriticalSectionScoped lock(critical_section_);
|
||||
MapNoStlItem* item = Locate(id);
|
||||
return item;
|
||||
}
|
||||
|
||||
int MapNoStl::Erase(MapNoStlItem* item)
|
||||
{
|
||||
if(!item)
|
||||
{
|
||||
int MapNoStl::Erase(MapNoStlItem* item) {
|
||||
if (!item) {
|
||||
return -1;
|
||||
}
|
||||
CriticalSectionScoped lock(critical_section_);
|
||||
return Remove(item);
|
||||
}
|
||||
|
||||
int MapNoStl::Erase(const int id)
|
||||
{
|
||||
int MapNoStl::Erase(const int id) {
|
||||
CriticalSectionScoped lock(critical_section_);
|
||||
MapNoStlItem* item = Locate(id);
|
||||
if(!item)
|
||||
{
|
||||
if (!item) {
|
||||
return -1;
|
||||
}
|
||||
return Remove(item);
|
||||
}
|
||||
|
||||
MapNoStlItem* MapNoStl::Locate(int id) const
|
||||
{
|
||||
MapNoStlItem* MapNoStl::Locate(int id) const {
|
||||
MapNoStlItem* item = first_;
|
||||
while(item)
|
||||
{
|
||||
if (item->GetId() == id)
|
||||
{
|
||||
while (item) {
|
||||
if (item->GetId() == id) {
|
||||
return item;
|
||||
}
|
||||
item = item->next_;
|
||||
@ -184,34 +154,27 @@ MapNoStlItem* MapNoStl::Locate(int id) const
|
||||
return 0;
|
||||
}
|
||||
|
||||
int MapNoStl::Remove(MapNoStlItem* item)
|
||||
{
|
||||
if (!item)
|
||||
{
|
||||
int MapNoStl::Remove(MapNoStlItem* item) {
|
||||
if (!item) {
|
||||
return -1;
|
||||
}
|
||||
size_--;
|
||||
MapNoStlItem* previous_item = item->prev_;
|
||||
MapNoStlItem* next_item = item->next_;
|
||||
if (!previous_item)
|
||||
{
|
||||
if (!previous_item) {
|
||||
next_item->prev_ = 0;
|
||||
first_ = next_item;
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
previous_item->next_ = next_item;
|
||||
}
|
||||
if (!next_item)
|
||||
{
|
||||
if (!next_item) {
|
||||
previous_item->next_ = 0;
|
||||
last_ = previous_item;
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
next_item->prev_ = previous_item;
|
||||
}
|
||||
delete item;
|
||||
return 0;
|
||||
}
|
||||
|
||||
} // namespace webrtc
|
||||
|
@ -11,16 +11,16 @@
|
||||
#ifndef WEBRTC_SYSTEM_WRAPPERS_SOURCE_MAP_NO_STL_H_
|
||||
#define WEBRTC_SYSTEM_WRAPPERS_SOURCE_MAP_NO_STL_H_
|
||||
|
||||
#include "constructor_magic.h"
|
||||
#include "webrtc/system_wrappers/interface/constructor_magic.h"
|
||||
|
||||
namespace webrtc {
|
||||
|
||||
class CriticalSectionWrapper;
|
||||
|
||||
class MapNoStlItem
|
||||
{
|
||||
friend class Map;
|
||||
class MapNoStlItem {
|
||||
friend class Map;
|
||||
|
||||
public:
|
||||
public:
|
||||
MapNoStlItem(int id, void* ptr);
|
||||
virtual ~MapNoStlItem();
|
||||
void* GetItem();
|
||||
@ -28,19 +28,18 @@ public:
|
||||
unsigned int GetUnsignedId();
|
||||
void SetItem(void* ptr);
|
||||
|
||||
protected:
|
||||
protected:
|
||||
MapNoStlItem* next_;
|
||||
MapNoStlItem* prev_;
|
||||
|
||||
private:
|
||||
private:
|
||||
int item_id_;
|
||||
void* item_ptr_;
|
||||
DISALLOW_COPY_AND_ASSIGN(MapNoStlItem);
|
||||
};
|
||||
|
||||
class MapNoStl
|
||||
{
|
||||
public:
|
||||
class MapNoStl {
|
||||
public:
|
||||
MapNoStl();
|
||||
virtual ~MapNoStl();
|
||||
|
||||
@ -55,7 +54,7 @@ public:
|
||||
MapNoStlItem* Previous(MapNoStlItem* item) const;
|
||||
MapNoStlItem* Find(int id) const;
|
||||
|
||||
private:
|
||||
private:
|
||||
MapNoStlItem* Locate(int id) const;
|
||||
int Remove(MapNoStlItem* item);
|
||||
|
||||
@ -65,6 +64,7 @@ private:
|
||||
int size_;
|
||||
DISALLOW_COPY_AND_ASSIGN(MapNoStl);
|
||||
};
|
||||
|
||||
} // namespace webrtc
|
||||
|
||||
#endif // WEBRTC_SYSTEM_WRAPPERS_SOURCE_MAP_NO_STL_H_
|
||||
|
@ -8,9 +8,9 @@
|
||||
* be found in the AUTHORS file in the root of the source tree.
|
||||
*/
|
||||
|
||||
#include "gtest/gtest.h"
|
||||
#include "webrtc/system_wrappers/interface/map_wrapper.h"
|
||||
|
||||
#include "map_wrapper.h"
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
using ::webrtc::MapWrapper;
|
||||
using ::webrtc::MapItem;
|
||||
@ -25,7 +25,7 @@ int* ItemPointer(MapItem* item) {
|
||||
}
|
||||
|
||||
bool DeleteItemContent(MapItem* item) {
|
||||
if(item == NULL) {
|
||||
if (item == NULL) {
|
||||
return false;
|
||||
}
|
||||
int* value_ptr = ItemPointer(item);
|
||||
@ -168,20 +168,21 @@ protected:
|
||||
MapWrapper ascending_map_;
|
||||
};
|
||||
|
||||
TEST_F(MapWrapperTest,RemoveTest) {
|
||||
TEST_F(MapWrapperTest, RemoveTest) {
|
||||
// Erase using int id
|
||||
{ // Create local scope to avoid accidental re-use
|
||||
{
|
||||
// Create local scope to avoid accidental re-use
|
||||
MapItem* item_first = ascending_map_.First();
|
||||
ASSERT_FALSE(item_first == NULL);
|
||||
const int first_value_id = item_first->GetId();
|
||||
const int first_value = ItemValue(item_first);
|
||||
EXPECT_TRUE(first_value == 0);
|
||||
EXPECT_EQ(first_value_id,first_value);
|
||||
EXPECT_EQ(first_value_id, first_value);
|
||||
EXPECT_FALSE(NULL == ascending_map_.Find(first_value_id));
|
||||
EXPECT_TRUE(DeleteItemContent(item_first));
|
||||
ascending_map_.Erase(first_value_id);
|
||||
EXPECT_TRUE(NULL == ascending_map_.Find(first_value_id));
|
||||
EXPECT_EQ(kNumberOfElements-1,ascending_map_.Size());
|
||||
EXPECT_EQ(kNumberOfElements - 1, ascending_map_.Size());
|
||||
}
|
||||
|
||||
// Erase using MapItem* item
|
||||
@ -195,7 +196,7 @@ TEST_F(MapWrapperTest,RemoveTest) {
|
||||
EXPECT_TRUE(DeleteItemContent(item_last));
|
||||
ascending_map_.Erase(last_value_id);
|
||||
EXPECT_TRUE(NULL == ascending_map_.Find(last_value_id));
|
||||
EXPECT_EQ(kNumberOfElements-2,ascending_map_.Size());
|
||||
EXPECT_EQ(kNumberOfElements - 2, ascending_map_.Size());
|
||||
}
|
||||
|
||||
TEST_F(MapWrapperTest, PrintTest) {
|
||||
@ -212,7 +213,7 @@ TEST_F(MapWrapperTest, CopyTest) {
|
||||
ASSERT_EQ(ascending_map_.Size(), map_size);
|
||||
// CompareMaps compare the pointers not value of the pointers.
|
||||
// (the values are the same since both are ascending maps).
|
||||
EXPECT_FALSE(CompareMaps(compare_map,ascending_map_));
|
||||
EXPECT_FALSE(CompareMaps(compare_map, ascending_map_));
|
||||
|
||||
int copy_count = 0;
|
||||
MapItem* ascend_item = ascending_map_.First();
|
||||
@ -224,7 +225,7 @@ TEST_F(MapWrapperTest, CopyTest) {
|
||||
ascend_item = ascending_map_.Next(ascend_item);
|
||||
++copy_count;
|
||||
}
|
||||
EXPECT_TRUE(CompareMaps(compare_map,ascending_map_));
|
||||
EXPECT_TRUE(CompareMaps(compare_map, ascending_map_));
|
||||
while (compare_map.Erase(compare_map.First()) == 0) {
|
||||
}
|
||||
EXPECT_EQ(map_size, copy_count);
|
||||
|
Loading…
x
Reference in New Issue
Block a user