71
77
void tr_bencFree( tr_benc * );
73
char* tr_bencSave( const tr_benc * val,
76
char* tr_bencSaveAsJSON( const tr_benc * top,
79
int tr_bencSaveFile( const char * filename,
82
int tr_bencSaveJSONFile( const char * filename,
85
void tr_bencInitStr( tr_benc *,
89
void tr_bencInitRaw( tr_benc *,
93
void tr_bencInitInt( tr_benc *,
96
int tr_bencInitDict( tr_benc *,
97
size_t reserveCount );
99
int tr_bencInitList( tr_benc *,
100
size_t reserveCount );
79
char* tr_bencSave( const tr_benc * val, int * len );
81
char* tr_bencSaveAsJSON( const tr_benc * top, struct evbuffer * out );
83
int tr_bencSaveFile( const char * filename, const tr_benc * );
85
int tr_bencSaveJSONFile( const char * filename, const tr_benc * );
87
void tr_bencInitStr( tr_benc *, const void * str, int str_len );
89
void tr_bencInitRaw( tr_benc *, const void * raw, size_t raw_len );
91
void tr_bencInitInt( tr_benc *, int64_t num );
93
int tr_bencInitDict( tr_benc *, size_t reserveCount );
95
int tr_bencInitList( tr_benc *, size_t reserveCount );
106
int tr_bencListReserve( tr_benc *,
107
size_t reserveCount );
101
int tr_bencListReserve( tr_benc *, size_t reserveCount );
109
103
tr_benc * tr_bencListAdd( tr_benc * );
111
tr_benc * tr_bencListAddInt( tr_benc *,
114
tr_benc * tr_bencListAddStr( tr_benc *,
117
tr_benc * tr_bencListAddList( tr_benc *,
118
size_t reserveCount );
120
tr_benc * tr_bencListAddDict( tr_benc *,
121
size_t reserveCount );
105
tr_benc * tr_bencListAddInt( tr_benc *, int64_t val );
107
tr_benc * tr_bencListAddStr( tr_benc *, const char * val );
109
tr_benc * tr_bencListAddList( tr_benc *, size_t reserveCount );
111
tr_benc * tr_bencListAddDict( tr_benc *, size_t reserveCount );
123
113
size_t tr_bencListSize( const tr_benc * list );
125
tr_benc * tr_bencListChild( tr_benc * list,
132
int tr_bencDictReserve( tr_benc *,
133
size_t reserveCount );
135
int tr_bencDictRemove( tr_benc *,
138
tr_benc * tr_bencDictAdd( tr_benc *,
141
tr_benc * tr_bencDictAddDouble( tr_benc *,
145
tr_benc * tr_bencDictAddInt( tr_benc *,
149
tr_benc * tr_bencDictAddStr( tr_benc *,
153
tr_benc * tr_bencDictAddList( tr_benc *,
157
tr_benc * tr_bencDictAddDict( tr_benc *,
161
tr_benc * tr_bencDictAddRaw( tr_benc *,
166
tr_benc* tr_bencDictFind( tr_benc *,
169
int tr_bencDictFindList( tr_benc *,
173
int tr_bencDictFindDict( tr_benc *,
177
int tr_bencDictFindInt( tr_benc *,
181
int tr_bencDictFindDouble( tr_benc *,
185
int tr_bencDictFindStr( tr_benc *,
187
const char ** setme );
189
int tr_bencDictFindRaw( tr_benc *,
191
const uint8_t ** setme_raw,
192
size_t * setme_len );
198
int tr_bencGetInt( const tr_benc * val,
201
int tr_bencGetStr( const tr_benc * val,
202
const char ** setme );
204
int tr_bencIsType( const tr_benc *,
207
#define tr_bencIsInt( b ) tr_bencIsType( ( b ), TYPE_INT )
208
#define tr_bencIsDict( b ) tr_bencIsType( ( b ), TYPE_DICT )
209
#define tr_bencIsList( b ) tr_bencIsType( ( b ), TYPE_LIST )
210
#define tr_bencIsString( b ) tr_bencIsType( ( b ), TYPE_STR )
115
tr_benc * tr_bencListChild( tr_benc * list, size_t n );
121
int tr_bencDictReserve( tr_benc *, size_t reserveCount );
123
int tr_bencDictRemove( tr_benc *, const char * key );
125
tr_benc * tr_bencDictAdd( tr_benc *, const char * key );
127
tr_benc * tr_bencDictAddDouble( tr_benc *, const char * key, double );
129
tr_benc * tr_bencDictAddInt( tr_benc *, const char * key, int64_t );
131
tr_benc * tr_bencDictAddStr( tr_benc *, const char * key, const char * );
133
tr_benc * tr_bencDictAddList( tr_benc *, const char * key, size_t reserve );
135
tr_benc * tr_bencDictAddDict( tr_benc *, const char * key, size_t reserve );
137
tr_benc * tr_bencDictAddRaw( tr_benc *, const char * key,
138
const void * raw, size_t rawlen );
140
tr_benc* tr_bencDictFind( tr_benc *, const char * key );
142
tr_bool tr_bencDictFindList( tr_benc *, const char * key, tr_benc ** setme );
144
tr_bool tr_bencDictFindDict( tr_benc *, const char * key, tr_benc ** setme );
146
tr_bool tr_bencDictFindInt( tr_benc *, const char * key, int64_t * setme );
148
tr_bool tr_bencDictFindDouble( tr_benc *, const char * key, double * setme );
150
tr_bool tr_bencDictFindStr( tr_benc *, const char * key, const char ** setme );
152
tr_bool tr_bencDictFindRaw( tr_benc *, const char * key,
153
const uint8_t ** setme_raw, size_t * setme_len );
159
tr_bool tr_bencGetInt( const tr_benc * val, int64_t * setme );
161
tr_bool tr_bencGetStr( const tr_benc * val, const char ** setme );
163
static TR_INLINE tr_bool tr_bencIsType ( const tr_benc * b, int type ) { return ( b != NULL ) && ( b->type == type ); }
164
static TR_INLINE tr_bool tr_bencIsInt ( const tr_benc * b ) { return tr_bencIsType( b, TYPE_INT ); }
165
static TR_INLINE tr_bool tr_bencIsDict ( const tr_benc * b ) { return tr_bencIsType( b, TYPE_DICT ); }
166
static TR_INLINE tr_bool tr_bencIsList ( const tr_benc * b ) { return tr_bencIsType( b, TYPE_LIST ); }
167
static TR_INLINE tr_bool tr_bencIsString( const tr_benc * b ) { return tr_bencIsType( b, TYPE_STR ); }
213
170
*** Treat these as private -- they're only made public here