perf vendor events: Initial JSON/events list for power10 platform
[linux-2.6-microblaze.git] / tools / perf / pmu-events / jsmn.h
1 /* SPDX-License-Identifier: MIT */
2 #ifndef __JSMN_H_
3 #define __JSMN_H_
4
5 /*
6  * JSON type identifier. Basic types are:
7  *      o Object
8  *      o Array
9  *      o String
10  *      o Other primitive: number, boolean (true/false) or null
11  */
12 typedef enum {
13         JSMN_PRIMITIVE = 0,
14         JSMN_OBJECT = 1,
15         JSMN_ARRAY = 2,
16         JSMN_STRING = 3
17 } jsmntype_t;
18
19 typedef enum {
20         /* Not enough tokens were provided */
21         JSMN_ERROR_NOMEM = -1,
22         /* Invalid character inside JSON string */
23         JSMN_ERROR_INVAL = -2,
24         /* The string is not a full JSON packet, more bytes expected */
25         JSMN_ERROR_PART = -3,
26         /* Everything was fine */
27         JSMN_SUCCESS = 0
28 } jsmnerr_t;
29
30 /*
31  * JSON token description.
32  * @param               type    type (object, array, string etc.)
33  * @param               start   start position in JSON data string
34  * @param               end             end position in JSON data string
35  */
36 typedef struct {
37         jsmntype_t type;
38         int start;
39         int end;
40         int size;
41 } jsmntok_t;
42
43 /*
44  * JSON parser. Contains an array of token blocks available. Also stores
45  * the string being parsed now and current position in that string
46  */
47 typedef struct {
48         unsigned int pos; /* offset in the JSON string */
49         int toknext; /* next token to allocate */
50         int toksuper; /* superior token node, e.g parent object or array */
51 } jsmn_parser;
52
53 /*
54  * Create JSON parser over an array of tokens
55  */
56 void jsmn_init(jsmn_parser *parser);
57
58 /*
59  * Run JSON parser. It parses a JSON data string into and array of tokens,
60  * each describing a single JSON object.
61  */
62 jsmnerr_t jsmn_parse(jsmn_parser *parser, const char *js,
63                      size_t len,
64                      jsmntok_t *tokens, unsigned int num_tokens);
65
66 const char *jsmn_strerror(jsmnerr_t err);
67
68 #endif /* __JSMN_H_ */