#ifndef HW_INSTANCES_H
#define HW_INSTANCES_H
struct hw_instance;
typedef void (hw_finish_instance_method)
(struct hw *hw,
struct hw_instance *);
extern void set_hw_finish_instance
(struct hw *hw,
hw_finish_instance_method *method);
struct hw_instance *hw_instance_create
(struct hw *hw,
struct hw_instance *parent,
const char *path,
const char *args);
struct hw_instance *hw_instance_interceed
(struct hw_instance *parent,
const char *path,
const char *args);
void hw_instance_delete
(struct hw_instance *instance);
typedef int (hw_instance_read_method)
(struct hw_instance *instance,
void *addr,
unsigned_cell len);
#define hw_instance_read(instance, addr, len) \
((instance)->to_instance_read ((instance), (addr), (len)))
#define set_hw_instance_read(instance, method) \
((instance)->to_instance_read = (method))
typedef int (hw_instance_write_method)
(struct hw_instance *instance,
const void *addr,
unsigned_cell len);
#define hw_instance_write(instance, addr, len) \
((instance)->to_instance_write ((instance), (addr), (len)))
#define set_hw_instance_write(instance, method) \
((instance)->to_instance_write = (method))
typedef int (hw_instance_seek_method)
(struct hw_instance *instance,
unsigned_cell pos_hi,
unsigned_cell pos_lo);
#define hw_instance_seek(instance, pos_hi, pos_lo) \
((instance)->to_instance_seek ((instance), (pos_hi), (pos_lo)));
#define set_hw_instance_seek(instance, method) \
((instance)->to_instance_seek = (method))
int hw_instance_call_method
(struct hw_instance *instance,
const char *method,
int n_stack_args,
unsigned_cell stack_args[],
int n_stack_returns,
unsigned_cell stack_returns[]);
#define hw_instance_hw(instance) ((instance)->hw_of_instance + 0)
#define hw_instance_path(instance) ((instance)->path_of_instance + 0)
#define hw_instance_args(instance) ((instance)->args_of_instance)
#define hw_instance_data(instance) ((instance)->data_of_instance)
#define hw_instance_system(instance) (hw_system (hw_instance_hw (instance)))
struct hw_instance {
void *data_of_instance;
char *args_of_instance;
char *path_of_instance;
struct hw *hw_of_instance;
struct hw_instance *sibling_of_instance;
struct hw_instance *parent_of_instance;
struct hw_instance *child_of_instance;
hw_instance_read_method *to_instance_read;
hw_instance_write_method *to_instance_write;
hw_instance_seek_method *to_instance_seek;
};
#endif