include/it/vec.h File Reference

#include <it/cplx.h>
#include <it/types.h>
#include <assert.h>
#include <stddef.h>
#include <stdlib.h>
#include <string.h>

Go to the source code of this file.

Data Structures

struct  _Vec_header_

Basic vector allocation, initialization and deletion

#define Vec_new_alloc(type_t, N, length_max)   ((type_t *) __Vec_new_alloc(sizeof(type_t), N, length_max ))
vec vec_new_alloc (idx_t length, idx_t length_max)
ivec ivec_new_alloc (idx_t length, idx_t length_max)
bvec bvec_new_alloc (idx_t length, idx_t length_max)
cvec cvec_new_alloc (idx_t length, idx_t length_max)
#define Vec_new(type_t, N)   ((type_t *) __Vec_new( sizeof(type_t), N ))
Vec __Vec_new (size_t elem_size, idx_t N)
vec vec_new (idx_t length)
ivec ivec_new (idx_t length)
bvec bvec_new (idx_t length)
cvec cvec_new (idx_t length)
#define Vec_delete(v)   free( Vec_header(v).ptr )
void vec_delete (vec v)
void ivec_delete (ivec v)
void bvec_delete (bvec v)
void cvec_delete (cvec v)

Length and max length vector operations

#define Vec_length(v)   ( Vec_header(v).length )
idx_t vec_length (vec v)
idx_t ivec_length (ivec v)
idx_t bvec_length (bvec v)
idx_t cvec_length (cvec v)
#define Vec_length_max(v)   ( Vec_header(v).length_max )
idx_t vec_length_max (vec v)
idx_t ivec_length_max (ivec v)
idx_t bvec_length_max (bvec v)
idx_t cvec_length_max (cvec v)
#define Vec_set_length_max(v, N)
#define vec_set_length_max(v, N)   do { v=_vec_set_length_max( v, N ); } while (0)
#define ivec_set_length_max(v, N)   do { v=_ivec_set_length_max( v, N ); } while (0)
#define bvec_set_length_max(v, N)   do { v=_bvec_set_length_max( v, N ); } while (0)
#define cvec_set_length_max(v, N)   do { v=_cvec_set_length_max( v, N ); } while (0)
vec _vec_set_length_max (vec v, idx_t N)
ivec _ivec_set_length_max (ivec v, idx_t N)
bvec _bvec_set_length_max (bvec v, idx_t N)
cvec _cvec_set_length_max (cvec v, idx_t N)
#define Vec_set_length(v, N)
#define vec_set_length(v, N)   do { v=_vec_set_length( v, N ); } while (0)
#define ivec_set_length(v, N)   do { v=_ivec_set_length( v, N ); } while (0)
#define bvec_set_length(v, N)   do { v=_bvec_set_length( v, N ); } while (0)
#define cvec_set_length(v, N)   do { v=_cvec_set_length( v, N ); } while (0)
vec _vec_set_length (vec v, idx_t N)
ivec _ivec_set_length (ivec v, idx_t N)
bvec _bvec_set_length (bvec v, idx_t N)
cvec _cvec_set_length (cvec v, idx_t N)

Basic vector initialization/modification

#define Vec_init(v, buf, N)   memcpy( v, buf, Vec_element_size(v) * (N) );
vec vec_init (vec v, double *buf, idx_t N)
ivec ivec_init (ivec v, int *buf, idx_t N)
bvec bvec_init (bvec v, byte *buf, idx_t N)
cvec cvec_init (cvec v, cplx *buf, idx_t N)
#define Vec_set(v, val)
vec vec_set (vec v, double val)
ivec ivec_set (ivec v, int val)
bvec bvec_set (bvec v, byte val)
cvec cvec_set (cvec v, cplx val)
#define Vec_void(v)
void vec_void (vec)
void ivec_void (ivec)
void bvec_void (bvec)
void cvec_void (cvec)
#define Vec_new_void(type_t)   Vec_new( type_t, 0 )
vec vec_new_void ()
ivec ivec_new_void ()
bvec bvec_new_void ()
cvec cvec_new_void ()
#define Vec_set_between(v, i1, i2, val)
vec vec_set_between (vec v, idx_t i1, idx_t i2, double val)
ivec ivec_set_between (ivec v, idx_t i1, idx_t i2, int val)
bvec bvec_set_between (bvec v, idx_t i1, idx_t i2, byte val)
cvec cvec_set_between (cvec v, idx_t i1, idx_t i2, cplx val)
#define Vec_set_subvector(v, s, index)
void vec_set_subvector (vec v, vec s, idx_t idx)
void ivec_set_subvector (ivec v, ivec s, idx_t idx)
void bvec_set_subvector (bvec v, bvec s, idx_t idx)
void cvec_set_subvector (cvec v, cvec s, idx_t idx)

