1 /*
2  * Copyright 2016 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  *
7  */
8 
9 //
10 //
11 //
12 
13 #include <stdlib.h>
14 #include <stdio.h>
15 
16 //
17 //
18 //
19 
20 #include "assert_skc.h"
21 
22 //
23 //
24 //
25 
26 #define SKC_ERR_TO_STR(err) case err: return #err
27 
28 //
29 //
30 //
31 
32 char const *
skc_get_error_string(skc_err const err)33 skc_get_error_string(skc_err const err)
34 {
35   switch(err)
36     {
37       SKC_ERR_TO_STR(SKC_ERR_SUCCESS);
38       SKC_ERR_TO_STR(SKC_ERR_NOT_IMPLEMENTED);
39       SKC_ERR_TO_STR(SKC_ERR_POOL_EMPTY);
40       SKC_ERR_TO_STR(SKC_ERR_CONDVAR_WAIT);
41       SKC_ERR_TO_STR(SKC_ERR_LAYER_ID_INVALID);
42       SKC_ERR_TO_STR(SKC_ERR_LAYER_NOT_EMPTY);
43       SKC_ERR_TO_STR(SKC_ERR_TRANSFORM_WEAKREF_INVALID);
44       SKC_ERR_TO_STR(SKC_ERR_STROKE_STYLE_WEAKREF_INVALID);
45       SKC_ERR_TO_STR(SKC_ERR_COMMAND_NOT_READY);
46       SKC_ERR_TO_STR(SKC_ERR_COMMAND_NOT_COMPLETED);
47       SKC_ERR_TO_STR(SKC_ERR_COMMAND_NOT_STARTED);
48       SKC_ERR_TO_STR(SKC_ERR_COMMAND_NOT_READY_OR_COMPLETED);
49       SKC_ERR_TO_STR(SKC_ERR_COMPOSITION_SEALED);
50       SKC_ERR_TO_STR(SKC_ERR_STYLING_SEALED);
51       SKC_ERR_TO_STR(SKC_ERR_HANDLE_INVALID);
52       SKC_ERR_TO_STR(SKC_ERR_HANDLE_OVERFLOW);
53 
54     default:
55       return "UNKNOWN SKC ERROR CODE";
56     }
57 }
58 
59 //
60 //
61 //
62 
63 skc_err
assert_skc(skc_err const err,char const * const file,int const line,bool const abort)64 assert_skc(skc_err const err, char const * const file, int const line, bool const abort)
65 {
66   if (err != SKC_ERR_SUCCESS)
67     {
68       char const * const skc_err_str = skc_get_error_string(err);
69 
70       fprintf(stderr,
71               "\"%s\", line %d: skc_assert (%d) = \"%s\"",
72               file,line,err,skc_err_str);
73 
74       if (abort)
75         {
76           // stop profiling and reset device here if necessary
77           exit(err);
78         }
79     }
80 
81   return err;
82 }
83 
84 //
85 //
86 //
87