summaryrefslogtreecommitdiffstats
path: root/src/include/initializer_list
blob: 0926254b718cb48fcfbed4d61c4ad2af156be442 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
/* IBM_PROLOG_BEGIN_TAG                                                   */
/* This is an automatically generated prolog.                             */
/*                                                                        */
/* $Source: src/include/initializer_list $                                */
/*                                                                        */
/* OpenPOWER HostBoot Project                                             */
/*                                                                        */
/* Contributors Listed Below - COPYRIGHT 2016                             */
/* [+] International Business Machines Corp.                              */
/*                                                                        */
/*                                                                        */
/* Licensed under the Apache License, Version 2.0 (the "License");        */
/* you may not use this file except in compliance with the License.       */
/* You may obtain a copy of the License at                                */
/*                                                                        */
/*     http://www.apache.org/licenses/LICENSE-2.0                         */
/*                                                                        */
/* Unless required by applicable law or agreed to in writing, software    */
/* distributed under the License is distributed on an "AS IS" BASIS,      */
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or        */
/* implied. See the License for the specific language governing           */
/* permissions and limitations under the License.                         */
/*                                                                        */
/* IBM_PROLOG_END_TAG                                                     */
#ifndef stl_initializer_list
#define stl_initializer_list

/**
 * @file initializer_list
 * @brief simple stl initalizer_list template class declaration.
 *
 *  Provides compile time stl initialization in vector and list classes
 */

#include <stddef.h>

#if !defined( __STDC_LIMIT_MACROS)
#define __STDC_LIMIT_MACROS
#endif
#include <stdint.h>
#include <new>
#include <algorithm>
#include <assert.h>

namespace std
{

    /**
     * @class initializer_list
     * subset of stl initializer_list
     */
    template <class T>
        class initializer_list
        {
            public:

                typedef T value_type;
                typedef T & reference;
                typedef const T & const_reference;
                typedef size_t size_type;
                typedef T * iterator;
                typedef const T * const_iterator;
                typedef T * pointer;


            private:

                iterator iv_array;
                size_type iv_len;

                /**
                 * @brief Private constructor for compiler when someone declares
                 *        initializer list using {}
                 * @note The compiler can call this private constructor
                 */
                constexpr initializer_list(const_iterator x, size_type s)
                   :
                        iv_array(x),
                        iv_len(s)
                {}

            public:

                /**
                 * @brief Constructor default
                 */
                constexpr initializer_list(void)
                   :
                        iv_array(NULL),
                        iv_len(NULL)
                {}

                /**
                 * @brief Get the number of elements in the container
                 * @return number of elements in the container
                 */
                constexpr size_type size() const
                {
                    return iv_len;
                }

                // Iterators --------------------

                /**
                 * @brief Get const_iterator to the first element
                 * @return const_iterator of first element
                 */
                constexpr const_iterator begin() const
                {
                    return (iv_array);
                }

                /**
                 * @brief Get const_iterator to the last element + 1
                 * @return const_iterator to last element + 1
                 */
                constexpr const_iterator end() const
                {
                    return (iv_array + iv_len);
                }
        };
}
#endif
OpenPOWER on IntegriCloud