summaryrefslogtreecommitdiff
blob: be7359fdd7f4a177fab98c28b32c6b028058d82a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#ifndef _ZoO_IO_ERROR_H_
#define _ZoO_IO_ERROR_H_

#include <stdio.h>

#include "../pervasive.h"

#define ZoO_DEBUG_ALL 1

#ifndef ZoO_DEBUG_ALL
   #define ZoO_DEBUG_ALL 0
#endif

#ifndef ZoO_DEBUG_PROGRAM_FLOW
   #define ZoO_DEBUG_PROGRAM_FLOW   (0 || ZoO_DEBUG_ALL)
#endif

#ifndef ZoO_DEBUG_CONFIG
   #define ZoO_DEBUG_CONFIG         (0 || ZoO_DEBUG_ALL)
#endif

#ifndef ZoO_DEBUG_LEARNING
   #define ZoO_DEBUG_LEARNING       (0 || ZoO_DEBUG_ALL)
#endif

#define ZoO_DEBUG_NETWORK  1

#ifndef ZoO_DEBUG_NETWORK
   #define ZoO_DEBUG_NETWORK        (0 || ZoO_DEBUG_ALL)
#endif

#define ZoO_ENABLE_WARNINGS_OUTPUT              1
#define ZoO_ENABLE_RUNTIME_ERRORS_OUTPUT        1
#define ZoO_ENABLE_PROGRAMMING_ERRORS_OUTPUT    1
#define ZoO_ENABLE_FATAL_ERROR_OUTPUT           1

#ifdef ZoO_ENABLE_ERROR_LOCATION
   #define ZoO_LOCATION "[" __FILE__ "][" ZoO_TO_STRING(__LINE__) "]"
#else
   #define ZoO_LOCATION ""
#endif

#define ZoO_PRINT_STDERR(symbol, str, ...)\
   fprintf(stderr, "[" symbol "]" ZoO_LOCATION " " str "\n", __VA_ARGS__);

/*
 * Given that we use preprocessor contants as flags, we can expect the compilers
 * to remove the test condition for disabled flags. No need to be shy about
 * allowing many debug options.
 */

#define ZoO_DEBUG(flag, str, ...)\
   ZoO_ISOLATE\
   (\
      if (flag)\
      {\
         ZoO_PRINT_STDERR("D", str, __VA_ARGS__);\
      }\
   )


#define ZoO_WARNING(str, ...)\
   ZoO_ISOLATE\
   (\
      if (ZoO_ENABLE_WARNINGS_OUTPUT)\
      {\
         ZoO_PRINT_STDERR("W", str, __VA_ARGS__);\
      }\
   )

#define ZoO_ERROR(str, ...)\
   ZoO_ISOLATE\
   (\
      if (ZoO_ENABLE_RUNTIME_ERRORS_OUTPUT)\
      {\
         ZoO_PRINT_STDERR("E", str, __VA_ARGS__);\
      }\
   )

#define ZoO_PROG_ERROR(str, ...)\
   ZoO_ISOLATE\
   (\
      if (ZoO_ENABLE_PROGRAMMING_ERRORS_OUTPUT)\
      {\
         ZoO_PRINT_STDERR("P", str, __VA_ARGS__);\
      }\
   )

#define ZoO_FATAL(str, ...)\
   ZoO_ISOLATE\
   (\
     if (ZoO_ENABLE_FATAL_ERROR_OUTPUT)\
      {\
         ZoO_PRINT_STDERR("F", str, __VA_ARGS__);\
      }\
   )

/* For outputs without dynamic content (static). ******************************/

#define ZoO_PRINT_S_STDERR(symbol, str)\
   fprintf(stderr, "[" symbol "]" ZoO_LOCATION " " str "\n");

#define ZoO_S_DEBUG(flag, str)\
   ZoO_ISOLATE\
   (\
      if (flag)\
      {\
         ZoO_PRINT_S_STDERR("D", str);\
      }\
   )

#define ZoO_S_WARNING(str)\
   ZoO_ISOLATE\
   (\
      if (ZoO_ENABLE_WARNINGS_OUTPUT)\
      {\
         ZoO_PRINT_S_STDERR("W", str);\
      }\
   )

#define ZoO_S_ERROR(str)\
   ZoO_ISOLATE\
   (\
      if (ZoO_ENABLE_RUNTIME_ERRORS_OUTPUT)\
      {\
         ZoO_PRINT_S_STDERR("E", str);\
      }\
   )

#define ZoO_S_PROG_ERROR(str)\
   ZoO_ISOLATE\
   (\
      if (ZoO_ENABLE_PROGRAMMING_ERRORS_OUTPUT)\
      {\
         ZoO_PRINT_S_STDERR("P", str);\
      }\
   )

#define ZoO_S_FATAL(str)\
   ZoO_ISOLATE\
   (\
     if (ZoO_ENABLE_FATAL_ERROR_OUTPUT)\
      {\
         ZoO_PRINT_S_STDERR("F", str);\
      }\
   )

#endif