52c26c0933fc67ecabb60b6bb2e5a772b6d50257
[vg.git] / vg_platform.h
1 #ifndef VG_PLATFORM_H
2 #define VG_PLATFORM_H
3
4 #ifdef VG_RELEASE
5 #define VG_STATIC static
6 #else
7 #define VG_STATIC
8 #endif
9
10 //#include "vg.h"
11 #include "vg_stdint.h"
12
13 /* Copyright (C) 2021-2022 Harry Godden (hgn) - All Rights Reserved */
14
15 typedef unsigned int uint;
16
17 typedef int v2i[2];
18 typedef int v3i[3];
19 typedef int v4i[4];
20 typedef float v2f[2];
21 typedef float v3f[3];
22 typedef float v4f[4];
23 typedef v2f m2x2f[2];
24 typedef v3f m3x3f[3];
25 typedef v3f m4x3f[4];
26 typedef v4f m4x4f[4];
27 typedef v3f boxf[2];
28
29 // Resource types
30 typedef struct vg_tex2d vg_tex2d;
31
32 struct vg_achievement
33 {
34 int is_set;
35 const char *name;
36 };
37
38 #define vg_static_assert _Static_assert
39 #define vg_list_size( A ) (sizeof(A)/sizeof(A[0]))
40 #define VG_MUST_USE_RESULT __attribute__((warn_unused_result))
41
42 enum strncpy_behaviour{
43 k_strncpy_always_add_null = 0,
44 k_strncpy_allow_cutoff = 1
45 };
46
47 VG_STATIC void vg_strncpy( const char *src, char *dst, u32 len,
48 enum strncpy_behaviour behaviour )
49 {
50 for( u32 i=0; i<len; i++ ){
51 dst[i] = src[i];
52
53 if( !src[i] )
54 break;
55
56 if( (behaviour == k_strncpy_always_add_null) && (i == len-1) )
57 dst[i] = '\0';
58 }
59 }
60
61 VG_STATIC u32 vg_strdjb2( const char *str )
62 {
63 u32 hash = 5381, c;
64
65 while( (c = *str++) )
66 hash = ((hash << 5) + hash) + c; /* hash * 33 + c */
67
68 return hash;
69 }
70
71 #include <stdio.h>
72 #include <dirent.h>
73 #include <string.h>
74 #include <stdarg.h>
75 #include <ctype.h>
76 #include <math.h>
77 #include <assert.h>
78
79 #define VG_MIN( A, B ) ((A)<(B)?(A):(B))
80 #define VG_MAX( A, B ) ((A)>(B)?(A):(B))
81 #endif