Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/cpp11_v2/src/libraries/core/object/ObjectList.h @ 10920

Last change on this file since 10920 was 10920, checked in by landauf, 10 years ago

no static functions anymore in ObjectList. you need to instantiate an ObjectList to use it.
this allows for prettier for-loop syntax when iterating over an ObjectList of a specific context: for (T* object : ObjectList<T>(context)) { … }

  • Property svn:eol-style set to native
File size: 3.4 KB
Line 
1/*
2 *   ORXONOX - the hottest 3D action shooter ever to exist
3 *                    > www.orxonox.net <
4 *
5 *
6 *   License notice:
7 *
8 *   This program is free software; you can redistribute it and/or
9 *   modify it under the terms of the GNU General Public License
10 *   as published by the Free Software Foundation; either version 2
11 *   of the License, or (at your option) any later version.
12 *
13 *   This program is distributed in the hope that it will be useful,
14 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
15 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 *   GNU General Public License for more details.
17 *
18 *   You should have received a copy of the GNU General Public License
19 *   along with this program; if not, write to the Free Software
20 *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
21 *
22 *   Author:
23 *      Fabian 'x3n' Landau
24 *   Co-authors:
25 *      ...
26 *
27 */
28
29/**
30    @defgroup ObjectList Object-lists and iterators
31    @ingroup Object
32*/
33
34/**
35    @file
36    @ingroup Object ObjectList
37    @brief Definition of the ObjectList class, a wrapper of ObjectListBase.
38
39    @ref orxonox::ObjectList "ObjectList<T>" is a wrapper of an @ref orxonox::ObjectListBase
40    "ObjectListBase" of class @a T. Use @ref orxonox::ObjectListIterator "ObjectListIterator<T>"
41    to iterate through the list.
42*/
43
44#ifndef _ObjectList_H__
45#define _ObjectList_H__
46
47#include "core/CorePrereqs.h"
48
49#include "ObjectListBase.h"
50#include "ObjectListIterator.h"
51#include "Context.h"
52
53namespace orxonox
54{
55    // ###############################
56    // ###       ObjectList        ###
57    // ###############################
58    /**
59        @brief The ObjectList contains all objects of the given class.
60
61        Wraps the ObjectListBase which contains all objects of type @a T. Use @ref ObjectListIterator
62        "ObjectListIterator<T>" or its typedef ObjectList<T>::iterator to iterate through all objects
63        in the list.
64    */
65    template <class T>
66    class ObjectList
67    {
68        static_assert(std::is_base_of<Listable, T>::value, "ObjectList can only be used with Listables");
69
70        public:
71            typedef ObjectListIterator<T> iterator;
72
73            ObjectList() : ObjectList(Context::getRootContext()) {}
74            ObjectList(Context* context) : ObjectList(context->getObjectList<T>()) {}
75            ObjectList(ObjectListBase* list) : list_(list) {}
76
77            /// Returns the size of the list
78            inline size_t size()
79            {   return this->list_->size();   }
80
81            /// Returns an Iterator to the first element in the list.
82            inline ObjectListIterator<T> begin()
83            {   return static_cast<ObjectListElement<T>*>(this->list_->begin());   }
84            /// Returns an Iterator to the element after the last element in the list.
85            inline ObjectListIterator<T> end()
86            {   return static_cast<ObjectListElement<T>*>(this->list_->end());   }
87
88            /// Returns an Iterator to the last element in the list.
89            inline ObjectListIterator<T> rbegin()
90            {   return static_cast<ObjectListElement<T>*>(this->list_->rbegin());   }
91            /// Returns an Iterator to the element before the first element in the list.
92            inline ObjectListIterator<T> rend()
93            {   return static_cast<ObjectListElement<T>*>(this->list_->rend());   }
94
95        private:
96            ObjectListBase* list_;
97    };
98}
99
100#endif /* _ObjectList_H__ */
Note: See TracBrowser for help on using the repository browser.