aboutsummaryrefslogtreecommitdiff
path: root/src/system_wrappers/source/map.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/system_wrappers/source/map.cc')
-rw-r--r--src/system_wrappers/source/map.cc166
1 files changed, 166 insertions, 0 deletions
diff --git a/src/system_wrappers/source/map.cc b/src/system_wrappers/source/map.cc
new file mode 100644
index 0000000000..0bff155be4
--- /dev/null
+++ b/src/system_wrappers/source/map.cc
@@ -0,0 +1,166 @@
+/*
+ * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree. An additional intellectual property rights grant can be found
+ * in the file PATENTS. All contributing project authors may
+ * be found in the AUTHORS file in the root of the source tree.
+ */
+
+#include "map_wrapper.h"
+
+#include "trace.h"
+
+namespace webrtc {
+MapItem::MapItem(int id, void* item) : item_pointer_(item), item_id_(id)
+{
+}
+
+MapItem::~MapItem()
+{
+}
+
+void* MapItem::GetItem()
+{
+ return item_pointer_;
+}
+
+int MapItem::GetId()
+{
+ return item_id_;
+}
+
+unsigned int MapItem::GetUnsignedId()
+{
+ return static_cast<unsigned int>(item_id_);
+}
+
+void MapItem::SetItem(void* ptr)
+{
+ item_pointer_ = ptr;
+}
+
+MapWrapper::MapWrapper() : map_()
+{
+}
+
+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
+ // used because each item has some dynamically allocated memory
+ // associated with it (i.e. using std::map::clear would introduce a
+ // memory leak).
+ while (Erase(First()) == 0)
+ {}
+ }
+}
+
+int MapWrapper::Size() const
+{
+ return (int)map_.size();
+}
+
+int MapWrapper::Insert(int id, void* ptr)
+{
+ map_[id] = new MapItem(id,ptr);
+ return 0;
+}
+
+MapItem* MapWrapper::First() const
+{
+ std::map<int, MapItem*>::const_iterator it = map_.begin();
+ if (it != map_.end())
+ {
+ return it->second;
+ }
+ return 0;
+}
+
+MapItem* MapWrapper::Last() const
+{
+ std::map<int, MapItem*>::const_reverse_iterator it = map_.rbegin();
+ if (it != map_.rend())
+ {
+ return it->second;
+ }
+ return 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())
+ {
+ it++;
+ if (it != map_.end())
+ {
+ return it->second;
+ }
+ }
+ return 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;
+ return it->second;
+ }
+ return 0;
+}
+
+MapItem* MapWrapper::Find(int id) const
+{
+ std::map<int, MapItem*>::const_iterator it = map_.find(id);
+ if (it != map_.end())
+ {
+ return it->second;
+ }
+ return 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())
+ {
+ delete it->second;
+ map_.erase(it);
+ return 0;
+ }
+ return -1;
+}
+
+int MapWrapper::Erase(const int id)
+{
+ std::map<int, MapItem*>::iterator it = map_.find(id);
+ if (it != map_.end())
+ {
+ delete it->second;
+ map_.erase(it);
+ return 0;
+ }
+ return -1;
+}
+} // namespace webrtc