Comparisons functions

#define Vec_eq(v1, v2)
int vec_eq (vec v1, vec v2)
int ivec_eq (ivec v1, ivec v2)
int bvec_eq (bvec v1, bvec v2)
int cvec_eq (cvec v1, cvec v2)

Copy and Conversions Functions

#define Vec_copy(v1, v2)   __Vec_copy((Vec) v1, (Vec) v2)
Vec __Vec_copy (Vec v1, Vec v2)
void vec_copy (vec dest, vec orig)
void ivec_copy (ivec dest, ivec orig)
void bvec_copy (bvec dest, bvec orig)
void cvec_copy (cvec dest, cvec orig)

Ordered set and stack operations

#define Vec_del(v, pos)
vec vec_del (vec v, idx_t pos)
ivec ivec_del (ivec v, idx_t pos)
bvec bvec_del (bvec v, idx_t pos)
cvec cvec_del (cvec v, idx_t pos)
#define Vec_ins(v, pos, elt)
#define vec_ins(v, pos, elt)   do { v=_vec_ins( v, pos, elt ); } while (0)
#define ivec_ins(v, pos, elt)   do { v=_ivec_ins( v, pos, elt ); } while (0)
#define bvec_ins(v, pos, elt)   do { v=_bvec_ins( v, pos, elt ); } while (0)
#define cvec_ins(v, pos, elt)   do { v=_cvec_ins( v, pos, elt ); } while (0)
vec _vec_ins (vec v, idx_t pos, double elt)
ivec _ivec_ins (ivec v, idx_t pos, int elt)
bvec _bvec_ins (bvec v, idx_t pos, byte elt)
cvec _cvec_ins (cvec v, idx_t pos, cplx elt)
#define Vec_push(v, elt)   Vec_ins( v, Vec_length(v), elt )
#define vec_push(v, elt)   do { v=_vec_push( v, elt ); } while (0)
#define ivec_push(v, elt)   do { v=_ivec_push( v, elt ); } while (0)
#define bvec_push(v, elt)   do { v=_bvec_push( v, elt ); } while (0)
#define cvec_push(v, elt)   do { v=_cvec_push( v, elt ); } while (0)
vec _vec_push (vec v, double elt)
ivec _ivec_push (ivec v, int elt)
bvec _bvec_push (bvec v, byte elt)
cvec _cvec_push (cvec v, cplx elt)
#define Vec_pop(v)   Vec_del( v, Vec_length(v)-1 )
vec vec_pop (vec v)
ivec ivec_pop (ivec v)
bvec bvec_pop (bvec v)
cvec cvec_pop (cvec v)
#define Vec_head(v)   ((v)[Vec_length(v)-1])
double vec_head (vec v)
int ivec_head (ivec v)
byte bvec_head (bvec v)
cplx cvec_head (const cvec v)

Safe vector access

#define _vec(v, i)   (*__vec(v, i))
#define _ivec(v, i)   (*__ivec(v, i))
#define _bvec(v, i)   (*__bvec(v, i))
#define _cvec(v, i)   (*__cvec(v, i))
double * __vec (vec v, idx_t i)
int * __ivec (ivec v, idx_t i)
byte__bvec (bvec v, idx_t i)
cplx__cvec (cvec v, idx_t i)
#define ivec_eval(v, f, a)   ivec_apply_function(v, f, a)
#define ivec_new_eval(v, f, a)   ivec_new_apply_function(v, f, a)
ivec ivec_new_apply_function (ivec v, it_ifunction_t function, it_args_t args)

