Program Listing for File persistence.h
↰ Return to documentation for file (include_public/anj/persistence.h)
/*
* Copyright 2023-2026 AVSystem <avsystem@avsystem.com>
* AVSystem Anjay Lite LwM2M SDK
* All rights reserved.
*
* Licensed under AVSystem Anjay Lite LwM2M Client SDK - Non-Commercial License.
* See the attached LICENSE file for details.
*/
#include <anj/init.h>
#ifndef ANJ_PERSISTENCE_H
# define ANJ_PERSISTENCE_H
# include <stdbool.h>
# include <stdint.h>
# include <string.h>
# ifdef __cplusplus
extern "C" {
# endif
# ifdef ANJ_WITH_PERSISTENCE
# define ANJ_PERSISTENCE_MAGIC_MAX_SIZE 16
typedef int anj_persistence_read_cb_t(void *ctx, void *buf, size_t size);
typedef int anj_persistence_write_cb_t(void *ctx, const void *buf, size_t size);
typedef enum {
ANJ_PERSISTENCE_STORE = 0,
ANJ_PERSISTENCE_RESTORE
} anj_persistence_direction_t;
typedef struct {
anj_persistence_direction_t direction;
anj_persistence_read_cb_t *read;
anj_persistence_write_cb_t *write;
void *ctx;
} anj_persistence_context_t;
anj_persistence_context_t
anj_persistence_store_context_create(anj_persistence_write_cb_t *write_cb,
void *ctx);
anj_persistence_context_t
anj_persistence_restore_context_create(anj_persistence_read_cb_t *read_cb,
void *ctx);
static inline anj_persistence_direction_t
anj_persistence_direction(const anj_persistence_context_t *ctx) {
return ctx->direction;
}
int anj_persistence_bytes(const anj_persistence_context_t *ctx,
void *inout_buffer,
size_t buffer_size);
int anj_persistence_string(const anj_persistence_context_t *ctx,
char *inout_str,
size_t out_max_size);
int anj_persistence_magic(const anj_persistence_context_t *ctx,
const void *magic,
size_t magic_size);
static inline int anj_persistence_bool(const anj_persistence_context_t *ctx,
bool *inout_value) {
return anj_persistence_bytes(ctx, inout_value, sizeof(*inout_value));
}
static inline int anj_persistence_u8(const anj_persistence_context_t *ctx,
uint8_t *inout_value) {
return anj_persistence_bytes(ctx, inout_value, sizeof(*inout_value));
}
static inline int anj_persistence_u16(const anj_persistence_context_t *ctx,
uint16_t *inout_value) {
return anj_persistence_bytes(ctx, inout_value, sizeof(*inout_value));
}
static inline int anj_persistence_u32(const anj_persistence_context_t *ctx,
uint32_t *inout_value) {
return anj_persistence_bytes(ctx, inout_value, sizeof(*inout_value));
}
static inline int anj_persistence_u64(const anj_persistence_context_t *ctx,
uint64_t *inout_value) {
return anj_persistence_bytes(ctx, inout_value, sizeof(*inout_value));
}
static inline int anj_persistence_i8(const anj_persistence_context_t *ctx,
int8_t *inout_value) {
return anj_persistence_bytes(ctx, inout_value, sizeof(*inout_value));
}
static inline int anj_persistence_i16(const anj_persistence_context_t *ctx,
int16_t *inout_value) {
return anj_persistence_bytes(ctx, inout_value, sizeof(*inout_value));
}
static inline int anj_persistence_i32(const anj_persistence_context_t *ctx,
int32_t *inout_value) {
return anj_persistence_bytes(ctx, inout_value, sizeof(*inout_value));
}
static inline int anj_persistence_i64(const anj_persistence_context_t *ctx,
int64_t *inout_value) {
return anj_persistence_bytes(ctx, inout_value, sizeof(*inout_value));
}
# endif // ANJ_WITH_PERSISTENCE
# ifdef __cplusplus
}
# endif
#endif // ANJ_PERSISTENCE_H