First off, thank you for considering contributing to russcip.
If you've noticed a bug or have a feature request, make sure to open a GitHub issue if one does not already exist.
Steps:
- Add a method to the
ScipPtr
struct, this should in most cases return aResult<YOU_RETURN_TYPE, Retcode>
from calling thescip_call!
macro. Use the unsafe bindings from theffi
module to call SCIP methods. - The Model struct has many states, choose the state that is safe to call your
ScipPtr
method in.
- SCIP plugins are essentially interfaces. So first step would be to check the plugin's (fundamental) callbacks from SCIP's documentation and write an interface that represents it. Here's the one for the constraint handler plugin for example.
- SCIP saves PLUGIN_DATA for each plugin type. This is what russcip uses to wrap the struct that implements the interface. You'd need to add an
include_{PLUGIN_NAME}
method onModel<ProblemCreated>
that takes a box of this interface and defines the C callbacks. As a reference you can take a look at the pricer plugin implementation and it's include method.
- Add documentation for any new methods/struct.
- Cover any new functionality or test any issue fix.