Constant vectors

typedef void * Vec
typedef double * vec
typedef int * ivec
typedef bytebvec
typedef cplxcvec
vec const vec_null
ivec const ivec_null
bvec const bvec_null
cvec const cvec_null


#define Vec_header(v)   (*(((Vec_header_t *) (v)) - 1))
#define Vec_element_size(v)   (Vec_header(v).element_size)
#define IT_ALLOC_ALIGN   (sizeof(cplx))
#define DYN_ALLOC_RULE(l)   ((l)*4/3+1)
#define VEC_END_PARAM(v, param)   do { if( param == end ) param = Vec_length( v ) - 1; } while(0)
#define vec_eval(v, f, a)   vec_apply_function(v, f, a)
#define vec_new_eval(v, f, a)   vec_new_apply_function(v, f, a)


typedef struct _Vec_header_ Vec_header_t


Vec __Vec_new_alloc (size_t elem_size, idx_t length, idx_t length_max)
Vec __Vec_new_realloc (void *V, size_t elem_size, idx_t length, idx_t length_max)
vec vec_new_set (double val, idx_t N)
ivec ivec_new_set (int val, idx_t N)
bvec bvec_new_set (byte val, idx_t N)
cvec cvec_new_set (cplx val, idx_t N)
void vec_zeros (vec)
void ivec_zeros (ivec)
void bvec_zeros (bvec)
void cvec_zeros (cvec)
vec vec_new_zeros (idx_t N)
ivec ivec_new_zeros (idx_t N)
bvec bvec_new_zeros (idx_t N)
cvec cvec_new_zeros (idx_t N)
void vec_ones (vec)
void ivec_ones (ivec)
void bvec_ones (bvec)
void cvec_ones (cvec)
vec vec_new_ones (idx_t N)
ivec ivec_new_ones (idx_t N)
bvec bvec_new_ones (idx_t N)
cvec cvec_new_ones (idx_t N)
vec vec_get_subvector (vec v, idx_t i1, idx_t i2)
ivec ivec_get_subvector (ivec v, idx_t i1, idx_t i2)
bvec bvec_get_subvector (bvec v, idx_t i1, idx_t i2)
cvec cvec_get_subvector (cvec v, idx_t i1, idx_t i2)
int vec_geq (vec v1, vec v2)
int ivec_geq (ivec v1, ivec v2)
int bvec_geq (bvec v1, bvec v2)
Vec Vec_clone (Vec v)
vec vec_clone (vec v)
ivec ivec_clone (ivec v)
bvec bvec_clone (bvec v)
cvec cvec_clone (cvec v)
void vec_copy_from_ivec (vec dest, ivec orig)
void vec_copy_from_bvec (vec dest, bvec orig)
void vec_copy_from_cvec (vec dest, cvec orig)
void ivec_copy_from_vec (ivec dest, vec orig)
void ivec_copy_from_bvec (ivec dest, bvec orig)
void ivec_copy_from_cvec (ivec dest, cvec orig)
void bvec_copy_from_vec (bvec dest, vec orig)
void bvec_copy_from_ivec (bvec dest, ivec orig)
void bvec_copy_from_cvec (bvec dest, cvec orig)
void cvec_copy_from_vec (cvec dest, vec orig)
void cvec_copy_from_ivec (cvec dest, ivec orig)
void cvec_copy_from_bvec (cvec dest, bvec orig)
bvec vec_to_bvec (vec v)
ivec vec_to_ivec (vec v)
cvec vec_to_cvec (vec v)
vec ivec_to_vec (ivec v)
bvec ivec_to_bvec (ivec v)
cvec ivec_to_cvec (ivec v)
ivec bvec_to_ivec (bvec v)
vec bvec_to_vec (bvec v)
cvec bvec_to_cvec (bvec v)
void vec_copy_mem (double *buf, vec v)
void ivec_copy_mem (int *buf, ivec v)
void bvec_copy_mem (byte *buf, bvec v)
void cvec_copy_mem (cplx *buf, cvec v)
void bvec_pack (byte *buf, bvec v)
void bvec_unpack (bvec v, byte *buf)
Mean, median, min, max, sum and elementary statistic indicators

