#ifndef KIWI_CKIWI_H_ #define KIWI_CKIWI_H_ #ifdef __cplusplus extern "C" { #else #include #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 }; typedef struct KiwiVarRefType* KiwiVarRef; typedef struct KiwiConstraintRefType* KiwiConstraintRef; typedef struct KiwiTerm { KiwiVarRef var; double coefficient; } KiwiTerm; typedef struct KiwiExpression { double constant; int term_count; KiwiTerm terms[1]; // LuaJIT: struct KiwiTerm terms_[?]; } KiwiExpression; typedef struct KiwiErr { enum KiwiErrKind kind; const char* message; bool must_free; } KiwiErr; typedef struct KiwiSolver KiwiSolver; KiwiVarRef kiwi_var_new(const char* name); void kiwi_var_del(KiwiVarRef var); KiwiVarRef kiwi_var_clone(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); void kiwi_expression_del_vars(KiwiExpression* expr); KiwiConstraintRef kiwi_constraint_new( const KiwiExpression* lhs, const KiwiExpression* rhs, enum KiwiRelOp op, double strength ); void kiwi_constraint_del(KiwiConstraintRef constraint); KiwiConstraintRef kiwi_constraint_clone(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, KiwiExpression* out, int out_size); KiwiSolver* kiwi_solver_new(); void kiwi_solver_del(KiwiSolver* sp); const KiwiErr* kiwi_solver_add_constraint(KiwiSolver* sp, KiwiConstraintRef constraint); const KiwiErr* kiwi_solver_remove_constraint(KiwiSolver* sp, KiwiConstraintRef constraint); bool kiwi_solver_has_constraint(const KiwiSolver* sp, KiwiConstraintRef constraint); const KiwiErr* kiwi_solver_add_edit_var(KiwiSolver* sp, KiwiVarRef var, double strength); const KiwiErr* kiwi_solver_remove_edit_var(KiwiSolver* sp, KiwiVarRef var); bool kiwi_solver_has_edit_var(const KiwiSolver* sp, KiwiVarRef var); const KiwiErr* kiwi_solver_suggest_value(KiwiSolver* sp, KiwiVarRef var, double value); void kiwi_solver_update_vars(KiwiSolver* sp); void kiwi_solver_reset(KiwiSolver* sp); void kiwi_solver_dump(const KiwiSolver* sp); char* kiwi_solver_dumps(const KiwiSolver* sp); // LuaJIT end #ifdef __cplusplus } #endif // Local Variables: // mode: c++ // End: #endif // KIWI_CKIWI_H_