#ifndef CKIWI_H_ #define CKIWI_H_ #include #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_