SpiecsEngine
 
Loading...
Searching...
No Matches

◆ push_back()

template<typename T >
void scl::vector< T >::push_back ( T & element)
inline

Push a element in the end of vector.

Parameters
[in]element.

Definition at line 117 of file Vector.h.

118 {
119 if (m_SpareCount != 0)
120 {
121 *m_End = std::move(element);
122
123 ++m_UseCount;
124 --m_SpareCount;
125 ++m_End;
126 }
127 else
128 {
129 if (m_UseCount == 0)
130 {
131 const size_t bytes = sizeof(T) * m_ExpandRate;
132
133 m_UseCount = 1;
135
136 m_Begin = static_cast<T*>(malloc(bytes));
137
138 m_End = m_Begin;
139 *m_End = std::move(element);
140 ++m_End;
141 }
142 else
143 {
144 T* om = m_Begin;
145 const size_t ob = sizeof(T) * m_UseCount;
146 const size_t nb = sizeof(T) * m_UseCount * m_ExpandRate;
147 m_SpareCount = (nb - ob) / sizeof(T);
148
149 m_Begin = static_cast<T*>(malloc(nb));
150 memset(m_Begin, 0, nb);
151 memcpy(m_Begin, om, ob);
152
153 m_End = reinterpret_cast<T*>(reinterpret_cast<char*>(m_Begin) + ob);
154 *m_End = std::move(element);
155
156 ++m_UseCount;
157 --m_SpareCount;
158 ++m_End;
159
160 free(om);
161 }
162 }
163 }
size_t m_UseCount
vector used size.
Definition Vector.h:83
T * m_Begin
Vector Begin Pointer.
Definition Vector.h:73
T & get(size_t index)
Get element by index.
Definition Vector.h:166
size_t m_ExpandRate
Vector expand rate.
Definition Vector.h:93
size_t m_SpareCount
vector spare size.
Definition Vector.h:88
T * m_End
Vector End Pointer.
Definition Vector.h:78

References scl::vector< T >::m_Begin, and scl::vector< T >::m_End.