Skip to content

Commit

Permalink
CXX-429 clang format pass
Browse files Browse the repository at this point in the history
  • Loading branch information
amidvidy committed Apr 23, 2015
1 parent 72dca8d commit a16f3ed
Show file tree
Hide file tree
Showing 13 changed files with 316 additions and 387 deletions.
323 changes: 167 additions & 156 deletions src/bsoncxx/json.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,190 +33,201 @@ BSONCXX_INLINE_NAMESPACE_BEGIN

namespace {

class json_visitor {
public:
json_visitor(std::ostream& out, bool is_array, std::size_t padding)
: out(out), stack({is_array}), padding(padding) {}

void visit_key(stdx::string_view value) {
pad();

if (!stack.back()) {
out << "\"" << value.data() << "\""
<< " : ";
}
}

void visit_value(const types::b_eod&) {}

void visit_value(const types::b_double& value) { out << value.value; }

void visit_value(const types::b_utf8& value) { out << "\"" << value.value.data() << "\""; }
class json_visitor {
public:
json_visitor(std::ostream& out, bool is_array, std::size_t padding)
: out(out), stack({is_array}), padding(padding) {
}

void visit_value(const types::b_document& value) {
out << "{" << std::endl;
stack.push_back(false);
visit_children(value.value);
pad();
out << "}";
}
void visit_key(stdx::string_view value) {
pad();

void visit_value(const types::b_array& value) {
out << "[" << std::endl;
stack.push_back(true);
visit_children(value.value);
pad();
out << "]";
if (!stack.back()) {
out << "\"" << value.data() << "\""
<< " : ";
}
}

void visit_value(const types::b_binary& value) {

std::size_t b64_len;

b64_len = (value.size / 3 + 1) * 4 + 1;
auto b64 = stdx::make_unique<char[]>(b64_len);
b64::ntop(value.bytes, value.size, b64.get(), b64_len);
void visit_value(const types::b_eod&) {
}

out << "{" << std::endl;
pad(1);
out << "\"$type\" : " << to_string(value.sub_type) << "," << std::endl;
pad(1);
out << "\"$binary\" : " << b64.get() << "," << std::endl;
pad();
out << "}";
}
void visit_value(const types::b_double& value) {
out << value.value;
}

void visit_value(const types::b_undefined&) {
void visit_value(const types::b_utf8& value) {
out << "\"" << value.value.data() << "\"";
}

out << "{" << std::endl;
pad(1);
out << "\"$undefined\" : true" << std::endl;
pad();
out << "}";
}
void visit_value(const types::b_document& value) {
out << "{" << std::endl;
stack.push_back(false);
visit_children(value.value);
pad();
out << "}";
}

void visit_value(const types::b_oid& value) {
void visit_value(const types::b_array& value) {
out << "[" << std::endl;
stack.push_back(true);
visit_children(value.value);
pad();
out << "]";
}

out << "{" << std::endl;
pad(1);
out << "\"$oid\" : \"" << value.value << "\"" << std::endl;
pad();
out << "}";
}
void visit_value(const types::b_binary& value) {
std::size_t b64_len;

void visit_value(const types::b_bool& value) { out << (value.value ? "true" : "false"); }
b64_len = (value.size / 3 + 1) * 4 + 1;
auto b64 = stdx::make_unique<char[]>(b64_len);
b64::ntop(value.bytes, value.size, b64.get(), b64_len);

void visit_value(const types::b_date& value) {
out << "{" << std::endl;
pad(1);
out << "\"$type\" : " << to_string(value.sub_type) << "," << std::endl;
pad(1);
out << "\"$binary\" : " << b64.get() << "," << std::endl;
pad();
out << "}";
}

out << "{" << std::endl;
pad(1);
out << "\"$date\" : " << value.value << std::endl;
pad();
out << "}";
}
void visit_value(const types::b_undefined&) {
out << "{" << std::endl;
pad(1);
out << "\"$undefined\" : true" << std::endl;
pad();
out << "}";
}

void visit_value(const types::b_null&) { out << "null"; }
void visit_value(const types::b_oid& value) {
out << "{" << std::endl;
pad(1);
out << "\"$oid\" : \"" << value.value << "\"" << std::endl;
pad();
out << "}";
}

void visit_value(const types::b_regex& value) {
void visit_value(const types::b_bool& value) {
out << (value.value ? "true" : "false");
}

out << "{" << std::endl;
pad(1);
out << "\"$regex\" : \"" << value.regex.data() << "\"," << std::endl;
pad();
out << "\"$options\" : \"" << value.options.data() << "\"" << std::endl;
pad();
out << "}";
}
void visit_value(const types::b_date& value) {
out << "{" << std::endl;
pad(1);
out << "\"$date\" : " << value.value << std::endl;
pad();
out << "}";
}

void visit_value(const types::b_dbpointer& value) {
void visit_value(const types::b_null&) {
out << "null";
}

out << "{" << std::endl;
pad(1);
out << "\"$ref\" : \"" << value.collection.data() << "\"";
void visit_value(const types::b_regex& value) {
out << "{" << std::endl;
pad(1);
out << "\"$regex\" : \"" << value.regex.data() << "\"," << std::endl;
pad();
out << "\"$options\" : \"" << value.options.data() << "\"" << std::endl;
pad();
out << "}";
}

if (value.value) {
out << "," << std::endl;
pad();
out << "\"$id\" : \"" << value.value.to_string().data() << "\"" << std::endl;
}
void visit_value(const types::b_dbpointer& value) {
out << "{" << std::endl;
pad(1);
out << "\"$ref\" : \"" << value.collection.data() << "\"";

if (value.value) {
out << "," << std::endl;
pad();
out << "}";
out << "\"$id\" : \"" << value.value.to_string().data() << "\"" << std::endl;
}

void visit_value(const types::b_code& value) { out << value.code.data(); }

void visit_value(const types::b_symbol& value) { out << value.symbol.data(); }

void visit_value(const types::b_codewscope& value) { out << value.code.data(); }
pad();
out << "}";
}

void visit_value(const types::b_int32& value) { out << value.value; }
void visit_value(const types::b_code& value) {
out << value.code.data();
}

void visit_value(const types::b_timestamp& value) {
void visit_value(const types::b_symbol& value) {
out << value.symbol.data();
}

out << "{" << std::endl;
pad(1);
out << "\"$timestamp\" : {" << std::endl;
pad(2);
out << "\"$t\" : " << value.timestamp << "," << std::endl;
pad(2);
out << "\"$i\" : " << value.increment << std::endl;
pad(1);
out << "}";
pad();
out << "}";
}
void visit_value(const types::b_codewscope& value) {
out << value.code.data();
}

void visit_value(const types::b_int64& value) { out << value.value; }
void visit_value(const types::b_int32& value) {
out << value.value;
}

void visit_value(const types::b_minkey&) {
void visit_value(const types::b_timestamp& value) {
out << "{" << std::endl;
pad(1);
out << "\"$timestamp\" : {" << std::endl;
pad(2);
out << "\"$t\" : " << value.timestamp << "," << std::endl;
pad(2);
out << "\"$i\" : " << value.increment << std::endl;
pad(1);
out << "}";
pad();
out << "}";
}

out << "{" << std::endl;
pad(1);
out << "\"$minKey\" : 1" << std::endl;
pad();
out << "}";
}
void visit_value(const types::b_int64& value) {
out << value.value;
}

void visit_value(const types::b_maxkey&) {
void visit_value(const types::b_minkey&) {
out << "{" << std::endl;
pad(1);
out << "\"$minKey\" : 1" << std::endl;
pad();
out << "}";
}

out << "{" << std::endl;
pad(1);
out << "\"$maxKey\" : 1" << std::endl;
pad();
out << "}";
}
void visit_value(const types::b_maxkey&) {
out << "{" << std::endl;
pad(1);
out << "\"$maxKey\" : 1" << std::endl;
pad();
out << "}";
}

private:
std::ostream& out;
std::vector<bool> stack;
std::size_t padding;
private:
std::ostream& out;
std::vector<bool> stack;
std::size_t padding;

void pad(std::size_t extra = 0) {
out << std::setw((stack.size() + -1 + extra + padding) * 4) << "" << std::setw(0);
}
void pad(std::size_t extra = 0) {
out << std::setw((stack.size() + -1 + extra + padding) * 4) << "" << std::setw(0);
}

void visit_children(const document::view& view) {
bool first = true;
for (auto&& x : view) {
if (!first) {
out << ", " << std::endl;
}
first = false;
visit_key(x.key());
switch (static_cast<int>(x.type())) {
#define BSONCXX_ENUM(name, val) \
case val: \
visit_value(x.get_##name()); \
break;
void visit_children(const document::view& view) {
bool first = true;
for (auto&& x : view) {
if (!first) {
out << ", " << std::endl;
}
first = false;
visit_key(x.key());
switch (static_cast<int>(x.type())) {
#define BSONCXX_ENUM(name, val) \
case val: \
visit_value(x.get_##name()); \
break;
#include <bsoncxx/enums/type.hpp>
#undef BSONCXX_ENUM
}
}
out << std::endl;
stack.pop_back();
}
};
out << std::endl;
stack.pop_back();
}
};

} // namespace

Expand All @@ -235,11 +246,11 @@ std::string to_json(document::element element) {
json_visitor v(ss, false, 0);

switch ((int)element.type()) {
#define BSONCXX_ENUM(name, val) \
case val: \
v.visit_key(element.key()); \
v.visit_value(element.get_##name()); \
break;
#define BSONCXX_ENUM(name, val) \
case val: \
v.visit_key(element.key()); \
v.visit_value(element.get_##name()); \
break;
#include <bsoncxx/enums/type.hpp>
#undef BSONCXX_ENUM
}
Expand All @@ -253,10 +264,10 @@ std::string to_json(types::value value) {
json_visitor v(ss, false, 0);

switch ((int)value.type()) {
#define BSONCXX_ENUM(name, val) \
case val: \
v.visit_value(value.get_##name()); \
break;
#define BSONCXX_ENUM(name, val) \
case val: \
v.visit_value(value.get_##name()); \
break;
#include <bsoncxx/enums/type.hpp>
#undef BSONCXX_ENUM
}
Expand Down
Loading

0 comments on commit a16f3ed

Please sign in to comment.