Documentation - C API
generic.h File Reference

Generic (General support functionalities) More...

#include "host.h"
#include "random.h"
#include <stdlib.h>
#include <stddef.h>
#include <time.h>
#include <assert.h>

Macros

#define VL_VERSION_STRING   "0.9.17"
 Library version string.
#define VL_ERR_MSG_LEN   1024
 Maximum length (in characters) of an error message.
Common operations
#define VL_MIN(x, y)   (((x)<(y))?(x):(y))
 Compute the minimum between two values.
#define VL_MAX(x, y)   (((x)>(y))?(x):(y))
 Compute the maximum between two values.
#define VL_SHIFT_LEFT(x, n)   (((n)>=0)?((x)<<(n)):((x)>>-(n)))
 Signed left shift operation.

Functions

char const * vl_get_version_string (void)
 Get VLFeat version string.
char * vl_configuration_to_string_copy (void)
 Get VLFeat configuration string.
void vl_set_simd_enabled (vl_bool x)
 Toggle usage of SIMD instructions.
vl_bool vl_get_simd_enabled (void)
 Are SIMD instructons enabled?
vl_bool vl_cpu_has_avx (void)
 Check for AVX instruction set.
vl_bool vl_cpu_has_sse3 (void)
 Check for SSE3 instruction set.
vl_bool vl_cpu_has_sse2 (void)
 Check for SSE2 instruction set.
vl_size vl_get_num_cpus (void)
 Get the number of CPU cores of the host.
vl_size vl_get_max_threads (void)
 Get the maximum number of computational threads.
void vl_set_num_threads (vl_size n)
 Set the number of threads targeted for parallel computations.
VlRandvl_get_rand (void)
 Get the default random number generator.
Memory allocation
void vl_set_alloc_func (void *(*malloc_func)(size_t), void *(*realloc_func)(void *, size_t), void *(*calloc_func)(size_t, size_t), void(*free_func)(void *))
 Set memory allocation functions.
void * vl_malloc (size_t n)
 Allocate a memory block.
void * vl_realloc (void *ptr, size_t n)
 Reallocate a memory block.
void * vl_calloc (size_t n, size_t size)
 Free and clear a memory block.
void * vl_memalign (size_t n, size_t size)
void vl_free (void *ptr)
 Free a memory block.
Measuring time
void vl_tic (void)
 Reset processor time reference The function resets VLFeat TIC/TOC time reference. There is one such reference per thread.
double vl_toc (void)
 Get elapsed time since tic.
double vl_get_cpu_time (void)
 Get processor time.

Type identifiers for atomic data types

#define VL_TYPE_FLOAT   1
#define VL_TYPE_DOUBLE   2
#define VL_TYPE_INT8   3
#define VL_TYPE_UINT8   4
#define VL_TYPE_INT16   5
#define VL_TYPE_UINT16   6
#define VL_TYPE_INT32   7
#define VL_TYPE_UINT32   8
#define VL_TYPE_INT64   9
#define VL_TYPE_UINT64   10
typedef vl_uint32 vl_type
char const * vl_get_type_name (vl_type type)
 Get the name of a data type.
vl_size vl_get_type_size (vl_type type)
 Get data type size.

Error handling

#define VL_ERR_OK   0
#define VL_ERR_OVERFLOW   1
#define VL_ERR_ALLOC   2
#define VL_ERR_BAD_ARG   3
#define VL_ERR_IO   4
#define VL_ERR_EOF   5
#define VL_ERR_NO_MORE   5
int vl_get_last_error (void)
 Get the code of the last error.
char const * vl_get_last_error_message (void)
 Get the last error message.
int vl_set_last_error (int error, char const *errorMessage,...)
 Set last VLFeat error.

Logging

#define VL_PRINTF   (*vl_get_printf_func())
 Call user-customizable printf function.
#define VL_PRINT   (*vl_get_printf_func())
 Same as VL_PRINTF (legacy code)
typedef int(* printf_func_t )(char const *format,...)
 Customizable printf function pointer type.
void vl_set_printf_func (printf_func_t printf_func)
 Set the printf function.
printf_func_t vl_get_printf_func (void)
 Get the printf function.

Detailed Description

Author:
Andrea Vedaldi

Macro Definition Documentation

#define VL_ERR_ALLOC   2

Resource allocation error

#define VL_ERR_BAD_ARG   3

Bad argument or illegal data error

#define VL_ERR_EOF   5

End-of-file or end-of-sequence error

#define VL_ERR_IO   4

Input/output error

#define VL_ERR_NO_MORE   5

End-of-sequence

Deprecated:
#define VL_ERR_OK   0

No error

#define VL_ERR_OVERFLOW   1

Buffer overflow error

#define VL_MAX (   x,
 
)    (((x)>(y))?(x):(y))
Parameters:
xvalue.
yvalue.
Returns:
the maximum of x and y.
#define VL_MIN (   x,
 
)    (((x)<(y))?(x):(y))
Parameters:
xvalue
yvalue
Returns:
the minimum of x and y.
#define VL_PRINTF   (*vl_get_printf_func())

The function calls the user customizable printf.

#define VL_SHIFT_LEFT (   x,
 
)    (((n)>=0)?((x)<<(n)):((x)>>-(n)))
Parameters:
xvalue.
nnumber of shift positions.
Returns:
x << n . The macro is equivalent to the builtin << operator, but it supports negative shifts too.
#define VL_TYPE_DOUBLE   2

double type

