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#ifndef WEBRTC_SYSTEM_WRAPPERS_SOURCE_MAP_NO_STL_H_
12e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#define WEBRTC_SYSTEM_WRAPPERS_SOURCE_MAP_NO_STL_H_
13e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
14e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#include "constructor_magic.h"
15e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
16e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentnamespace webrtc {
17e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentclass CriticalSectionWrapper;
18e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
19e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentclass MapNoStlItem
20e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent{
21e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentfriend class Map;
22e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
23e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentpublic:
24e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    MapNoStlItem(int id, void* ptr);
25e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    virtual ~MapNoStlItem();
26e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    void* GetItem();
27e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    int GetId();
28e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    unsigned int GetUnsignedId();
29e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    void SetItem(void* ptr);
30e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
31e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentprotected:
32e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    MapNoStlItem* next_;
33e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    MapNoStlItem* prev_;
34e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
35e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentprivate:
36e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    int item_id_;
37e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    void* item_ptr_;
38e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    DISALLOW_COPY_AND_ASSIGN(MapNoStlItem);
39e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent};
40e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
41e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentclass MapNoStl
42e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent{
43e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentpublic:
44e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    MapNoStl();
45e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    virtual ~MapNoStl();
46e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
47e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    // MapWrapper functions.
48e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    int Insert(int id, void* ptr);
49e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    int Erase(MapNoStlItem* item);
50e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    int Erase(int id);
51e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    int Size() const;
52e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    MapNoStlItem* First() const;
53e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    MapNoStlItem* Last() const;
54e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    MapNoStlItem* Next(MapNoStlItem* item) const;
55e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    MapNoStlItem* Previous(MapNoStlItem* item) const;
56e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    MapNoStlItem* Find(int id) const;
57e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
58e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentprivate:
59e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    MapNoStlItem* Locate(int id) const;
60e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    int Remove(MapNoStlItem* item);
61e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
62e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    CriticalSection* critical_section_;
63e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    MapNoStlItem* first_;
64e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    MapNoStlItem* last_;
65e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    int size_;
66e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    DISALLOW_COPY_AND_ASSIGN(MapNoStl);
67e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent};
68e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} // namespace webrtc
69e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
70e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#endif // WEBRTC_SYSTEM_WRAPPERS_SOURCE_MAP_NO_STL_H_
71