Skip to content

Commit 8ffa5af

Browse files
author
Janne Kulmala
committed
Move everything under "ben" namespace [PERFECTIVE]
1 parent 16e8ed0 commit 8ffa5af

File tree

6 files changed

+60
-43
lines changed

6 files changed

+60
-43
lines changed

bencode.cc

+16-12
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,17 @@ const int MAX_DEPTH = 64;
1717
#define NO_LEADING_SPACES
1818
#define NO_LEADING_ZEROES
1919

20-
static int bencode_string(std::string *out, const std::string &s)
20+
namespace ben {
21+
22+
int encode_string(std::string *out, const std::string &s)
2123
{
2224
char length[16];
2325
sprintf(length, "%zd:", s.size());
2426
*out += length + s;
2527
return 0;
2628
}
2729

28-
int bencode(std::string *out, const variant &value)
30+
int encode(std::string *out, const variant &value)
2931
{
3032
variant_map dict;
3133
variant_list list;
@@ -38,16 +40,16 @@ int bencode(std::string *out, const variant &value)
3840
*out += 'd';
3941
for (map_const_iter<std::string, variant> i(dict); i.valid();
4042
i.next()) {
41-
bencode_string(out, i.key());
42-
if (bencode(out, *i))
43+
encode_string(out, i.key());
44+
if (encode(out, *i))
4345
return -1;
4446
}
4547
*out += 'e';
4648

4749
} else if (value.get(&list) == 0) {
4850
*out += 'l';
4951
for (list_const_iter<variant> i(list); i.valid(); i.next()) {
50-
if (bencode(out, *i))
52+
if (encode(out, *i))
5153
return -1;
5254
}
5355
*out += 'e';
@@ -66,7 +68,7 @@ int bencode(std::string *out, const variant &value)
6668
*out += b ? "b1" : "b0";
6769

6870
} else if (value.get(&s) == 0) {
69-
bencode_string(out, s);
71+
encode_string(out, s);
7072

7173
} else {
7274
fprintf(stderr, "Unable to bencode\n");
@@ -76,7 +78,7 @@ int bencode(std::string *out, const variant &value)
7678
return 0;
7779
}
7880

79-
int bdecoder::decode_string(std::string *s)
81+
int decoder::decode_string(std::string *s)
8082
{
8183
size_t end = m_buf.find(':', m_pos);
8284
if (end == std::string::npos || end >= m_len) {
@@ -104,17 +106,17 @@ int bdecoder::decode_string(std::string *s)
104106
return 0;
105107
}
106108

107-
bdecoder::bdecoder(const std::string &buf) :
109+
decoder::decoder(const std::string &buf) :
108110
m_buf(buf), m_pos(0), m_len(buf.size()), m_depth(0), m_error(NULL)
109111
{
110112
}
111113

112-
bdecoder::~bdecoder()
114+
decoder::~decoder()
113115
{
114116
free(m_error);
115117
}
116118

117-
int bdecoder::decode(variant *value)
119+
int decoder::decode(variant *value)
118120
{
119121
if (m_pos >= m_len) {
120122
set_error("Input overrun");
@@ -213,15 +215,15 @@ int bdecoder::decode(variant *value)
213215
return 0;
214216
}
215217

216-
void bdecoder::set_error(const char *fmt, ...)
218+
void decoder::set_error(const char *fmt, ...)
217219
{
218220
va_list ap;
219221
va_start(ap, fmt);
220222
vasprintf(&m_error, fmt, ap);
221223
va_end(ap);
222224
}
223225

224-
bool bdecoder::validate_int(const std::string &s)
226+
bool decoder::validate_int(const std::string &s)
225227
{
226228
#ifdef NO_LEADING_SPACES
227229
if (s.size() >= 1 && isspace(s[0])) {
@@ -237,3 +239,5 @@ bool bdecoder::validate_int(const std::string &s)
237239
#endif
238240
return true;
239241
}
242+
243+
}

bencode.h

+9-5
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,12 @@
55
#include <string>
66
#include <assert.h>
77

8-
class bdecoder {
8+
namespace ben {
9+
10+
class decoder {
911
public:
10-
bdecoder(const std::string &buf);
11-
~bdecoder();
12+
decoder(const std::string &buf);
13+
~decoder();
1214

1315
const char *error() const { return m_error; }
1416
int pos() const { return m_pos; }
@@ -20,7 +22,7 @@ class bdecoder {
2022

2123
static int decode_all(variant *value, const std::string &buf)
2224
{
23-
bdecoder decoder(buf);
25+
decoder decoder(buf);
2426
if (decoder.decode(value))
2527
return -1;
2628
if (!decoder.at_end())
@@ -39,6 +41,8 @@ class bdecoder {
3941
bool validate_int(const std::string &s);
4042
};
4143

42-
int bencode(std::string *out, const variant &value);
44+
int encode(std::string *out, const variant &value);
45+
46+
}
4347

4448
#endif

common.h

+4
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
#include <list>
55
#include <map>
66

7+
namespace ben {
8+
79
template<class T>
810
class list_iter {
911
public:
@@ -242,4 +244,6 @@ class map_safe_iter {
242244
typename map<Key, Value>::iterator end;
243245
};
244246

247+
}
248+
245249
#endif

example/example.cc

+16-16
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ class user {
1212
{
1313
}
1414

15-
int load(const variant &v);
16-
variant save() const;
15+
int load(const ben::variant &v);
16+
ben::variant save() const;
1717

1818
void display() const;
1919

@@ -24,13 +24,13 @@ class user {
2424

2525
private:
2626
std::string m_name;
27-
map<std::string, std::string> m_contacts;
27+
ben::map<std::string, std::string> m_contacts;
2828
int m_age;
2929
};
3030

31-
int user::load(const variant &v)
31+
int user::load(const ben::variant &v)
3232
{
33-
variant_map d;
33+
ben::variant_map d;
3434
if (v.get(&d) ||
3535
d.get("name").get(&m_name) ||
3636
d.get("age").get(&m_age) ||
@@ -43,9 +43,9 @@ int user::load(const variant &v)
4343
return 0;
4444
}
4545

46-
variant user::save() const
46+
ben::variant user::save() const
4747
{
48-
variant_map d;
48+
ben::variant_map d;
4949
d.insert("name", m_name);
5050
d.insert("age", m_age);
5151
d.insert("contacts", m_contacts);
@@ -56,7 +56,7 @@ void user::display() const
5656
{
5757
printf("%s, %d\n", m_name.c_str(), m_age);
5858
printf("----------------\n");
59-
for (map_const_iter<std::string, std::string> i(m_contacts);
59+
for (ben::map_const_iter<std::string, std::string> i(m_contacts);
6060
i.valid(); i.next()) {
6161
printf("%s = %s\n", i.key().c_str(), i->c_str());
6262
}
@@ -69,16 +69,16 @@ int load_users(const char *fname)
6969
std::string buf = load_file(fname);
7070
if (buf.empty())
7171
return -1;
72-
variant data;
73-
variant_list list;
74-
if (bdecoder::decode_all(&data, buf))
72+
ben::variant data;
73+
ben::variant_list list;
74+
if (ben::decoder::decode_all(&data, buf))
7575
return -1;
7676

7777
if (data.get(&list))
7878
return -1;
7979

8080
users.clear();
81-
for (list_iter<variant> i(list); i.valid(); i.next()) {
81+
for (ben::list_iter<ben::variant> i(list); i.valid(); i.next()) {
8282
user user;
8383
if (user.load(*i))
8484
return -1;
@@ -90,12 +90,12 @@ int load_users(const char *fname)
9090

9191
int save_users(const char *fname)
9292
{
93-
variant_list list;
94-
for (list_iter<user> i(users); i.valid(); i.next()) {
93+
ben::variant_list list;
94+
for (ben::list_iter<user> i(users); i.valid(); i.next()) {
9595
list.push_back(i->save());
9696
}
9797
std::string buf;
98-
if (bencode(&buf, list))
98+
if (ben::encode(&buf, list))
9999
return -1;
100100
return write_file(fname, buf);
101101
}
@@ -147,7 +147,7 @@ int main(int argc, char **argv)
147147
users.push_back(user);
148148

149149
} else if (cmd == "list") {
150-
for (list_iter<user> i(users); i.valid(); i.next()) {
150+
for (ben::list_iter<user> i(users); i.valid(); i.next()) {
151151
i->display();
152152
printf("\n");
153153
}

tests/tests.cc

+11-10
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ template<class T>
77
void test_decode(const T &expected, const std::string &buf)
88
{
99
/* test decode */
10-
variant data;
11-
if (bdecoder::decode_all(&data, buf)) {
10+
ben::variant data;
11+
if (ben::decoder::decode_all(&data, buf)) {
1212
printf("WARNING: unable to decode\n");
1313
printf("input: %s\n", buf.c_str());
1414
return;
@@ -29,8 +29,8 @@ void test_decode(const T &expected, const std::string &buf)
2929

3030
/* test encode */
3131
std::string encoded;
32-
if (bencode(&encoded, expected)) {
33-
printf("WARNING: unable to bencode\n");
32+
if (ben::encode(&encoded, expected)) {
33+
printf("WARNING: unable to encode\n");
3434
return;
3535
}
3636
if (encoded != buf) {
@@ -43,8 +43,8 @@ void test_decode(const T &expected, const std::string &buf)
4343

4444
void test_invalid_bencode(const std::string &buf)
4545
{
46-
variant data;
47-
if (bdecoder::decode_all(&data, buf) == 0) {
46+
ben::variant data;
47+
if (ben::decoder::decode_all(&data, buf) == 0) {
4848
printf("WARNING: unexpected: able to decode\n");
4949
printf("input: %s\n", buf.c_str());
5050
return;
@@ -54,8 +54,8 @@ void test_invalid_bencode(const std::string &buf)
5454
template<class T>
5555
void test_invalid_type(const std::string &buf)
5656
{
57-
variant data;
58-
if (bdecoder::decode_all(&data, buf)) {
57+
ben::variant data;
58+
if (ben::decoder::decode_all(&data, buf)) {
5959
printf("WARNING: unable to decode\n");
6060
printf("input: %s\n", buf.c_str());
6161
return;
@@ -87,15 +87,16 @@ int main(int argc, char **argv)
8787
test_invalid_type<std::string>("i1234e");
8888
test_invalid_type<std::string>("de");
8989

90-
map<std::string, std::string> sd;
90+
ben::map<std::string, std::string> sd;
9191
test_decode(sd, "de");
9292
sd.insert("foo", "bar");
9393
sd.insert("foz", "baz");
9494
test_decode(sd, "d3:foo3:bar3:foz3:baze");
9595
test_invalid_bencode("d3:foo3:bar3:foz3:baz");
9696
test_invalid_bencode("d3:foo3:bar1234");
9797
test_invalid_bencode("d3:foo3:bari1234e");
98-
test_invalid_type<map<std::string, std::string> >("d3:foo3:bar3:fozi1234ee");
98+
test_invalid_type<ben::map<std::string, std::string> >
99+
("d3:foo3:bar3:fozi1234ee");
99100

100101
std::list<std::string> sl;
101102
test_decode(sl, "le");

variant.h

+4
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
#include <list>
66
#include <string>
77

8+
namespace ben {
9+
810
class variant;
911
typedef std::list<variant> variant_list;
1012
typedef map<std::string, variant> variant_map;
@@ -164,4 +166,6 @@ class variant
164166
container_base *m_container;
165167
};
166168

169+
}
170+
167171
#endif

0 commit comments

Comments
 (0)