double vec_mean (vec v)
double ivec_mean (ivec v)
double vec_mean_robust (vec v)
double vec_median (vec v)
int ivec_median (ivec v)
double vec_sum (vec v)
int ivec_sum (ivec v)
cplx cvec_sum (cvec v)
double vec_sum_robust (vec v)
vec vec_cum_sum (vec v)
ivec ivec_cum_sum (ivec v)
cvec cvec_cum_sum (cvec v)
double vec_sum_between (vec v, idx_t i1, idx_t i2)
int ivec_sum_between (ivec v, idx_t i1, idx_t i2)
cplx cvec_sum_between (cvec v, idx_t i1, idx_t i2)
double vec_sum_sqr (vec v)
double vec_min (vec v)
int ivec_min (ivec v)
double vec_max (vec v)
int ivec_max (ivec v)
idx_t vec_min_index (vec v)
idx_t ivec_min_index (ivec v)
idx_t vec_max_index (vec v)
idx_t ivec_max_index (ivec v)
vec vec_k_min (vec v, int k)
ivec ivec_k_min (ivec v, int k)
vec vec_k_max (vec v, int k)
ivec ivec_k_max (ivec v, int k)
vec vec_k_min_between (vec v, int k, idx_t a, idx_t b)
ivec ivec_k_min_between (ivec v, int k, idx_t a, idx_t b)
vec vec_k_max_between (vec v, int k, idx_t a, idx_t b)
ivec ivec_k_max_between (ivec v, int k, idx_t a, idx_t b)
ivec vec_k_min_index (vec v, int k)
ivec ivec_k_min_index (ivec v, int k)
ivec vec_k_max_index (vec v, int k)
ivec ivec_k_max_index (ivec v, int k)
ivec vec_k_min_index_between (vec v, int k, idx_t a, idx_t b)
ivec ivec_k_min_index_between (ivec v, int k, idx_t a, idx_t b)
ivec vec_k_max_index_between (vec v, int k, idx_t a, idx_t b)
ivec ivec_k_max_index_between (ivec v, int k, idx_t a, idx_t b)
double vec_variance (vec v)
double vec_variance_robust (vec v)
double vec_cov (vec v1, vec v2)
double vec_norm (vec v, double nr)
double ivec_norm (ivec v, int nr)
void vec_normalize (vec v, double nr)
vec vec_new_normalize (vec v, double nr)
Basic arithmetic operations

void vec_neg (vec v)
void ivec_neg (ivec v)
void cvec_neg (cvec v)
void cvec_conj (cvec v)
void cvec_abssqr (cvec v)
void vec_sqr (vec v)
void ivec_sqr (ivec v)
void vec_sqrt (vec v)
void vec_log (vec v)
void vec_log10 (vec v)
void vec_exp (vec v)
void vec_pow (vec v, double a)
vec vec_new_pow (vec v, double a)
void vec_abs (vec v)
void ivec_abs (ivec v)
vec vec_new_abs (vec v)
ivec ivec_new_abs (ivec v)
vec cvec_new_abs (cvec v)
Arithmetic operations with a scalar value

void vec_incr (vec v, double a)
void ivec_incr (ivec v, int a)
void cvec_incr (cvec v, cplx a)
void cvec_incr_real (cvec v, double a)
void vec_decr (vec v, double a)
void ivec_decr (ivec v, int a)
void cvec_decr (cvec v, cplx a)
void cvec_decr_real (cvec v, double a)
void vec_mul_by (vec v, double a)
void ivec_mul_by (ivec v, int a)
void cvec_mul_by (cvec v, cplx a)
void cvec_mul_by_real (cvec v, double a)
void vec_div_by (vec v, double a)
void ivec_div_by (ivec v, int a)
void cvec_div_by (cvec v, cplx a)
void cvec_div_by_real (cvec v, double a)
Component per component operations

