Skip to content

Commit

Permalink
I eliminate stdint overloads for JSON stuff per Sam's suggestion.
Browse files Browse the repository at this point in the history
  • Loading branch information
frank-trampe committed Nov 29, 2012
1 parent fb1934e commit 08a7ff5
Show file tree
Hide file tree
Showing 2 changed files with 77 additions and 45 deletions.
80 changes: 53 additions & 27 deletions src/http/json/json_adapter.cc
Original file line number Diff line number Diff line change
Expand Up @@ -219,67 +219,93 @@ std::string to_string_for_json_key(const uuid_t *uuid) {
return uuid_to_str(*uuid);
}

// ctx-less JSON adapter for uint64_t
json_adapter_if_t::json_adapter_map_t get_json_subfields(uint64_t *) {
// ctx-less JSON adapter for int
json_adapter_if_t::json_adapter_map_t get_json_subfields(int *) {
return json_adapter_if_t::json_adapter_map_t();
}

cJSON *render_as_json(uint64_t *target) {
// TODO: Should we not fail when we cannot convert to double (or when we go outside 53-bit range?)
cJSON *render_as_json(int *target) {
return cJSON_CreateNumber(*target);
}

void apply_json_to(cJSON *change, uint64_t *target) {
*target = get_int(change, 0, INT64_MAX);
void apply_json_to(cJSON *change, int *target) {
*target = get_int(change, INT_MIN, INT_MAX);
}

void on_subfield_change(uint64_t *) { }
void on_subfield_change(int *) { }

// ctx-less JSON adapter for int64_t.
json_adapter_if_t::json_adapter_map_t get_json_subfields(int64_t *) {
// ctx-less JSON adapter for long int
json_adapter_if_t::json_adapter_map_t get_json_subfields(long int *) {
return json_adapter_if_t::json_adapter_map_t();
}

cJSON *render_as_json(int64_t *target) {
// TODO: Should we not fail when we cannot convert to double (or when we go outside 53-bit range?)
cJSON *render_as_json(long int *target) {
return cJSON_CreateNumber(*target);
}

void apply_json_to(cJSON *change, int64_t *target) {
*target = get_int(change, INT64_MIN, INT64_MAX);
void apply_json_to(cJSON *change, long int *target) {
*target = get_int(change, LONG_MIN, LONG_MAX);
}

void on_subfield_change(int64_t *) { }
void on_subfield_change(long int *) { }

// ctx-less JSON adapter for int (TODO: Should we not be only using int32_t? FFS.)
json_adapter_if_t::json_adapter_map_t get_json_subfields(int *) {
// ctx-less JSON adapter for long long int
json_adapter_if_t::json_adapter_map_t get_json_subfields(long long int *) {
return json_adapter_if_t::json_adapter_map_t();
}

cJSON *render_as_json(int *target) {
cJSON *render_as_json(long long int *target) {
return cJSON_CreateNumber(*target);
}

void apply_json_to(cJSON *change, int *target) {
*target = get_int(change, INT_MIN, INT_MAX);
void apply_json_to(cJSON *change, long long int *target) {
*target = get_int(change, LLONG_MIN, LLONG_MAX);
}

void on_subfield_change(int *) { }
void on_subfield_change(long long int *) { }

#if defined(RT_JSON_ADAPTER_PLAIN_INTS)
// ctx-less JSON adapter for int (TODO: Should we not be only using int32_t? FFS.)
json_adapter_if_t::json_adapter_map_t get_json_subfields(long int *) {
// ctx-less JSON adapter for unsigned int
json_adapter_if_t::json_adapter_map_t get_json_subfields(unsigned int *) {
return json_adapter_if_t::json_adapter_map_t();
}

cJSON *render_as_json(long int *target) {
cJSON *render_as_json(unsigned int *target) {
return cJSON_CreateNumber(*target);
}

void apply_json_to(cJSON *change, long int *target) {
void apply_json_to(cJSON *change, unsigned int *target) {
*target = get_int(change, INT_MIN, INT_MAX);
}

void on_subfield_change(long int *) { }
#endif
void on_subfield_change(unsigned int *) { }

// ctx-less JSON adapter for unsigned long int
json_adapter_if_t::json_adapter_map_t get_json_subfields(unsigned long int *) {
return json_adapter_if_t::json_adapter_map_t();
}

cJSON *render_as_json(unsigned long int *target) {
return cJSON_CreateNumber(*target);
}

void apply_json_to(cJSON *change, unsigned long int *target) {
*target = get_int(change, LONG_MIN, LONG_MAX);
}

void on_subfield_change(unsigned long int *) { }

// ctx-less JSON adapter for unsigned long long int
json_adapter_if_t::json_adapter_map_t get_json_subfields(unsigned long long int *) {
return json_adapter_if_t::json_adapter_map_t();
}

cJSON *render_as_json(unsigned long long int *target) {
return cJSON_CreateNumber(*target);
}

void apply_json_to(cJSON *change, unsigned long long int *target) {
*target = get_int(change, LLONG_MIN, LLONG_MAX);
}

void on_subfield_change(unsigned long long int *) { }

42 changes: 24 additions & 18 deletions src/http/json/json_adapter.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,6 @@
#include "containers/uuid.hpp"
#include "http/json.hpp"

#if defined(__i386__)
#define RT_JSON_ADAPTER_PLAIN_INTS
#endif

/* A note about json adapter exceptions: When an operation throws an exception
* there is no guarantee that the target object has been left in tact.
* Generally this is okay because we first apply changes and then join them in
Expand Down Expand Up @@ -430,25 +426,35 @@ cJSON *render_as_json(int *);
void apply_json_to(cJSON *, int *);
void on_subfield_change(int *);

#if defined(RT_JSON_ADAPTER_PLAIN_INTS)
// ctx-less JSON adapter for long int
json_adapter_if_t::json_adapter_map_t get_json_subfields(long int *);
cJSON *render_as_json(long int *);
void apply_json_to(cJSON *, long int *);
void on_subfield_change(long int *);
#endif // 1

// ctx-less JSON adapter for uint64_t
json_adapter_if_t::json_adapter_map_t get_json_subfields(uint64_t *);
cJSON *render_as_json(uint64_t *);
void apply_json_to(cJSON *, uint64_t *);
void on_subfield_change(uint64_t *);

// ctx-less JSON adapter for int64_t
json_adapter_if_t::json_adapter_map_t get_json_subfields(int64_t *);
cJSON *render_as_json(int64_t *);
void apply_json_to(cJSON *, int64_t *);
void on_subfield_change(int64_t *);

// ctx-less JSON adapter for long int
json_adapter_if_t::json_adapter_map_t get_json_subfields(long long int *);
cJSON *render_as_json(long long int *);
void apply_json_to(cJSON *, long long int *);
void on_subfield_change(long long int *);

// ctx-less JSON adapter for unsigned int
json_adapter_if_t::json_adapter_map_t get_json_subfields(unsigned int *);
cJSON *render_as_json(unsigned int *);
void apply_json_to(cJSON *, unsigned int *);
void on_subfield_change(unsigned int *);

// ctx-less JSON adapter for unsigned long int
json_adapter_if_t::json_adapter_map_t get_json_subfields(unsigned long int *);
cJSON *render_as_json(unsigned long int *);
void apply_json_to(cJSON *, unsigned long int *);
void on_subfield_change(unsigned long int *);

// ctx-less JSON adapter for unsigned long long int
json_adapter_if_t::json_adapter_map_t get_json_subfields(unsigned long long int *);
cJSON *render_as_json(unsigned long long int *);
void apply_json_to(cJSON *, unsigned long long int *);
void on_subfield_change(unsigned long long int *);

// ctx-less JSON adapter for bool
json_adapter_if_t::json_adapter_map_t get_json_subfields(bool *);
Expand Down

0 comments on commit 08a7ff5

Please sign in to comment.