Initial actual commit, awaiting CI
This commit is contained in:
118
ckiwi/ckiwi.h
Normal file
118
ckiwi/ckiwi.h
Normal 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_
|
||||
Reference in New Issue
Block a user