Skip to content

Commit

Permalink
Rename Encoding to Plan (#746)
Browse files Browse the repository at this point in the history
Signed-off-by: Juan Cruz Viotti <[email protected]>
  • Loading branch information
jviotti authored Feb 12, 2024
1 parent 7b71d00 commit 3e951d3
Show file tree
Hide file tree
Showing 53 changed files with 131 additions and 141 deletions.
4 changes: 2 additions & 2 deletions src/cli/command_decode.cc
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,10 @@ static auto decode_from_stream(sourcemeta::jsontoolkit::JSON &schema,
schema, sourcemeta::jsontoolkit::default_schema_walker,
sourcemeta::jsontoolkit::official_resolver,
sourcemeta::jsonbinpack::DEFAULT_METASCHEMA);
const sourcemeta::jsonbinpack::Encoding encoding{
const sourcemeta::jsonbinpack::Plan plan{
sourcemeta::jsonbinpack::parse(schema)};
sourcemeta::jsonbinpack::Decoder decoder{stream};
const sourcemeta::jsontoolkit::JSON result = decoder.decode(encoding);
const sourcemeta::jsontoolkit::JSON result = decoder.decode(plan);
sourcemeta::jsontoolkit::stringify(result, std::cout);
return EXIT_SUCCESS;
}
Expand Down
4 changes: 2 additions & 2 deletions src/cli/command_encode.cc
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,10 @@ static auto encode_from_json(sourcemeta::jsontoolkit::JSON &schema,
schema, sourcemeta::jsontoolkit::default_schema_walker,
sourcemeta::jsontoolkit::official_resolver,
sourcemeta::jsonbinpack::DEFAULT_METASCHEMA);
const sourcemeta::jsonbinpack::Encoding encoding{
const sourcemeta::jsonbinpack::Plan plan{
sourcemeta::jsonbinpack::parse(schema)};
sourcemeta::jsonbinpack::Encoder encoder{std::cout};
encoder.encode(instance, encoding);
encoder.encode(instance, plan);
return EXIT_SUCCESS;
}

Expand Down
2 changes: 1 addition & 1 deletion src/runtime/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ noa_library(NAMESPACE sourcemeta PROJECT jsonbinpack NAME runtime
PRIVATE_HEADERS
decoder.h decoder_basic.h
encoder.h encoder_basic.h encoder_context.h encoder_real.h
encoding.h encoding_wrap.h parser.h
plan.h plan_wrap.h parser.h
zigzag.h varint.h numeric.h
SOURCES runtime_parser.cc runtime_parser_v1.h)

Expand Down
2 changes: 1 addition & 1 deletion src/runtime/include/sourcemeta/jsonbinpack/runtime.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

#include <sourcemeta/jsonbinpack/runtime_decoder.h>
#include <sourcemeta/jsonbinpack/runtime_encoder.h>
#include <sourcemeta/jsonbinpack/runtime_encoding.h>
#include <sourcemeta/jsonbinpack/runtime_parser.h>
#include <sourcemeta/jsonbinpack/runtime_plan.h>

#endif
14 changes: 7 additions & 7 deletions src/runtime/include/sourcemeta/jsonbinpack/runtime_decoder.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@
#define SOURCEMETA_JSONBINPACK_RUNTIME_DECODER_H_

/// @defgroup decoder Decoder
/// @brief A set of procedures to deserialize a bit-string given a Encoding
/// @brief A set of procedures to deserialize a bit-string given a Plan
/// Schema

#include <sourcemeta/jsonbinpack/runtime_decoder_basic.h>
#include <sourcemeta/jsonbinpack/runtime_encoding.h>
#include <sourcemeta/jsonbinpack/runtime_encoding_wrap.h>
#include <sourcemeta/jsonbinpack/runtime_numeric.h>
#include <sourcemeta/jsonbinpack/runtime_plan.h>
#include <sourcemeta/jsonbinpack/runtime_plan_wrap.h>

#include <sourcemeta/jsontoolkit/json.h>

Expand All @@ -29,7 +29,7 @@ class Decoder : private BasicDecoder<CharT, Traits> {
Decoder(std::basic_istream<CharT, Traits> &input)
: BasicDecoder<CharT, Traits>{input} {}

auto decode(const Encoding &encoding) -> sourcemeta::jsontoolkit::JSON {
auto decode(const Plan &encoding) -> sourcemeta::jsontoolkit::JSON {
switch (encoding.index()) {
#define HANDLE_DECODING(index, name) \
case (index): \
Expand Down Expand Up @@ -343,9 +343,9 @@ class Decoder : private BasicDecoder<CharT, Traits> {
sourcemeta::jsontoolkit::JSON result =
sourcemeta::jsontoolkit::JSON::make_array();
for (std::size_t index = 0; index < options.size; index++) {
const Encoding &encoding{prefix_encodings > index
? options.prefix_encodings[index].value
: options.encoding->value};
const Plan &encoding{prefix_encodings > index
? options.prefix_encodings[index].value
: options.encoding->value};
result.push_back(this->decode(encoding));
}

Expand Down
21 changes: 10 additions & 11 deletions src/runtime/include/sourcemeta/jsonbinpack/runtime_encoder.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@
#define SOURCEMETA_JSONBINPACK_RUNTIME_ENCODER_H_

/// @defgroup encoder Encoder
/// @brief A set of procedures to serialize a JSON document given a Encoding
/// @brief A set of procedures to serialize a JSON document given a Plan
/// Schema

#include <sourcemeta/jsonbinpack/runtime_encoder_basic.h>
#include <sourcemeta/jsonbinpack/runtime_encoder_real.h>
#include <sourcemeta/jsonbinpack/runtime_encoding.h>
#include <sourcemeta/jsonbinpack/runtime_encoding_wrap.h>
#include <sourcemeta/jsonbinpack/runtime_numeric.h>
#include <sourcemeta/jsonbinpack/runtime_plan.h>
#include <sourcemeta/jsonbinpack/runtime_plan_wrap.h>

#include <sourcemeta/jsontoolkit/json.h>

Expand All @@ -30,7 +30,7 @@ class Encoder : private BasicEncoder<CharT, Traits> {
: BasicEncoder<CharT, Traits>{output} {}

auto encode(const sourcemeta::jsontoolkit::JSON &document,
const Encoding &encoding) -> void {
const Plan &encoding) -> void {
switch (encoding.index()) {
#define HANDLE_ENCODING(index, name) \
case (index): \
Expand Down Expand Up @@ -378,9 +378,9 @@ class Encoder : private BasicEncoder<CharT, Traits> {
const auto prefix_encodings{options.prefix_encodings.size()};
assert(prefix_encodings <= document.size());
for (std::size_t index = 0; index < options.size; index++) {
const Encoding &encoding{prefix_encodings > index
? options.prefix_encodings[index].value
: options.encoding->value};
const Plan &encoding{prefix_encodings > index
? options.prefix_encodings[index].value
: options.encoding->value};
this->encode(document.at(index), encoding);
}
}
Expand Down Expand Up @@ -547,8 +547,7 @@ class Encoder : private BasicEncoder<CharT, Traits> {
static_cast<std::uint8_t>(TYPE_ARRAY | ((size + 1) << type_size)));
}

Encoding encoding{
sourcemeta::jsonbinpack::ANY_PACKED_TYPE_TAG_BYTE_PREFIX{}};
Plan encoding{sourcemeta::jsonbinpack::ANY_PACKED_TYPE_TAG_BYTE_PREFIX{}};
this->FIXED_TYPED_ARRAY(document, {size, wrap(std::move(encoding)), {}});
} else if (document.is_object()) {
const auto size{document.size()};
Expand All @@ -560,9 +559,9 @@ class Encoder : private BasicEncoder<CharT, Traits> {
static_cast<std::uint8_t>(TYPE_OBJECT | ((size + 1) << type_size)));
}

Encoding key_encoding{
Plan key_encoding{
sourcemeta::jsonbinpack::PREFIX_VARINT_LENGTH_STRING_SHARED{}};
Encoding value_encoding{
Plan value_encoding{
sourcemeta::jsonbinpack::ANY_PACKED_TYPE_TAG_BYTE_PREFIX{}};
this->FIXED_TYPED_ARBITRARY_OBJECT(document,
{size, wrap(std::move(key_encoding)),
Expand Down
4 changes: 2 additions & 2 deletions src/runtime/include/sourcemeta/jsonbinpack/runtime_parser.h
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
#ifndef SOURCEMETA_JSONBINPACK_RUNTIME_PARSER_H_
#define SOURCEMETA_JSONBINPACK_RUNTIME_PARSER_H_

#include <sourcemeta/jsonbinpack/runtime_encoding.h>
#include <sourcemeta/jsonbinpack/runtime_plan.h>
#include <sourcemeta/jsontoolkit/json.h>

namespace sourcemeta::jsonbinpack {

// TODO: Give this a better name
auto parse(const sourcemeta::jsontoolkit::JSON &input) -> Encoding;
auto parse(const sourcemeta::jsontoolkit::JSON &input) -> Plan;

} // namespace sourcemeta::jsonbinpack

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#ifndef SOURCEMETA_JSONBINPACK_RUNTIME_ENCODING_H_
#define SOURCEMETA_JSONBINPACK_RUNTIME_ENCODING_H_

/// @defgroup encoding Encodings
/// @defgroup encoding Plans
///
/// @see sourcemeta::jsonbinpack::Encoder
/// @see sourcemeta::jsonbinpack::Decoder
Expand All @@ -16,13 +16,13 @@

namespace sourcemeta::jsonbinpack {

// We cannot directly create an Encoding variant type whose values potentially
// include other Encoding instances. As a workaround, we have a helper
// We cannot directly create an Plan variant type whose values potentially
// include other Plan instances. As a workaround, we have a helper
// encoding wrapper that we can use as an incomplete type
struct __internal_encoding_wrapper;
// Use these alias types. Never use the internal wrapper type directly
using SingleEncoding = std::shared_ptr<__internal_encoding_wrapper>;
using MultipleEncodings = std::vector<__internal_encoding_wrapper>;
using SinglePlan = std::shared_ptr<__internal_encoding_wrapper>;
using MultiplePlans = std::vector<__internal_encoding_wrapper>;

/// @ingroup encoding
/// @defgroup encoding_integer Integer
Expand Down Expand Up @@ -707,9 +707,9 @@ struct FIXED_TYPED_ARRAY {
/// The array length
const std::uint64_t size;
/// Element encoding
const SingleEncoding encoding;
const SinglePlan encoding;
/// Positional encodings
const MultipleEncodings prefix_encodings;
const MultiplePlans prefix_encodings;
};

// clang-format off
Expand Down Expand Up @@ -758,9 +758,9 @@ struct BOUNDED_8BITS_TYPED_ARRAY {
/// The maximum length of the array
const std::uint64_t maximum;
/// Element encoding
const SingleEncoding encoding;
const SinglePlan encoding;
/// Positional encodings
const MultipleEncodings prefix_encodings;
const MultiplePlans prefix_encodings;
};

// clang-format off
Expand Down Expand Up @@ -804,9 +804,9 @@ struct FLOOR_TYPED_ARRAY {
/// The minimum length of the array
const std::uint64_t minimum;
/// Element encoding
const SingleEncoding encoding;
const SinglePlan encoding;
/// Positional encodings
const MultipleEncodings prefix_encodings;
const MultiplePlans prefix_encodings;
};

// clang-format off
Expand Down Expand Up @@ -849,9 +849,9 @@ struct ROOF_TYPED_ARRAY {
/// The maximum length of the array
const std::uint64_t maximum;
/// Element encoding
const SingleEncoding encoding;
const SinglePlan encoding;
/// Positional encodings
const MultipleEncodings prefix_encodings;
const MultiplePlans prefix_encodings;
};

/// @}
Expand Down Expand Up @@ -906,9 +906,9 @@ struct FIXED_TYPED_ARBITRARY_OBJECT {
/// The object size
const std::uint64_t size;
/// Key encoding
const SingleEncoding key_encoding;
const SinglePlan key_encoding;
/// Value encoding
const SingleEncoding encoding;
const SinglePlan encoding;
};

// clang-format off
Expand Down Expand Up @@ -950,9 +950,9 @@ struct FIXED_TYPED_ARBITRARY_OBJECT {
// clang-format on
struct VARINT_TYPED_ARBITRARY_OBJECT {
/// Key encoding
const SingleEncoding key_encoding;
const SinglePlan key_encoding;
/// Value encoding
const SingleEncoding encoding;
const SinglePlan encoding;
};

/// @}
Expand Down Expand Up @@ -1017,10 +1017,9 @@ static_assert(SUBTYPE_LONG_STRING_BASE_EXPONENT_10 == 10);
/// @}
// clang-format on

// Encoding type
// Plan type

// TODO: Find a better name that is not confusing with encoder/decoder
using Encoding = std::variant<
using Plan = std::variant<
BOUNDED_MULTIPLE_8BITS_ENUM_FIXED, FLOOR_MULTIPLE_ENUM_VARINT,
ROOF_MULTIPLE_MIRROR_ENUM_VARINT, ARBITRARY_MULTIPLE_ZIGZAG_VARINT,
DOUBLE_VARINT_TUPLE, BYTE_CHOICE_INDEX, LARGE_CHOICE_INDEX,
Expand All @@ -1033,11 +1032,11 @@ using Encoding = std::variant<
FIXED_TYPED_ARBITRARY_OBJECT, VARINT_TYPED_ARBITRARY_OBJECT,
ANY_PACKED_TYPE_TAG_BYTE_PREFIX>;

// Helper definitions that rely on the Encoding data type
// Helper definitions that rely on the Plan data type
#ifndef DOXYGEN
// Ignore this definition on the documentation
struct __internal_encoding_wrapper {
const Encoding value;
const Plan value;
};
#endif

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#ifndef SOURCEMETA_JSONBINPACK_RUNTIME_ENCODING_WRAP_H_
#define SOURCEMETA_JSONBINPACK_RUNTIME_ENCODING_WRAP_H_

#include <sourcemeta/jsonbinpack/runtime_encoding.h>
#include <sourcemeta/jsonbinpack/runtime_plan.h>

#include <algorithm> // std::transform
#include <initializer_list> // std::initializer_list
Expand All @@ -27,7 +27,7 @@ namespace sourcemeta::jsonbinpack {
// as we want to avoid including their definitions in if the user
// doesn't import this header.

inline auto wrap(Encoding &&encoding) -> SingleEncoding {
inline auto wrap(Plan &&encoding) -> SinglePlan {
return std::make_shared<aggregate_adapter<__internal_encoding_wrapper>>(
std::move(encoding));
}
Expand All @@ -36,16 +36,15 @@ inline auto wrap(Encoding &&encoding) -> SingleEncoding {
template <typename Iterator>
requires std::forward_iterator<Iterator>
// clang-format on
inline auto wrap(Iterator begin, Iterator end) -> MultipleEncodings {
MultipleEncodings result;
std::transform(begin, end, std::back_inserter(result), [](Encoding encoding) {
inline auto wrap(Iterator begin, Iterator end) -> MultiplePlans {
MultiplePlans result;
std::transform(begin, end, std::back_inserter(result), [](Plan encoding) {
return __internal_encoding_wrapper{std::move(encoding)};
});
return result;
}

inline auto wrap(std::initializer_list<Encoding> encodings)
-> MultipleEncodings {
inline auto wrap(std::initializer_list<Plan> encodings) -> MultiplePlans {
return wrap(encodings.begin(), encodings.end());
}

Expand Down
2 changes: 1 addition & 1 deletion src/runtime/runtime_parser.cc
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

namespace sourcemeta::jsonbinpack {

auto parse(const sourcemeta::jsontoolkit::JSON &input) -> Encoding {
auto parse(const sourcemeta::jsontoolkit::JSON &input) -> Plan {
assert(input.defines("name"));
assert(input.defines("options"));
const auto encoding{input.at("name").to_string()};
Expand Down
Loading

0 comments on commit 3e951d3

Please sign in to comment.