Skip to content

Commit

Permalink
0.20.0
Browse files Browse the repository at this point in the history
  • Loading branch information
dan-obx committed Dec 11, 2023
1 parent 392cf0f commit 7e4a5a3
Show file tree
Hide file tree
Showing 38 changed files with 450 additions and 172 deletions.
12 changes: 12 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,18 @@
ObjectBox C and C++ API Changelog
=================================

0.20.0 (2023-12-11)
-------------------
* Added OBXFeature_Backup to query for the feature's availability
* Internal: added a DB store abstraction layer (another announcement about this will follow)
* Tree API: fix for meta IDs vs. IDs
* Various internal improvements

Sync:

* Sync clients may now supply multiple URLs; for each connection attempt a random one is chosen.
This allows for client-side load balancing and failover with an ObjectBox Sync cluster.

0.19.0 (2023-09-04)
-------------------
* New K/V validation option on opening the store
Expand Down
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ else ()

function(defineObjectBoxLib VARIANT)
# Configuration updated for each release
set(DL_VERSION 0.19.0)
set(DL_VERSION 0.20.0)

# Platform detection and other setup
set(DL_URL https://github.com/objectbox/objectbox-c/releases/download)
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ box.put({.text = "Buy milk"});
See [ObjectBox C and C++ docs](https://cpp.objectbox.io/) for API details.
**Latest version: 0.19.0** (2023-09-04).
**Latest version: 0.20.0** (2023-12-11).
See [changelog](CHANGELOG.md) for more details.
## Table of Contents:
Expand Down
2 changes: 1 addition & 1 deletion download.sh
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ tty -s || quiet=true

# Note: optional arguments like "--quiet" shifts argument positions in the case block above

version=${1:-0.19.0}
version=${1:-0.20.0}
os=${2:-$(uname)}
arch=${3:-$(uname -m)}
echo "Base config: OS ${os} and architecture ${arch}"
Expand Down
12 changes: 12 additions & 0 deletions doxygen/Changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,18 @@
ObjectBox C and C++ API Changelog
=================================

0.20.0 (2023-12-11)
-------------------
* Added OBXFeature_Backup to query for the feature's availability
* Internal: added a DB store abstraction layer (another announcement about this will follow)
* Tree API: fix for meta IDs vs. IDs
* Various internal improvements

Sync:

* Sync clients may now supply multiple URLs; for each connection attempt a random one is chosen.
This allows for client-side load balancing and failover with an ObjectBox Sync cluster.

0.19.0 (2023-09-04)
-------------------
* New K/V validation option on opening the store
Expand Down
2 changes: 1 addition & 1 deletion doxygen/Doxyfile
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ PROJECT_NAME = "ObjectBox C and C++ API"
# could be handy for archiving the generated documentation or if some version
# control system is used.

PROJECT_NUMBER = "0.19.0"
PROJECT_NUMBER = "0.20.0"

# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a
Expand Down
2 changes: 0 additions & 2 deletions examples/cpp-gen-sync/objectbox-model.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,7 @@ static inline OBX_model* create_obx_model() {
obx_model_property_flags(model, OBXPropertyFlags_ID);
obx_model_property(model, "text", OBXPropertyType_String, 2, 8804670454579230281);
obx_model_property(model, "date_created", OBXPropertyType_Date, 4, 1260602348787983453);
obx_model_property_flags(model, OBXPropertyFlags_UNSIGNED);
obx_model_property(model, "date_finished", OBXPropertyType_Date, 5, 6240065879507520219);
obx_model_property_flags(model, OBXPropertyFlags_UNSIGNED);
obx_model_entity_last_property_id(model, 5, 6240065879507520219);

obx_model_last_entity_id(model, 1, 6645479796472661392);
Expand Down
6 changes: 2 additions & 4 deletions examples/cpp-gen-sync/objectbox-model.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,12 @@
{
"id": "4:1260602348787983453",
"name": "date_created",
"type": 10,
"flags": 8192
"type": 10
},
{
"id": "5:6240065879507520219",
"name": "date_finished",
"type": 10,
"flags": 8192
"type": 10
}
]
}
Expand Down
4 changes: 2 additions & 2 deletions examples/cpp-gen-sync/tasklist.fbs
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ table Task {
text: string;

/// objectbox:date
date_created: ulong;
date_created: long;

/// objectbox:date
date_finished: ulong;
date_finished: long;
}
8 changes: 4 additions & 4 deletions examples/cpp-gen-sync/tasklist.obx.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ void Task::_OBX_MetaInfo::toFlatBuffer(flatbuffers::FlatBufferBuilder& fbb, cons
flatbuffers::uoffset_t fbStart = fbb.StartTable();
fbb.TrackField(4, fbb.PushElement<obx_id>(object.id));
fbb.AddOffset(6, offsettext);
fbb.TrackField(10, fbb.PushElement<uint64_t>(object.date_created));
fbb.TrackField(12, fbb.PushElement<uint64_t>(object.date_finished));
fbb.TrackField(10, fbb.PushElement<int64_t>(object.date_created));
fbb.TrackField(12, fbb.PushElement<int64_t>(object.date_finished));
flatbuffers::Offset<flatbuffers::Table> offset;
offset.o = fbb.EndTable(fbStart);
fbb.Finish(offset);
Expand All @@ -40,8 +40,8 @@ void Task::_OBX_MetaInfo::fromFlatBuffer(const void* data, size_t, Task& outObje
auto* ptr = table->GetPointer<const flatbuffers::String*>(6);
if (ptr) outObject.text.assign(ptr->c_str());
}
outObject.date_created = table->GetField<uint64_t>(10, 0);
outObject.date_finished = table->GetField<uint64_t>(12, 0);
outObject.date_created = table->GetField<int64_t>(10, 0);
outObject.date_finished = table->GetField<int64_t>(12, 0);

}

4 changes: 2 additions & 2 deletions examples/cpp-gen-sync/tasklist.obx.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ struct Task_;
struct Task {
obx_id id;
std::string text;
uint64_t date_created;
uint64_t date_finished;
int64_t date_created;
int64_t date_finished;

struct _OBX_MetaInfo {
static constexpr obx_schema_id entityId() { return 1; }
Expand Down
12 changes: 6 additions & 6 deletions external/flatcc-src/builder.c
Original file line number Diff line number Diff line change
Expand Up @@ -723,11 +723,11 @@ static int align_to_block(flatcc_builder_t *B, uint16_t *align, uint16_t block_a

flatcc_builder_ref_t flatcc_builder_embed_buffer(flatcc_builder_t *B,
uint16_t block_align,
const void *data, size_t size, uint16_t align, int flags)
const void *data, size_t size, uint16_t align, flatcc_builder_buffer_flags_t flags)
{
uoffset_t size_field, pad;
iov_state_t iov;
int with_size = flags & flatcc_builder_with_size;
int with_size = (flags & flatcc_builder_with_size) != 0;

if (align_to_block(B, &align, block_align, !is_top_buffer(B))) {
return 0;
Expand All @@ -744,7 +744,7 @@ flatcc_builder_ref_t flatcc_builder_embed_buffer(flatcc_builder_t *B,

flatcc_builder_ref_t flatcc_builder_create_buffer(flatcc_builder_t *B,
const char identifier[identifier_size], uint16_t block_align,
flatcc_builder_ref_t object_ref, uint16_t align, int flags)
flatcc_builder_ref_t object_ref, uint16_t align, flatcc_builder_buffer_flags_t flags)
{
flatcc_builder_ref_t buffer_ref;
uoffset_t header_pad, id_size = 0;
Expand Down Expand Up @@ -808,7 +808,7 @@ flatcc_builder_ref_t flatcc_builder_create_struct(flatcc_builder_t *B, const voi
}

int flatcc_builder_start_buffer(flatcc_builder_t *B,
const char identifier[identifier_size], uint16_t block_align, int flags)
const char identifier[identifier_size], uint16_t block_align, flatcc_builder_buffer_flags_t flags)
{
/*
* This saves the parent `min_align` in the align field since we
Expand Down Expand Up @@ -845,9 +845,9 @@ int flatcc_builder_start_buffer(flatcc_builder_t *B,
flatcc_builder_ref_t flatcc_builder_end_buffer(flatcc_builder_t *B, flatcc_builder_ref_t root)
{
flatcc_builder_ref_t buffer_ref;
int flags;
flatcc_builder_buffer_flags_t flags;

flags = B->buffer_flags & flatcc_builder_with_size;
flags = (flatcc_builder_buffer_flags_t)B->buffer_flags & flatcc_builder_with_size;
flags |= is_top_buffer(B) ? 0 : flatcc_builder_is_nested;
check(frame(type) == flatcc_builder_buffer, "expected buffer frame");
set_min_align(B, B->block_align);
Expand Down
17 changes: 10 additions & 7 deletions external/flatcc/flatcc_builder.h
Original file line number Diff line number Diff line change
Expand Up @@ -710,10 +710,13 @@ static inline void flatcc_builder_refmap_reset(flatcc_builder_t *B)
}


enum flatcc_builder_buffer_flags {
flatcc_builder_is_nested = 1,
flatcc_builder_with_size = 2,
};
typedef uint16_t flatcc_builder_buffer_flags_t;
static const flatcc_builder_buffer_flags_t flatcc_builder_is_nested = 1;
static const flatcc_builder_buffer_flags_t flatcc_builder_with_size = 2;

/* The flag size in the API needs to match the internal size. */
static_assert(sizeof(flatcc_builder_buffer_flags_t) ==
sizeof(((flatcc_builder_t *)0)->buffer_flags), "flag size mismatch");

/**
* An alternative to start buffer, start struct/table ... end buffer.
Expand Down Expand Up @@ -776,7 +779,7 @@ enum flatcc_builder_buffer_flags {
flatcc_builder_ref_t flatcc_builder_create_buffer(flatcc_builder_t *B,
const char identifier[FLATBUFFERS_IDENTIFIER_SIZE],
uint16_t block_align,
flatcc_builder_ref_t ref, uint16_t align, int flags);
flatcc_builder_ref_t ref, uint16_t align, flatcc_builder_buffer_flags_t flags);

/**
* Creates a struct within the current buffer without using any
Expand Down Expand Up @@ -867,7 +870,7 @@ flatcc_builder_ref_t flatcc_builder_end_struct(flatcc_builder_t *B);
*/
int flatcc_builder_start_buffer(flatcc_builder_t *B,
const char identifier[FLATBUFFERS_IDENTIFIER_SIZE],
uint16_t block_align, int flags);
uint16_t block_align, flatcc_builder_buffer_flags_t flags);

/**
* The root object should be a struct or a table to conform to the
Expand Down Expand Up @@ -923,7 +926,7 @@ flatcc_builder_ref_t flatcc_builder_end_buffer(flatcc_builder_t *B, flatcc_build
*/
flatcc_builder_ref_t flatcc_builder_embed_buffer(flatcc_builder_t *B,
uint16_t block_align,
const void *data, size_t size, uint16_t align, int flags);
const void *data, size_t size, uint16_t align, flatcc_builder_buffer_flags_t flags);

/**
* Applies to the innermost open buffer. The identifier may be null or
Expand Down
3 changes: 3 additions & 0 deletions external/flatcc/flatcc_flatbuffers.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ extern "C" {
/* Needed by C99 compilers without FLATCC_PORTABLE. */
#include "flatcc/portable/pstdalign.h"

/* Handle fallthrough attribute in switch statements. */
#include "flatcc/portable/pattributes.h"

#include "flatcc/flatcc_alloc.h"
#include "flatcc/flatcc_assert.h"

Expand Down
71 changes: 42 additions & 29 deletions external/flatcc/flatcc_json_parser.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,12 @@ extern "C" {
#define PDIAGNOSTIC_IGNORE_UNUSED
#include "flatcc/portable/pdiagnostic_push.h"

enum flatcc_json_parser_flags {
flatcc_json_parser_f_skip_unknown = 1,
flatcc_json_parser_f_force_add = 2,
flatcc_json_parser_f_with_size = 4,
flatcc_json_parser_f_skip_array_overflow = 8,
flatcc_json_parser_f_reject_array_underflow = 16
};
typedef uint32_t flatcc_json_parser_flags_t;
static const flatcc_json_parser_flags_t flatcc_json_parser_f_skip_unknown = 1;
static const flatcc_json_parser_flags_t flatcc_json_parser_f_force_add = 2;
static const flatcc_json_parser_flags_t flatcc_json_parser_f_with_size = 4;
static const flatcc_json_parser_flags_t flatcc_json_parser_f_skip_array_overflow = 8;
static const flatcc_json_parser_flags_t flatcc_json_parser_f_reject_array_underflow = 16;

#define FLATCC_JSON_PARSE_ERROR_MAP(XX) \
XX(ok, "ok") \
Expand Down Expand Up @@ -92,7 +91,7 @@ typedef struct flatcc_json_parser_ctx flatcc_json_parser_t;
struct flatcc_json_parser_ctx {
flatcc_builder_t *ctx;
const char *line_start;
int flags;
flatcc_json_parser_flags_t flags;
#if FLATCC_JSON_PARSE_ALLOW_UNQUOTED
int unquoted;
#endif
Expand All @@ -111,7 +110,7 @@ static inline int flatcc_json_parser_get_error(flatcc_json_parser_t *ctx)
return ctx->error;
}

static inline void flatcc_json_parser_init(flatcc_json_parser_t *ctx, flatcc_builder_t *B, const char *buf, const char *end, int flags)
static inline void flatcc_json_parser_init(flatcc_json_parser_t *ctx, flatcc_builder_t *B, const char *buf, const char *end, flatcc_json_parser_flags_t flags)
{
memset(ctx, 0, sizeof(*ctx));
ctx->ctx = B;
Expand Down Expand Up @@ -243,24 +242,38 @@ static inline uint64_t flatcc_json_parser_symbol_part_ext(const char *buf, const
}
/* This can bloat inlining for a rarely executed case. */
#if 1
/* Fall through comments needed to silence gcc 7 warnings. */
switch (n) {
case 8: w |= ((uint64_t)buf[7]) << (0 * 8);
/* Fall through */
case 7: w |= ((uint64_t)buf[6]) << (1 * 8);
/* Fall through */
case 6: w |= ((uint64_t)buf[5]) << (2 * 8);
/* Fall through */
case 5: w |= ((uint64_t)buf[4]) << (3 * 8);
/* Fall through */
case 4: w |= ((uint64_t)buf[3]) << (4 * 8);
/* Fall through */
case 3: w |= ((uint64_t)buf[2]) << (5 * 8);
/* Fall through */
case 2: w |= ((uint64_t)buf[1]) << (6 * 8);
/* Fall through */
case 1: w |= ((uint64_t)buf[0]) << (7 * 8);
/* Fall through */
case 8:
w |= ((uint64_t)buf[7]) << (0 * 8);
goto lbl_n_7;
case 7:
lbl_n_7:
w |= ((uint64_t)buf[6]) << (1 * 8);
goto lbl_n_6;
case 6:
lbl_n_6:
w |= ((uint64_t)buf[5]) << (2 * 8);
goto lbl_n_5;
case 5:
lbl_n_5:
w |= ((uint64_t)buf[4]) << (3 * 8);
goto lbl_n_4;
case 4:
lbl_n_4:
w |= ((uint64_t)buf[3]) << (4 * 8);
goto lbl_n_3;
case 3:
lbl_n_3:
w |= ((uint64_t)buf[2]) << (5 * 8);
goto lbl_n_2;
case 2:
lbl_n_2:
w |= ((uint64_t)buf[1]) << (6 * 8);
goto lbl_n_1;
case 1:
lbl_n_1:
w |= ((uint64_t)buf[0]) << (7 * 8);
break;
case 0:
break;
}
Expand Down Expand Up @@ -872,18 +885,18 @@ const char *flatcc_json_parser_union_type_vector(flatcc_json_parser_t *ctx,
* `buf`, `bufsiz` may be larger than the parsed json if trailing
* space or zeroes are expected, but they must represent a valid memory buffer.
* `fid` must be null, or a valid file identifier.
* `flags` default to 0. See also `flatcc_json_parser_flags`.
* `flags` default to 0. See also `flatcc_json_parser_f_` constants.
*/
int flatcc_json_parser_table_as_root(flatcc_builder_t *B, flatcc_json_parser_t *ctx,
const char *buf, size_t bufsiz, int flags, const char *fid,
const char *buf, size_t bufsiz, flatcc_json_parser_flags_t flags, const char *fid,
flatcc_json_parser_table_f *parser);

/*
* Similar to `flatcc_json_parser_table_as_root` but parses a struct as
* root.
*/
int flatcc_json_parser_struct_as_root(flatcc_builder_t *B, flatcc_json_parser_t *ctx,
const char *buf, size_t bufsiz, int flags, const char *fid,
const char *buf, size_t bufsiz, flatcc_json_parser_flags_t flags, const char *fid,
flatcc_json_parser_struct_f *parser);

#include "flatcc/portable/pdiagnostic_pop.h"
Expand Down
17 changes: 8 additions & 9 deletions external/flatcc/flatcc_json_printer.h
Original file line number Diff line number Diff line change
Expand Up @@ -243,14 +243,13 @@ static inline void flatcc_json_printer_set_nonstrict(flatcc_json_printer_t *ctx)
flatcc_json_printer_set_noenum(ctx, 0);
}

enum flatcc_json_printer_flags {
flatcc_json_printer_f_unquote = 1,
flatcc_json_printer_f_noenum = 2,
flatcc_json_printer_f_skip_default = 4,
flatcc_json_printer_f_force_default = 8,
flatcc_json_printer_f_pretty = 16,
flatcc_json_printer_f_nonstrict = 32,
};
typedef uint32_t flatcc_json_printer_flags_t;
static const flatcc_json_printer_flags_t flatcc_json_printer_f_unquote = 1;
static const flatcc_json_printer_flags_t flatcc_json_printer_f_noenum = 2;
static const flatcc_json_printer_flags_t flatcc_json_printer_f_skip_default = 4;
static const flatcc_json_printer_flags_t flatcc_json_printer_f_force_default = 8;
static const flatcc_json_printer_flags_t flatcc_json_printer_f_pretty = 16;
static const flatcc_json_printer_flags_t flatcc_json_printer_f_nonstrict = 32;

/*
* May be called instead of setting operational modes individually.
Expand All @@ -268,7 +267,7 @@ enum flatcc_json_printer_flags {
* `pretty` flag sets indentation to 2.
* `nonstrict` implies: `noenum`, `unquote`, `pretty`.
*/
static inline void flatcc_json_printer_set_flags(flatcc_json_printer_t *ctx, int flags)
static inline void flatcc_json_printer_set_flags(flatcc_json_printer_t *ctx, flatcc_json_printer_flags_t flags)
{
ctx->unquote = !!(flags & flatcc_json_printer_f_unquote);
ctx->noenum = !!(flags & flatcc_json_printer_f_noenum);
Expand Down
Loading

0 comments on commit 7e4a5a3

Please sign in to comment.