@@ -26,7 +26,16 @@ Array<T, MAX_SIZE>::Array(const T &value)
26
26
}
27
27
28
28
template <typename T, size_t MAX_SIZE>
29
- Array<T, MAX_SIZE>::Array(const T (&values)[MAX_SIZE])
29
+ template <typename U, size_t N>
30
+ Array<T, MAX_SIZE>::Array(const U (&values)[N])
31
+ {
32
+ size_ = 0 ;
33
+ fill (values);
34
+ }
35
+
36
+ template <typename T, size_t MAX_SIZE>
37
+ template <typename U, size_t N>
38
+ Array<T, MAX_SIZE>::Array(const Array<U,N> &values)
30
39
{
31
40
size_ = 0 ;
32
41
fill (values);
@@ -69,44 +78,55 @@ void Array<T, MAX_SIZE>::fill(const T &value)
69
78
}
70
79
71
80
template <typename T, size_t MAX_SIZE>
72
- void Array<T, MAX_SIZE>::fill(const T (&values)[MAX_SIZE])
81
+ template <typename U, size_t N>
82
+ void Array<T, MAX_SIZE>::fill(const U (&values)[N])
73
83
{
74
- assign (MAX_SIZE ,values);
84
+ assign (N ,values);
75
85
}
76
86
77
87
template <typename T, size_t MAX_SIZE>
78
- void Array<T, MAX_SIZE>::assign(const size_t n, const T &value)
88
+ template <typename U, size_t N>
89
+ void Array<T, MAX_SIZE>::fill(const Array<U,N> &values)
79
90
{
80
- size_t assign_size = n;
81
- if ((n > size_) && (n <= MAX_SIZE))
82
- {
83
- size_ = n;
84
- }
85
- else if (n > MAX_SIZE)
86
- {
87
- size_ = MAX_SIZE;
88
- assign_size = MAX_SIZE;
89
- }
91
+ assign (N,values);
92
+ }
93
+
94
+ template <typename T, size_t MAX_SIZE>
95
+ template <typename U>
96
+ void Array<T, MAX_SIZE>::assign(const size_t n, const U &value)
97
+ {
98
+ size_t assign_size = ((n < MAX_SIZE) ? n : MAX_SIZE);
99
+ size_ = assign_size;
90
100
for (size_t i=0 ; i<assign_size; i++)
91
101
{
92
102
values_[i] = value;
93
103
}
94
104
}
95
105
96
106
template <typename T, size_t MAX_SIZE>
97
- void Array<T, MAX_SIZE>::assign(const size_t n, const T values[])
107
+ template <typename U, size_t N>
108
+ void Array<T, MAX_SIZE>::assign(const size_t n, const U (&values)[N])
98
109
{
99
- size_t assign_size = n;
100
- if ((n > size_) && (n <= MAX_SIZE))
110
+ size_t n_smallest = ((n < N) ? n : N);
111
+ size_t assign_size = ((n_smallest < MAX_SIZE) ? n_smallest : MAX_SIZE);
112
+ size_ = assign_size;
113
+ for (size_t i=0 ; i<assign_size; i++)
101
114
{
102
- size_ = n ;
115
+ values_[i] = values[i] ;
103
116
}
104
- else if (n > MAX_SIZE)
117
+ }
118
+
119
+ template <typename T, size_t MAX_SIZE>
120
+ template <typename U, size_t N>
121
+ void Array<T, MAX_SIZE>::assign(const size_t n, const Array<U,N> &values)
122
+ {
123
+ size_t n_smallest = ((n < values.size ()) ? n : values.size ());
124
+ size_t assign_size = ((n_smallest < MAX_SIZE) ? n_smallest : MAX_SIZE);
125
+ size_ = assign_size;
126
+ for (size_t i=0 ; i<assign_size; i++)
105
127
{
106
- size_ = MAX_SIZE;
107
- assign_size = MAX_SIZE;
128
+ values_[i] = values[i];
108
129
}
109
- memcpy ((void *) values_, (void *) values, assign_size*sizeof (T));
110
130
}
111
131
112
132
template <typename T, size_t MAX_SIZE>
0 commit comments