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_LIST_NO_STL_H_
12e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#define WEBRTC_SYSTEM_WRAPPERS_SOURCE_LIST_NO_STL_H_
13e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
14e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#include "constructor_magic.h"
15e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
16e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentnamespace webrtc {
17e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentclass CriticalSectionWrapper;
18e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
19e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentclass ListNoStlItem
20e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent{
21e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentpublic:
22e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    ListNoStlItem(const void* ptr);
23e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    ListNoStlItem(const unsigned int item);
24e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    virtual ~ListNoStlItem();
25e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    void* GetItem() const;
26e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    unsigned int GetUnsignedItem() const;
27e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
28e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentprotected:
29e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    ListNoStlItem* next_;
30e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    ListNoStlItem* prev_;
31e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
32e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentprivate:
33e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    friend class ListNoStl;
34e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
35e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    const void*         item_ptr_;
36e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    const unsigned int  item_;
37e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    DISALLOW_COPY_AND_ASSIGN(ListNoStlItem);
38e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent};
39e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
40e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
41e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentclass ListNoStl
42e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent{
43e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentpublic:
44e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    ListNoStl();
45e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    virtual ~ListNoStl();
46e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
47e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    // ListWrapper functions
48e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    unsigned int GetSize() const;
49e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    int PushBack(const void* ptr);
50e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    int PushBack(const unsigned int item_id);
51e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    int PushFront(const void* ptr);
52e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    int PushFront(const unsigned int item_id);
53e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    int PopFront();
54e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    int PopBack();
55e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    bool Empty() const;
56e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    ListNoStlItem* First() const;
57e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    ListNoStlItem* Last() const;
58e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    ListNoStlItem* Next(ListNoStlItem* item) const;
59e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    ListNoStlItem* Previous(ListNoStlItem* item) const;
60e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    int Erase(ListNoStlItem* item);
61e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    int Insert(ListNoStlItem* existing_previous_item,
62e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent               ListNoStlItem* new_item);
63e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
64e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    int InsertBefore(ListNoStlItem* existing_next_item,
65e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent                     ListNoStlItem* new_item);
66e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
67e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentprivate:
68e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    void PushBack(ListNoStlItem* item);
69e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    void PushFront(ListNoStlItem* item);
70e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
71e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    CriticalSectionWrapper* critical_section_;
72e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    ListNoStlItem* first_;
73e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    ListNoStlItem* last_;
74e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    unsigned int size_;
75e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    DISALLOW_COPY_AND_ASSIGN(ListNoStl);
76e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent};
77e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} // namespace webrtc
78e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
79e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#endif // WEBRTC_SYSTEM_WRAPPERS_SOURCE_LIST_NO_STL_H_
80