const char *name;
};
+#ifndef VG_STATIC
+#define VG_STATIC static
+#endif
+
#define vg_static_assert _Static_assert
#define vg_list_size( A ) (sizeof(A)/sizeof(A[0]))
#define VG_MUST_USE_RESULT __attribute__((warn_unused_result))
#endif
-static void vg_strncpy( const char *src, char *dst, u32 len )
+VG_STATIC void vg_strncpy( const char *src, char *dst, u32 len )
{
for( u32 i=0; i<len; i++ )
{
}
}
-#include <stdlib.h>
-
-#define VG_ZERO_NEW_MEM
-
-static void vg_fatal_exit_loop( const char *error );
-static void *vg_alloc( size_t size )
-{
- if( size == 0 )
- return NULL;
-
- void *ptr = malloc( size );
-
- if( !ptr )
- {
- vg_fatal_exit_loop( "Out of memory" );
- }
-
-#ifdef VG_ZERO_NEW_MEM
- u8 *bytes = ptr;
- for( u32 i=0; i<size; i++ )
- {
- bytes[i] = 0x00;
- }
-#endif
-
- return ptr;
-}
-
-static void *vg_realloc( void *orig, size_t size )
-{
- void *ptr = realloc( orig, size );
-
- if( !ptr )
- {
- if( size == 0 )
- return NULL;
-
- vg_fatal_exit_loop( "Out of memory" );
- }
-
- return ptr;
-}
-
-/* seems to be a GCC bug when inlining this, its low priority anyway */
-__attribute__ ((noinline))
-static void vg_free( void *ptr )
-{
- free( ptr );
-}
-
-static void vg_required( void *ptr, const char *path )
+VG_STATIC void vg_fatal_exit_loop( const char *error );
+VG_STATIC void vg_required( void *ptr, const char *path )
{
if( !ptr )
{
char *strncat(char *restrict dest, const char *restrict src, size_t n);
#endif
-VG_DEPRECATED
-void *malloc( size_t size );
-
-VG_DEPRECATED
-void *realloc( void *orig, size_t size );
-
-VG_DEPRECATED
-void free( void *ptr );
-
#include <stdio.h>
#include <dirent.h>
#include <string.h>
#include <math.h>
#include <assert.h>
-static int vg_thread_run( void *pfunc, void *data );
-static void vg_thread_exit(void);
-static void vg_set_thread_name( const char *name );
-static int vg_semaphore_init( vg_semaphore *sem, u32 value );
-static int vg_semaphore_trywait( vg_semaphore *sem );
-static int vg_semaphore_wait( vg_semaphore *sem );
-static int vg_semaphore_post( vg_semaphore *sem );
-static void vg_semaphore_free( vg_semaphore *sem );
-static int vg_mutex_init( vg_mutex *mutex );
-static int vg_mutex_lock( vg_mutex *mutex );
-static int vg_mutex_unlock( vg_mutex *mutex );
-static void vg_mutex_free( vg_mutex *mutex );
-static void vg_sleep_ms( long msec );
-static double vg_time_diff( vg_timespec start, vg_timespec end );
+VG_STATIC int vg_thread_run( void *pfunc, void *data );
+VG_STATIC void vg_thread_exit(void);
+VG_STATIC void vg_set_thread_name( const char *name );
+VG_STATIC int vg_semaphore_init( vg_semaphore *sem, u32 value );
+VG_STATIC int vg_semaphore_trywait( vg_semaphore *sem );
+VG_STATIC int vg_semaphore_wait( vg_semaphore *sem );
+VG_STATIC int vg_semaphore_post( vg_semaphore *sem );
+VG_STATIC void vg_semaphore_free( vg_semaphore *sem );
+VG_STATIC int vg_mutex_init( vg_mutex *mutex );
+VG_STATIC int vg_mutex_lock( vg_mutex *mutex );
+VG_STATIC int vg_mutex_unlock( vg_mutex *mutex );
+VG_STATIC void vg_mutex_free( vg_mutex *mutex );
+VG_STATIC void vg_sleep_ms( long msec );
+VG_STATIC double vg_time_diff( vg_timespec start, vg_timespec end );
#ifdef _WIN32_NO
-static int vg_thread_run( void *pfunc, void *data )
+VG_STATIC int vg_thread_run( void *pfunc, void *data )
{
HANDLE hThread = CreateThread
(
}
}
-static void vg_thread_exit(void)
+VG_STATIC void vg_thread_exit(void)
{
ExitThread(0);
}
-static void vg_set_thread_name( const char *name )
+VG_STATIC void vg_set_thread_name( const char *name )
{
/* I believe this is a meaningless concept in windows */
}
-static int vg_semaphore_init( vg_semaphore *sem, u32 value );
-static int vg_semaphore_trywait( vg_semaphore *sem );
-static int vg_semaphore_wait( vg_semaphore *sem );
-static int vg_semaphore_post( vg_semaphore *sem );
-static void vg_semaphore_free( vg_semaphore *sem );
-static int vg_mutex_init( vg_mutex *mutex );
-static int vg_mutex_lock( vg_mutex *mutex );
-static int vg_mutex_unlock( vg_mutex *mutex );
-static void vg_mutex_free( vg_mutex *mutex );
-static void vg_sleep_ms( long msec );
-static double vg_time_diff( vg_timespec start, vg_timespec end );
+VG_STATIC int vg_semaphore_init( vg_semaphore *sem, u32 value );
+VG_STATIC int vg_semaphore_trywait( vg_semaphore *sem );
+VG_STATIC int vg_semaphore_wait( vg_semaphore *sem );
+VG_STATIC int vg_semaphore_post( vg_semaphore *sem );
+VG_STATIC void vg_semaphore_free( vg_semaphore *sem );
+VG_STATIC int vg_mutex_init( vg_mutex *mutex );
+VG_STATIC int vg_mutex_lock( vg_mutex *mutex );
+VG_STATIC int vg_mutex_unlock( vg_mutex *mutex );
+VG_STATIC void vg_mutex_free( vg_mutex *mutex );
+VG_STATIC void vg_sleep_ms( long msec );
+VG_STATIC double vg_time_diff( vg_timespec start, vg_timespec end );
#else
-static int vg_thread_run( void *pfunc, void *data )
+VG_STATIC int vg_thread_run( void *pfunc, void *data )
{
pthread_t hThread;
if( pthread_create( &hThread, NULL, pfunc, data ) )
}
-static void vg_thread_exit(void)
+VG_STATIC void vg_thread_exit(void)
{
pthread_exit(NULL);
}
-static void vg_set_thread_name( const char *name )
+VG_STATIC void vg_set_thread_name( const char *name )
{
/* not defined but links?? */
#if 0
#endif
}
-static int vg_semaphore_init( vg_semaphore *sem, u32 value )
+VG_STATIC int vg_semaphore_init( vg_semaphore *sem, u32 value )
{
return !sem_init( sem, 0, value );
}
-static int vg_semaphore_trywait( vg_semaphore *sem )
+VG_STATIC int vg_semaphore_trywait( vg_semaphore *sem )
{
return !sem_trywait( sem );
}
-static int vg_semaphore_wait( vg_semaphore *sem )
+VG_STATIC int vg_semaphore_wait( vg_semaphore *sem )
{
return !sem_wait( sem );
}
-static int vg_semaphore_post( vg_semaphore *sem )
+VG_STATIC int vg_semaphore_post( vg_semaphore *sem )
{
return !sem_post( sem );
}
-static void vg_semaphore_free( vg_semaphore *sem )
+VG_STATIC void vg_semaphore_free( vg_semaphore *sem )
{
sem_destroy( sem );
}
-static int vg_mutex_init( vg_mutex *mutex )
+VG_STATIC int vg_mutex_init( vg_mutex *mutex )
{
memset( mutex, 0, sizeof(vg_mutex) );
return 1;
}
-static int vg_mutex_lock( vg_mutex *mutex )
+VG_STATIC int vg_mutex_lock( vg_mutex *mutex )
{
if( !pthread_mutex_lock( mutex ) )
return 1;
return 0;
}
-static int vg_mutex_unlock( vg_mutex *mutex )
+VG_STATIC int vg_mutex_unlock( vg_mutex *mutex )
{
if( !pthread_mutex_unlock( mutex ) )
return 1;
return 0;
}
-static void vg_mutex_free( vg_mutex *mutex )
+VG_STATIC void vg_mutex_free( vg_mutex *mutex )
{
}
-static void vg_sleep_ms( long msec )
+VG_STATIC void vg_sleep_ms( long msec )
{
struct timespec ts;
}
/* diff two timespecs in MS */
-static double vg_time_diff( struct timespec start, struct timespec end )
+VG_STATIC double vg_time_diff( struct timespec start, struct timespec end )
{
double elapsed = 1000.0*end.tv_sec + 1e-6*end.tv_nsec
- (1000.0*start.tv_sec + 1e-6*start.tv_nsec);
#define VG_MIN( A, B ) ((A)<(B)?(A):(B))
#define VG_MAX( A, B ) ((A)>(B)?(A):(B))
-static void *buffer_reserve( void *buffer, u32 count, u32 *cap, u32 amount,
- size_t emsize )
-{
- if( count+amount > *cap )
- {
- *cap = VG_MAX( (*cap)*2, (*cap)+amount );
- return vg_realloc( buffer, (*cap) * emsize );
- }
-
- return buffer;
-}
-
-static void *buffer_fix( void *buffer, u32 count, u32 *cap, size_t emsize )
-{
- *cap = count;
- return vg_realloc( buffer, (*cap) * emsize );
-}
-
#endif