FORM 4.3
vector.h File Reference
#include <stddef.h>
#include <string.h>
#include "declare.h"

Go to the source code of this file.

Macros

#define VectorStruct(T)
#define Vector(T, X)
#define DeclareVector(T, X)
#define VectorInit(X)
#define VectorFree(X)
#define VectorPtr(X)
#define VectorFront(X)
#define VectorBack(X)
#define VectorSize(X)
#define VectorCapacity(X)
#define VectorEmpty(X)
#define VectorClear(X)
#define VectorReserve(X, newcapacity)
#define VectorPushBack(X, x)
#define VectorPushBacks(X, src, n)
#define VectorPopBack(X)
#define VectorInsert(X, index, x)
#define VectorInserts(X, index, src, n)
#define VectorErase(X, index)
#define VectorErases(X, index, n)

Detailed Description

An implementation of dynamic array.

Example:

size_t i;
Vector(int, vec);
for ( i = 0; i < VectorSize(vec); i++ )
printf("%d\n", VectorPtr(vec)[i]);
#define Vector(T, X)
Definition vector.h:84
#define VectorFree(X)
Definition vector.h:130
#define VectorSize(X)
Definition vector.h:194
#define VectorPushBack(X, x)
Definition vector.h:277
#define VectorPtr(X)
Definition vector.h:150

Definition in file vector.h.

Macro Definition Documentation

◆ VectorStruct

#define VectorStruct ( T)
Value:
struct { \
T *ptr; \
size_t size; \
size_t capacity; \
}

A struct for vector objects.

Parameters
Tthe type of elements.

Definition at line 65 of file vector.h.

◆ Vector

#define Vector ( T,
X )
Value:
VectorStruct(T) X = { NULL, 0, 0 }
#define VectorStruct(T)
Definition vector.h:65

Defines and initialises a vector X of the type T. The user must call VectorFree(X) after the use of X.

Parameters
Tthe type of elements.
Xthe name of vector object

Definition at line 84 of file vector.h.

◆ DeclareVector

#define DeclareVector ( T,
X )
Value:

Declares a vector X of the type T. The user must call VectorInit(X) before the use of X.

Parameters
Tthe type of elements.
Xthe name of vector object

Definition at line 99 of file vector.h.

◆ VectorInit

#define VectorInit ( X)
Value:
do { \
(X).ptr = NULL; \
(X).size = 0; \
(X).capacity = 0; \
} while (0)

Initialises a vector X of the type T. The user must call VectorFree(X) after the use of X.

Parameters
Xthe vector object.

Definition at line 113 of file vector.h.

Referenced by PF_CollectModifiedDollars().

◆ VectorFree

#define VectorFree ( X)
Value:
do { \
M_free((X).ptr, "VectorFree:" #X); \
(X).ptr = NULL; \
(X).size = 0; \
(X).capacity = 0; \
} while (0)

Frees the buffer allocated by the vector X.

Parameters
Xthe vector object.

Definition at line 130 of file vector.h.

Referenced by PF_FreeErrorMessageBuffers().

◆ VectorPtr

#define VectorPtr ( X)
Value:
((X).ptr)

Returns the pointer to the buffer for the vector X. NULL when VectorCapacity(X) == 0.

Parameters
Xthe vector object.
Returns
the pointer to the allocated buffer for the vector.

Definition at line 150 of file vector.h.

Referenced by PF_BroadcastRedefinedPreVars(), PF_CollectModifiedDollars(), PF_FlushStdOutBuffer(), PF_MUnlock(), and PF_WriteFileToFile().

◆ VectorFront

#define VectorFront ( X)
Value:
((X).ptr[0])

Returns the first element of the vector X. Undefined when VectorSize(X) == 0.

Parameters
Xthe vector object.
Returns
the first element of the vector.

Definition at line 165 of file vector.h.

◆ VectorBack

#define VectorBack ( X)
Value:
((X).ptr[(X).size - 1])

Returns the last element of the vector X. Undefined when VectorSize(X) == 0.

Parameters
Xthe vector object.
Returns
the last element of the vector.

Definition at line 180 of file vector.h.

◆ VectorSize

#define VectorSize ( X)
Value:
((X).size)

Returns the size of the vector X.

Parameters
Xthe vector object.
Returns
the size of the vetor.

Definition at line 194 of file vector.h.

Referenced by PF_CollectModifiedDollars(), PF_FlushStdOutBuffer(), PF_MUnlock(), and PF_WriteFileToFile().

◆ VectorCapacity

#define VectorCapacity ( X)
Value:
((X).capacity)

Returns the capacity (the number of the already allocated elements) of the vector X.

Parameters
Xthe vector object.
Returns
the capacity of the vetor.

Definition at line 208 of file vector.h.

◆ VectorEmpty

#define VectorEmpty ( X)
Value:
((X).size == 0)

Returns true the size of the vector X is zero.

Parameters
Xthe vector object.
Returns
true if the vector has no elements, false otherwise.

Definition at line 222 of file vector.h.

Referenced by PF_MUnlock().

◆ VectorClear

#define VectorClear ( X)
Value:
do { (X).size = 0; } while (0)

Sets the size of the vector X to zero.

Parameters
Xthe vector object.

Definition at line 235 of file vector.h.

Referenced by PF_FlushStdOutBuffer(), PF_MLock(), and PF_WriteFileToFile().

◆ VectorReserve

#define VectorReserve ( X,
newcapacity )
Value:
do { \
size_t v_tmp_newcapacity_ = (newcapacity); \
if ( (X).capacity < v_tmp_newcapacity_ ) { \
void *v_tmp_newptr_; \
v_tmp_newcapacity_ = (v_tmp_newcapacity_ * 3) / 2; \
if ( v_tmp_newcapacity_ < 4 ) v_tmp_newcapacity_ = 4; \
v_tmp_newptr_ = Malloc1(sizeof((X).ptr[0]) * v_tmp_newcapacity_, "VectorReserve:" #X); \
if ( (X).ptr != NULL ) { \
memcpy(v_tmp_newptr_, (X).ptr, (X).size * sizeof((X).ptr[0])); \
M_free((X).ptr, "VectorReserve:" #X); \
} \
(X).ptr = v_tmp_newptr_; \
(X).capacity = v_tmp_newcapacity_; \
} \
} while (0)

Requires that the capacity of the vector X is equal to or lager than newcapacity.

Parameters
Xthe vector object.
newcapacitythe capacity to be reserved.

Definition at line 249 of file vector.h.

Referenced by PF_BroadcastRedefinedPreVars(), and PF_CollectModifiedDollars().

◆ VectorPushBack

#define VectorPushBack ( X,
x )
Value:
do { \
VectorReserve((X), (X).size + 1); \
(X).ptr[(X).size++] = (x); \
} while (0)

Adds an element x at the end of the vector X.

Parameters
Xthe vector object.
xthe element to be added.

Definition at line 277 of file vector.h.

◆ VectorPushBacks

#define VectorPushBacks ( X,
src,
n )
Value:
do { \
size_t v_tmp_n_ = (n); \
VectorReserve((X), (X).size + v_tmp_n_); \
memcpy((X).ptr + (X).size, (src), v_tmp_n_ * sizeof((X).ptr[0])); \
(X).size += v_tmp_n_; \
} while (0)

