Initialize Tizen 2.3
[framework/web/wrt-commons.git] / modules_wearable / core / include / dpl / foreach.h
1 /*
2  * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
3  *
4  *    Licensed under the Apache License, Version 2.0 (the "License");
5  *    you may not use this file except in compliance with the License.
6  *    You may obtain a copy of the License at
7  *
8  *        http://www.apache.org/licenses/LICENSE-2.0
9  *
10  *    Unless required by applicable law or agreed to in writing, software
11  *    distributed under the License is distributed on an "AS IS" BASIS,
12  *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  *    See the License for the specific language governing permissions and
14  *    limitations under the License.
15  */
16 /*
17  * @file        foreach.h
18  * @author      Bartosz Janiak (b.janiak@samsung.com)
19  * @author      Lukasz Wrzosek (l.wrzosek@samsung.com)
20  * @version     1.0
21  * @brief       This file is the implementation file of foreach macro for stl
22  * containers
23  */
24 #ifndef DPL_FOREACH_H
25 #define DPL_FOREACH_H
26
27 #include <dpl/preprocessor.h>
28
29 namespace DPL {
30 namespace Private {
31 /*
32  * Used to detect type of valid reference to value object.
33  */
34 template <typename T>
35 T& ValueReference(T& t)
36 {
37     return(t);
38 }
39
40 template <typename T>
41 const T& ValueReference(const T& t)
42 {
43     return(t);
44 }
45 } //Private
46 } //DPL
47
48 #define DPL_FOREACH_IMPL(temporaryName, iterator, container)            \
49     __typeof__ (DPL::Private::ValueReference((container))) &            \
50     temporaryName = (container);                                        \
51     for (__typeof__ (temporaryName.begin())iterator =                  \
52              temporaryName.begin();                                     \
53          (iterator) != temporaryName.end(); ++iterator)
54
55 #define FOREACH(iterator, container)                                    \
56     DPL_FOREACH_IMPL(                                                   \
57         DPL_MACRO_CONCAT(foreachContainerReference, __COUNTER__),       \
58         iterator,                                      \
59         container)
60
61 #endif // DPL_FOREACH_H