void vec_add (vec v1, vec v2)
void ivec_add (ivec v1, ivec v2)
void cvec_add (cvec v1, cvec v2)
vec vec_new_add (vec v1, vec v2)
ivec ivec_new_add (ivec v1, ivec v2)
void vec_sub (vec v1, vec v2)
void ivec_sub (ivec v1, ivec v2)
void cvec_sub (cvec v1, cvec v2)
vec vec_new_sub (vec v1, vec v2)
ivec ivec_new_sub (ivec v1, ivec v2)
void vec_mul (vec v1, vec v2)
void ivec_mul (ivec v1, ivec v2)
void cvec_mul (cvec v1, cvec v2)
vec vec_new_mul (vec v1, vec v2)
ivec ivec_new_mul (ivec v1, ivec v2)
void vec_div (vec v1, vec v2)
void ivec_div (ivec v1, ivec v2)
void cvec_div (cvec v1, cvec v2)
vec vec_new_div (vec v1, vec v2)
ivec ivec_new_div (ivec v1, ivec v2)
double vec_inner_product (vec v1, vec v2)
int ivec_inner_product (ivec v1, ivec v2)
double vecivec_inner_product (vec v1, ivec v2)
int bvecivec_inner_product (bvec v1, ivec v2)
double vec_inner_product_robust (vec v1, vec v2)
void cvec_conj_mul (cvec v1, cvec v2)
Component per component arbitrar function

void vec_apply_function (vec v, it_function_t function, it_args_t args)
vec vec_new_apply_function (vec v, it_function_t function, it_args_t args)
ivec ivec_apply_function (ivec v, it_ifunction_t function, it_args_t args)
Set, sorting and finding functions

void vec_reverse (vec v)
void ivec_reverse (ivec v)
void bvec_reverse (bvec v)
void cvec_reverse (cvec v)
vec vec_new_reverse (vec v)
ivec ivec_new_reverse (ivec v)
bvec bvec_new_reverse (bvec v)
cvec cvec_new_reverse (cvec v)
idx_t vec_count (vec v, double a)
idx_t ivec_count (ivec v, int a)
idx_t bvec_count (bvec v, byte a)
idx_t cvec_count (cvec v, cplx a)
idx_t vec_find_first (vec v, double a)
idx_t ivec_find_first (ivec v, int a)
idx_t bvec_find_first (bvec v, byte a)
idx_t cvec_find_first (cvec v, cplx a)
ivec vec_find (vec v, double a)
ivec ivec_find (ivec v, int a)
ivec bvec_find (bvec v, byte a)
ivec cvec_find (cvec v, cplx a)
idx_t vec_find_sorted (vec v, double a)
idx_t ivec_find_sorted (ivec v, int a)
idx_t bvec_find_sorted (bvec v, byte a)
ivec vec_replace (vec v, double a, double b)
ivec ivec_replace (ivec v, int a, int b)
ivec bvec_replace (bvec v, byte a, byte b)
ivec cvec_replace (cvec v, cplx a, cplx b)
vec vec_new_concat (vec v1, vec v2)
ivec ivec_new_concat (ivec v1, ivec v2)
bvec bvec_new_concat (bvec v1, bvec v2)
cvec cvec_new_concat (cvec v1, cvec v2)
vec vec_new_unique (vec v)
ivec ivec_new_unique (ivec v)
bvec bvec_new_unique (bvec v)
vec vec_new_union (vec v1, vec v2)
ivec ivec_new_union (ivec v1, ivec v2)
bvec bvec_new_union (bvec v1, bvec v2)
vec vec_new_intersection (vec v1, vec v2)
ivec ivec_new_intersection (ivec v1, ivec v2)
bvec bvec_new_intersection (bvec v1, bvec v2)
vec vec_index_by (vec v, ivec idx)
ivec ivec_index_by (ivec v, ivec idx)
bvec bvec_index_by (bvec v, ivec idx)
cvec cvec_index_by (cvec v, ivec idx)
void Vec_sort (Vec v, int(*elem_leq)(const void *, const void *))
void vec_sort (vec v)
void ivec_sort (ivec v)
void bvec_sort (bvec v)
ivec Vec_sort_index (Vec v, int(*elem_leq_idx)(const void *, const void *))
ivec vec_sort_index (vec v)
ivec ivec_sort_index (ivec v)
ivec bvec_sort_index (bvec v)
Special vectors