#define VL_TYPE_FLOAT   1

float type

#define VL_TYPE_INT16   5

vl_int16 type

#define VL_TYPE_INT32   7

vl_int32 type

#define VL_TYPE_INT64   9

vl_int64 type

#define VL_TYPE_INT8   3

vl_int8 type

#define VL_TYPE_UINT16   6

vl_uint16 type

#define VL_TYPE_UINT32   8

vl_uint32 type

#define VL_TYPE_UINT64   10

vl_uint64 type

#define VL_TYPE_UINT8   4

vl_uint8 type


Function Documentation

void* vl_calloc ( size_t  n,
size_t  size 
)
Parameters:
nnumber of items to allocate.
sizesize in bytes of an item.
Returns:
pointer to the new block.

This function allocates and clears a memory block. The synopsis is the same as the POSIX calloc function.

char* vl_configuration_to_string_copy ( void  )
Returns:
a new configuration string.

The function returns a new string containing a human readable description of the library configuration.

vl_bool vl_cpu_has_avx ( void  )
Returns:
true if AVX is present.
vl_bool vl_cpu_has_sse2 ( void  )
Returns:
true if SSE2 is present.
vl_bool vl_cpu_has_sse3 ( void  )
Returns:
true if SSE3 is present.
void vl_free ( void *  ptr)
Parameters:
ptrpointer to the memory block.

This function frees a memory block allocated by vl_malloc, vl_calloc, or vl_realloc. The synopsis is the same as the POSIX malloc function.

double vl_get_cpu_time ( void  )
Returns:
processor time in seconds.
See also:
vl_tic, vl_toc
int vl_get_last_error ( void  )
Returns:
error code.
See also:
vl_get_last_error_message.
char const* vl_get_last_error_message ( void  )
Returns:
pointer to the error message.
See also:
vl_get_last_error.
vl_size vl_get_max_threads ( void  )
Returns:
number of threads.
See also:
vl_set_num_threads(), Parallel computations
vl_size vl_get_num_cpus ( void  )
Returns:
number of CPU cores.
printf_func_t vl_get_printf_func ( void  )
Returns:
printf_func pointer to the printf implementation.
See also:
vl_set_printf_func.
VlRand* vl_get_rand ( void  )
Returns:
random number generator.

The function returns a pointer to the default random number genrator. There is one such generator per thread.

vl_bool vl_get_simd_enabled ( void  )
Returns:
true if SIMD instructions are enabled.
char const* vl_get_type_name ( vl_type  type)
inline
Parameters:
typedata type.
Returns:
data name of the data type.

type is one of VL_TYPE_FLOAT, VL_TYPE_DOUBLE, VL_TYPE_INT8, VL_TYPE_INT16, VL_TYPE_INT32, VL_TYPE_INT64, VL_TYPE_UINT8, VL_TYPE_UINT16, VL_TYPE_UINT32, VL_TYPE_UINT64.

vl_size vl_get_type_size ( vl_type  type)
inline
char const* vl_get_version_string ( void  )
Returns:
the library version string.
void* vl_malloc ( size_t  n)
Parameters:
nsize in bytes of the new block.
Returns:
pointer to the allocated block.

This function allocates a memory block of the specified size. The synopsis is the same as the POSIX malloc function.

void* vl_realloc ( void *  ptr,
size_t  n 
)
Parameters:
ptrpointer to a memory block previously allocated.
nsize in bytes of the new block.
Returns:
pointer to the new block.

This function reallocates a memory block to change its size. The synopsis is the same as the POSIX realloc function.

void vl_set_alloc_func ( void *(*)(size_t)  malloc_func,
void *(*)(void *, size_t)  realloc_func,
void *(*)(size_t, size_t)  calloc_func,
void(*)(void *)  free_func 
)
Parameters:
malloc_funcpointer to malloc.
realloc_funcpointer to realloc.
calloc_funcpointer to calloc.
free_funcpointer to free.
int vl_set_last_error ( int  error,
char const *  errorMessage,
  ... 
)
Parameters:
errorerror code.
errorMessageerror message format string.
...format string arguments.
Returns:
error code.

The function sets the code and optionally the error message of the last encountered error. errorMessage is the message format. It uses the printf convention and is followed by the format arguments. The maximum lenght of the error message is given by VL_ERR_MSG_LEN (longer messages are truncated).

Passing NULL as errorMessage sets the error message to the empty string.

void vl_set_num_threads ( vl_size  numThreads)
Parameters:
numThreadsnumber of threads to use.
See also:
vl_get_max_threads(), Parallel computations
void vl_set_printf_func ( printf_func_t  printf_func)
Parameters:
printf_funcpointer to a printf implementation. Set print_func to NULL to disable printf.
void vl_set_simd_enabled ( vl_bool  x)
Parameters:
xtrue if SIMD instructions are used.

Notice that SIMD instructions are used only if the CPU model supports them. Note alsoc that data alignment may restrict the use of such instructions.

See also:
vl_cpu_has_sse2(), vl_cpu_has_sse3(), etc.
void vl_tic ( void  )
See also:
vl_get_cpu_time, vl_toc.
double vl_toc ( void  )
Returns:
elapsed time in seconds.

The function returns the processor time elapsed since vl_tic was called last.

Remarks:
In multi-threaded applications, there is an independent timer for each execution thread.
On UNIX, this function uses the clock() system call. On Windows, it uses the QueryPerformanceCounter() system call, which is more accurate than clock() on this platform.