]> git.cworth.org Git - apitrace/blob - trace_write.hpp
More compact struct representation.
[apitrace] / trace_write.hpp
1 /**************************************************************************
2  *
3  * Copyright 2007-2010 VMware, Inc.
4  * All Rights Reserved.
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a copy
7  * of this software and associated documentation files (the "Software"), to deal
8  * in the Software without restriction, including without limitation the rights
9  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10  * copies of the Software, and to permit persons to whom the Software is
11  * furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included in
14  * all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22  * THE SOFTWARE.
23  *
24  **************************************************************************/
25
26 #ifndef _TRACE_WRITE_HPP_
27 #define _TRACE_WRITE_HPP_
28
29 namespace Trace {
30
31     typedef unsigned Id;
32
33     struct FunctionSig {
34         Id id;
35         const char *name;
36         unsigned num_args;
37         const char **args;
38     };
39
40     struct StructSig {
41         Id id;
42         const char *name;
43         unsigned num_members;
44         const char **members;
45     };
46
47     struct EnumSig {
48         Id id;
49         const char *name;
50         signed long long value;
51     };
52
53     struct BitmaskVal {
54         const char *name;
55         unsigned long long value;
56     };
57
58     struct BitmaskSig {
59         Id id;
60         unsigned count;
61         const BitmaskVal *values;
62     };
63
64     void Open(void);
65     void Close(void);
66     
67     unsigned BeginEnter(const FunctionSig &function);
68     void EndEnter(void);
69     
70     void BeginLeave(unsigned call);
71     void EndLeave(void);
72     
73     void BeginArg(unsigned index);
74     inline void EndArg(void) {}
75
76     void BeginReturn(void);
77     inline void EndReturn(void) {}
78
79     void BeginArray(size_t length);
80     inline void EndArray(void) {}
81
82     inline void BeginElement(void) {}
83     inline void EndElement(void) {}
84
85     void BeginStruct(const StructSig *sig);
86     inline void EndStruct(void) {}
87
88     void LiteralBool(bool value);
89     void LiteralSInt(signed long long value);
90     void LiteralUInt(unsigned long long value);
91     void LiteralFloat(float value);
92     void LiteralFloat(double value);
93     void LiteralString(const char *str);
94     void LiteralString(const char *str, size_t size);
95     void LiteralWString(const wchar_t *str);
96     void LiteralBlob(const void *data, size_t size);
97     void LiteralEnum(const EnumSig *sig);
98     void LiteralBitmask(const BitmaskSig &bitmask, unsigned long long value);
99     void LiteralNull(void);
100     void LiteralOpaque(const void *ptr);
101
102     void Abort(void);
103 }
104
105 #endif /* _TRACE_WRITE_HPP_ */