Adds an n elements of src at the end of the vector X.

Parameters
Xthe vector object.
srcthe starting address of the buffer storing elements to be added.
nthe number of elements to be added.

Definition at line 295 of file vector.h.

Referenced by PF_WriteFileToFile().

◆ VectorPopBack

#define VectorPopBack ( X)
Value:
do { (X).size --; } while (0)

Removes the last element of the vector X. VectorSize(X) must be > 0.

Parameters
Xthe vector object.

Definition at line 314 of file vector.h.

◆ VectorInsert

#define VectorInsert ( X,
index,
x )
Value:
do { \
size_t v_tmp_index_ = (index); \
VectorReserve((X), (X).size + 1); \
memmove((X).ptr + v_tmp_index_ + 1, (X).ptr + v_tmp_index_, ((X).size - v_tmp_index_) * sizeof((X).ptr[0])); \
(X).ptr[v_tmp_index_] = (x); \
(X).size++; \
} while (0)

Inserts an element x at the specified index of the vector X. The index must be 0 <= index < VectorSize(X).

Parameters
Xthe vector object.
indexthe position at which the element will be inserted.
xthe element to be inserted.

Definition at line 330 of file vector.h.

◆ VectorInserts

#define VectorInserts ( X,
index,
src,
n )
Value:
do { \
size_t v_tmp_index_ = (index), v_tmp_n_ = (n); \
VectorReserve((X), (X).size + v_tmp_n_); \
memmove((X).ptr + v_tmp_index_ + v_tmp_n_, (X).ptr + v_tmp_index_, ((X).size - v_tmp_index_) * sizeof((X).ptr[0])); \
memcpy((X).ptr + v_tmp_index_, (src), v_tmp_n_ * sizeof((X).ptr[0])); \
(X).size += v_tmp_n_; \
} while (0)

Inserts an n elements of src at the specified index of the vector X. The index must be 0 <= index < VectorSize(X).

Parameters
Xthe vector object.
indexthe position at which the elements will be inserted.
srcthe starting address of the buffer storing elements to be inserted.
nthe number of elements to be inserted.

Definition at line 353 of file vector.h.

◆ VectorErase

#define VectorErase ( X,
index )
Value:
do { \
size_t v_tmp_index_ = (index); \
memmove((X).ptr + v_tmp_index_, (X).ptr + v_tmp_index_ + 1, ((X).size - v_tmp_index_ - 1) * sizeof((X).ptr[0])); \
(X).size--; \
} while (0)

Removes an element at the specified index of the vector X. The index must be 0 <= index < VectorSize(X).

Parameters
Xthe vector object.
indexthe position of the element to be removed.

Definition at line 374 of file vector.h.

◆ VectorErases

#define VectorErases ( X,
index,
n )
Value:
do { \
size_t v_tmp_index_ = (index), v_tmp_n_ = (n); \
memmove((X).ptr + v_tmp_index_, (X).ptr + v_tmp_index_ + v_tmp_n_, ((X).size - v_tmp_index_ - 1) * sizeof((X).ptr[0])); \
(X).size -= v_tmp_n_; \
} while (0)

Removes an n elements at the specified index of the vector X. The index must be 0 <= index < VectorSize(X) - n + 1.

Parameters
Xthe vector object.
indexthe starting position of the elements to be removed.
nthe number of elements to be removed.

Definition at line 394 of file vector.h.