#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, KiwiErrNullObject, KiwiErrUnknown, }; enum KiwiRelOp { KIWI_OP_LE, KIWI_OP_GE, KIWI_OP_EQ }; struct KiwiVarRefType; struct KiwiConstraintRefType; typedef struct KiwiVarRefType* KiwiVarRef; typedef struct KiwiConstraintRefType* KiwiConstraintRef; struct KiwiTerm { KiwiVarRef var; double coefficient; }; typedef struct KiwiExpression { double constant; int term_count; struct KiwiTerm terms[1]; // LuaJIT: struct KiwiTerm terms_[?]; }* KiwiExpressionPtr; typedef const struct KiwiExpression* KiwiExpressionConstPtr; typedef struct KiwiErr { enum KiwiErrKind kind; const char* message; bool must_free; } const* KiwiErrPtr; struct KiwiSolver; typedef struct KiwiSolver* KiwiSolverPtr; 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(KiwiExpressionConstPtr 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); bool kiwi_constraint_violated(KiwiConstraintRef constraint); int kiwi_constraint_expression(KiwiConstraintRef constraint, KiwiExpressionPtr out, int out_size); KiwiErrPtr kiwi_solver_add_constraint(KiwiSolverPtr sp, KiwiConstraintRef constraint); KiwiErrPtr kiwi_solver_remove_constraint(KiwiSolverPtr sp, KiwiConstraintRef constraint); bool kiwi_solver_has_constraint(KiwiSolverPtr sp, KiwiConstraintRef constraint); KiwiErrPtr kiwi_solver_add_edit_var(KiwiSolverPtr sp, KiwiVarRef var, double strength); KiwiErrPtr kiwi_solver_remove_edit_var(KiwiSolverPtr sp, KiwiVarRef var); bool kiwi_solver_has_edit_var(KiwiSolverPtr sp, KiwiVarRef var); KiwiErrPtr kiwi_solver_suggest_value(KiwiSolverPtr sp, KiwiVarRef var, double value); void kiwi_solver_update_vars(KiwiSolverPtr sp); void kiwi_solver_reset(KiwiSolverPtr sp); void kiwi_solver_dump(KiwiSolverPtr sp); char* kiwi_solver_dumps(KiwiSolverPtr sp); KiwiSolverPtr kiwi_solver_new(); void kiwi_solver_del(KiwiSolverPtr sp); // LuaJIT end #ifdef __cplusplus } #endif // Local Variables: // mode: c++ // End: #endif // CKIWI_H_