#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include "error.h"
#include "data.h"
#include "depend.h"
#include "gettext.h"
#include "assert.h"
Functions | |
static int * | updater_evaluate (updaterfunc *updater) |
Evaluates an updater function and returns an array of all output values. | |
static int | updater_get_valid_inputs (updaterfunc *updater, int **list) |
Calculates the list of valid input values for an updater. | |
int | updater_fix_domains () |
Fixes resource domains when updater functions are used. | |
static int | updater_dependent (updaterfunc *updater) |
Checks if the source event of the updater function itself depends on another event or not. | |
static void | updater_movetoend (updaterfunc **list, updaterfunc *updater) |
Moves an updaterfunc structure to the end of a linked list. | |
int | updater_reorder () |
Reorders dep_updaterlist linked list. | |
int | updater_check (int dst, int typeid) |
Checks if an updater function has been registered that has dst as a destination event. | |
updaterfunc * | updater_new (int src, int dst, int typeid, updater_f func) |
Register a new updater function. | |
int | updater_call (updaterfunc *updater, int resid) |
Calls an updater function. | |
void | updater_call_all (table *tab) |
Calls all registered updater functions. | |
Variables | |
static updaterfunc * | dep_updaterlist = NULL |
Linked list of all updater functions for dependent events. |
|
Calls an updater function.
|
|
Calls all registered updater functions. Functions are called in the order of the linked list. updater_reorder() must be called before the first call to updater_call_all() to properly reorder the linked list.
|
|
Checks if an updater function has been registered that has dst as a destination event. If no such updater function has been registered, this means that it is safe to register a new updater function with dst as a destination event.
|
|
Checks if the source event of the updater function itself depends on another event or not. Helper function for updater_reorder(). This function walks the dat_updatelist linked list and searches for an updater function that has a destination event equal to the source event of the updater function in the argument.
|
|
Evaluates an updater function and returns an array of all output values. if range[] is the array returned by updater_evaluate() function, then range[x] is the value returned by the updater function for input x.
|
|
Fixes resource domains when updater functions are used. If no updater functions are used this function has no effect. If updater functions are used in a problem description, the source tuples of updater functions must have their resource domains checked if any value in them causes the updater function to set a resource in the destination tuple outside its domain. This function changes the resource domains of tuples so that this can not happen. This function must be called after updater_reorder() and before data_init().
|
|
Calculates the list of valid input values for an updater. Updater function may for some inputs return values that are not in the resource domain of the destination tuple. This function call the updater function for all values in the resource domain of the source tuple and checks them against the domain of the destination tuple. Those inputs that are not forbidden by the destination resource domain are added to the list of valid inputs.
|
|
Moves an updaterfunc structure to the end of a linked list. Helper function for updater_reorder().
|
|
Register a new updater function. It is recommended that updater_check() is called before calling this function to verify if there isn't another updater function registered for this dependent event.
|
|
Reorders dep_updaterlist linked list. A source (independent) event for an updater function can infact be a destination (dependent) event of another updater function. This means that updater functions must be called in the correct order. Example: Function A has a source event 2 and destination event 3. Function B has a source event 1 and destination event 2. In this case updater_reorder() puts function B in front of A.
|