SimpleTorrent
bparser.h
浏览该文件的文档.
1 
6 #ifndef BPARSER_H
7 #define BPARSER_H
8 
9 #include <stddef.h>
10 #include <inttypes.h>
11 
16 {
17  B_NA,
18  B_STR,
19  B_INT,
20  B_LIST,
21  B_DICT,
22  NR_BTYPE
23 };
24 
39 struct BNode
40 {
41  enum BNodeType type;
42  union
43  {
44  struct {
45  struct BNode *l_item;
46  struct BNode *l_next;
47  };
48  struct {
49  char *d_key;
50  struct BNode *d_val;
51  struct BNode *d_next;
52  };
53  struct {
54  size_t s_size;
55  char *s_data;
56  };
57  long i;
58  };
59  char *start;
60  char *end;
61 };
62 
63 // 解析 B 编码数据获取抽象语法树
64 struct BNode *bparser(char *bcode);
65 
66 // 释放 B 编码的抽象语法树
67 void free_bnode(struct BNode **pbnode);
68 
69 #endif // BPARSER_H
char * start
结点在源缓冲区的开始处
Definition: bparser.h:59
enum BNodeType type
类型标签
Definition: bparser.h:41
struct BNode * l_next
余下列表项
Definition: bparser.h:46
size_t s_size
串长度
Definition: bparser.h:54
char * s_data
串内容(深拷贝)
Definition: bparser.h:55
char * end
结点在源缓冲区的结束处
Definition: bparser.h:60
void free_bnode(struct BNode **pbnode)
释放 B 编码的抽象语法树
Definition: bparser.c:302
B 编码结点
Definition: bparser.h:39
char * d_key
字典键(在 B 编码中是串,但是可以保证是字符串)
Definition: bparser.h:49
struct BNode * l_item
列表项
Definition: bparser.h:45
struct BNode * d_next
余下字典项
Definition: bparser.h:51
struct BNode * bparser(char *bcode)
解析 B 编码
Definition: bparser.c:284
BNodeType
B 编码语法结点类型标签
Definition: bparser.h:15
long i
整型
Definition: bparser.h:57
struct BNode * d_val
字典值
Definition: bparser.h:50