Initial actual commit, awaiting CI

This commit is contained in:
2024-02-12 04:21:48 -06:00
parent 70a9213c91
commit 59bdeedc18
8 changed files with 1329 additions and 1 deletions

118
ckiwi/ckiwi.h Normal file
View File

@@ -0,0 +1,118 @@
#ifndef CKIWI_H_
#define CKIWI_H_
#include <stddef.h>
#ifdef __cplusplus
extern "C" {
#endif
#define KIWI_REF_ISNULL(ref) ((ref).impl_ == NULL)
// LuaJIT start
enum KiwiErrKind {
KiwiErrNone,
KiwiErrUnsatisfiableConstraint = 1,
KiwiErrUnknownConstraint,
KiwiErrDuplicateConstraint,
KiwiErrUnknownEditVariable,
KiwiErrDuplicateEditVariable,
KiwiErrBadRequiredStrength,
KiwiErrInternalSolverError,
KiwiErrAlloc,
KiwiErrUnknown,
};
enum KiwiRelOp { KIWI_OP_LE, KIWI_OP_GE, KIWI_OP_EQ };
typedef struct {
void* private_;
} KiwiVarRef;
typedef struct {
KiwiVarRef var;
double coefficient;
} KiwiTerm;
typedef struct {
double constant;
int term_count;
KiwiTerm terms[1];
} KiwiExpression;
typedef struct {
void* private_;
} KiwiConstraintRef;
typedef struct {
enum KiwiErrKind kind;
char message[64];
} KiwiErr;
typedef struct {
void* impl_;
} KiwiSolverRef;
KiwiVarRef kiwi_var_new(const char* name);
void kiwi_var_del(KiwiVarRef var);
const char* kiwi_var_name(KiwiVarRef var);
void kiwi_var_set_name(KiwiVarRef var, const char* name);
double kiwi_var_value(KiwiVarRef var);
void kiwi_var_set_value(KiwiVarRef var, double value);
int kiwi_var_eq(KiwiVarRef var, KiwiVarRef other);
KiwiConstraintRef
kiwi_constraint_new(const KiwiExpression* expression, enum KiwiRelOp op, double strength);
void kiwi_constraint_del(KiwiConstraintRef constraint);
double kiwi_constraint_strength(KiwiConstraintRef constraint);
enum KiwiRelOp kiwi_constraint_op(KiwiConstraintRef constraint);
int kiwi_constraint_violated(KiwiConstraintRef constraint);
int kiwi_constraint_expression(
KiwiConstraintRef constraint,
KiwiExpression* out,
int out_size
);
KiwiErr kiwi_solver_add_constraint(KiwiSolverRef s, KiwiConstraintRef constraint);
KiwiErr kiwi_solver_remove_constraint(KiwiSolverRef s, KiwiConstraintRef constraint);
int kiwi_solver_has_constraint(KiwiSolverRef s, KiwiConstraintRef constraint);
KiwiErr kiwi_solver_add_edit_var(KiwiSolverRef s, KiwiVarRef var, double strength);
KiwiErr kiwi_solver_remove_edit_var(KiwiSolverRef s, KiwiVarRef var);
int kiwi_solver_has_edit_var(KiwiSolverRef s, KiwiVarRef var);
KiwiErr kiwi_solver_suggest_value(KiwiSolverRef s, KiwiVarRef var, double value);
void kiwi_solver_update_vars(KiwiSolverRef s);
void kiwi_solver_reset(KiwiSolverRef s);
void kiwi_solver_dump(KiwiSolverRef s);
char* kiwi_solver_dumps(KiwiSolverRef s, void* (*alloc)(size_t));
KiwiSolverRef kiwi_solver_new();
void kiwi_solver_del(KiwiSolverRef s);
// LuaJIT end
#ifdef __cplusplus
}
#endif
// Local Variables:
// mode: c++
// End:
#endif // CKIWI_H_