steam ugc
[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 u32 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] ) return i;
54
55 if( (behaviour == k_strncpy_always_add_null) && (i == len-1) ){
56 dst[i] = '\0';
57 return i;
58 }
59 }
60
61 return 0;
62 }
63
64 VG_STATIC u32 vg_strdjb2( const char *str )
65 {
66 u32 hash = 5381, c;
67
68 while( (c = *str++) )
69 hash = ((hash << 5) + hash) + c; /* hash * 33 + c */
70
71 return hash;
72 }
73
74 #include <stdio.h>
75 #include <dirent.h>
76 #include <string.h>
77 #include <stdarg.h>
78 #include <ctype.h>
79 #include <math.h>
80 #include <assert.h>
81
82 #define VG_MIN( A, B ) ((A)<(B)?(A):(B))
83 #define VG_MAX( A, B ) ((A)>(B)?(A):(B))
84 #endif