Go to the documentation of this file. 65 #define VectorStruct(T) \ 84 #define Vector(T, X) \ 85 VectorStruct(T) X = { NULL, 0, 0 } 99 #define DeclareVector(T, X) \ 113 #define VectorInit(X) \ 130 #define VectorFree(X) \ 132 M_free((X).ptr, "VectorFree:" #X); \ 150 #define VectorPtr(X) \ 165 #define VectorFront(X) \ 180 #define VectorBack(X) \ 181 ((X).ptr[(X).size - 1]) 194 #define VectorSize(X) \ 208 #define VectorCapacity(X) \ 222 #define VectorEmpty(X) \ 235 #define VectorClear(X) \ 236 do { (X).size = 0; } while (0) 249 #define VectorReserve(X, newcapacity) \ 251 size_t v_tmp_newcapacity_ = (newcapacity); \ 252 if ( (X).capacity < v_tmp_newcapacity_ ) { \ 253 void *v_tmp_newptr_; \ 254 v_tmp_newcapacity_ = (v_tmp_newcapacity_ * 3) / 2; \ 255 if ( v_tmp_newcapacity_ < 4 ) v_tmp_newcapacity_ = 4; \ 256 v_tmp_newptr_ = Malloc1(sizeof((X).ptr[0]) * v_tmp_newcapacity_, "VectorReserve:" #X); \ 257 if ( (X).ptr != NULL ) { \ 258 memcpy(v_tmp_newptr_, (X).ptr, (X).size * sizeof((X).ptr[0])); \ 259 M_free((X).ptr, "VectorReserve:" #X); \ 261 (X).ptr = v_tmp_newptr_; \ 262 (X).capacity = v_tmp_newcapacity_; \ 277 #define VectorPushBack(X, x) \ 279 VectorReserve((X), (X).size + 1); \ 280 (X).ptr[(X).size++] = (x); \ 295 #define VectorPushBacks(X, src, n) \ 297 size_t v_tmp_n_ = (n); \ 298 VectorReserve((X), (X).size + v_tmp_n_); \ 299 memcpy((X).ptr + (X).size, (src), v_tmp_n_ * sizeof((X).ptr[0])); \ 300 (X).size += v_tmp_n_; \ 314 #define VectorPopBack(X) \ 315 do { (X).size --; } while (0) 330 #define VectorInsert(X, index, x) \ 332 size_t v_tmp_index_ = (index); \ 333 VectorReserve((X), (X).size + 1); \ 334 memmove((X).ptr + v_tmp_index_ + 1, (X).ptr + v_tmp_index_, ((X).size - v_tmp_index_) * sizeof((X).ptr[0])); \ 335 (X).ptr[v_tmp_index_] = (x); \ 353 #define VectorInserts(X, index, src, n) \ 355 size_t v_tmp_index_ = (index), v_tmp_n_ = (n); \ 356 VectorReserve((X), (X).size + v_tmp_n_); \ 357 memmove((X).ptr + v_tmp_index_ + v_tmp_n_, (X).ptr + v_tmp_index_, ((X).size - v_tmp_index_) * sizeof((X).ptr[0])); \ 358 memcpy((X).ptr + v_tmp_index_, (src), v_tmp_n_ * sizeof((X).ptr[0])); \ 359 (X).size += v_tmp_n_; \ 374 #define VectorErase(X, index) \ 376 size_t v_tmp_index_ = (index); \ 377 memmove((X).ptr + v_tmp_index_, (X).ptr + v_tmp_index_ + 1, ((X).size - v_tmp_index_ - 1) * sizeof((X).ptr[0])); \ 394 #define VectorErases(X, index, n) \ 396 size_t v_tmp_index_ = (index), v_tmp_n_ = (n); \ 397 memmove((X).ptr + v_tmp_index_, (X).ptr + v_tmp_index_ + v_tmp_n_, ((X).size - v_tmp_index_ - 1) * sizeof((X).ptr[0])); \ 398 (X).size -= v_tmp_n_; \