void vec_range (vec)
void ivec_range (ivec)
void bvec_range (bvec)
void cvec_range (cvec)
vec vec_new_range (idx_t n)
ivec ivec_new_range (idx_t n)
bvec bvec_new_range (idx_t n)
cvec cvec_new_range (idx_t n)
void vec_1N (vec)
void ivec_1N (ivec)
void bvec_1N (bvec)
void cvec_1N (cvec)
vec vec_new_1N (idx_t n)
ivec ivec_new_1N (idx_t n)
bvec bvec_new_1N (idx_t n)
cvec cvec_new_1N (idx_t n)
void vec_arithm (vec, double start, double incr)
void ivec_arithm (ivec, int start, int incr)
void bvec_arithm (bvec, byte start, byte incr)
void cvec_arithm (cvec, cplx start, cplx incr)
vec vec_new_arithm (double start, double incr, idx_t N)
ivec ivec_new_arithm (int start, int incr, idx_t N)
bvec bvec_new_arithm (byte start, byte incr, idx_t N)
cvec cvec_new_arithm (cplx start, cplx incr, idx_t N)
void vec_geom (vec, double start, double r)
void ivec_geom (ivec, int start, int r)
void bvec_geom (bvec, byte start, byte r)
void cvec_geom (cvec, cplx start, cplx r)
vec vec_new_geom (double start, double r, idx_t N)
ivec ivec_new_geom (int start, int r, idx_t N)
bvec bvec_new_geom (byte start, byte r, idx_t N)
cvec cvec_new_geom (cplx start, cplx r, idx_t N)
cvec cvec_new_unit_roots (idx_t N)
Random vectors

void vec_rand (vec v)
vec vec_new_rand (idx_t N)
void vec_randn (vec v)
vec vec_new_randn (idx_t N)
ivec ivec_new_perm (size_t N)

vec vec_conv (vec v1, vec v2)
ivec ivec_conv (ivec v1, ivec v2)
Vector <-> sparse vectors conversion

void vec_to_spvec (vec v, ivec *svi_out, vec *sv_out)
void ivec_to_spivec (ivec v, ivec *svi_out, ivec *sv_out)
vec spvec_to_vec (ivec svi, vec sv, int n)
ivec spivec_to_ivec (ivec svi, ivec sv, int n)
double spvec_inner_product (ivec svi1, vec sv1, ivec svi2, vec sv2)
int spivec_inner_product (ivec svi1, ivec sv1, ivec svi2, ivec sv2)

Define Documentation

#define DYN_ALLOC_RULE (  )     ((l)*4/3+1)

Definition at line 113 of file vec.h.

#define IT_ALLOC_ALIGN   (sizeof(cplx))

Definition at line 104 of file vec.h.

Referenced by __Vec_new_alloc().

#define Vec_element_size (  )     (Vec_header(v).element_size)

#define Vec_header (  )     (*(((Vec_header_t *) (v)) - 1))

Typedef Documentation

typedef struct _Vec_header_ Vec_header_t

Function Documentation

Vec __Vec_new_alloc ( size_t  elem_size,
idx_t  length,
idx_t  length_max 

Vec __Vec_new_realloc ( void *  V,
size_t  elem_size,
idx_t  length,
idx_t  length_max 

Definition at line 138 of file vec.c.

References __Vec_new_alloc(), Vec_delete, and Vec_length.

Hosted by
Copyright (C) 2005-2006 Hervé Jégou
Vivien Chappelier
Francois Cayre
libit logo courtesy of Jonathan Delhumeau