Mir 1.0
Mir application programming interface
Object engine

Modules

 Class engine
 
 Synchronization of object data
 
 Predefined data types
 

Macros

#define MIR_OBJFLAG_ETERNAL   0x0001
 
#define MIR_OBJFLAG_HASMODEL   0x0002
 
#define MIR_OBJFLAG_MODCHAN   0x0004
 
#define MIR_OBJFLAG_NILOBJ   0x0008
 
#define MIR_OBJFLAG_TRUEOBJ   0x0010
 
#define MIR_OBJFLAG_FALSEOBJ   0x0020
 
#define mir_obj_add_method_cfunc(obj, name, func, mdata, mflags, oflags, ret, ret_var, pp, pool, tpool)   (mir_obj_add_method_cfunc_i((obj),(name),(func),0,NULL,(mdata),(mflags),(oflags),(ret),(ret_var),(pp),(pool),(tpool)))
 
#define mir_obj_add_cfunc(obj, name, func, mdata, mflags, oflags, ret, pp, pool, tpool)   (mir_obj_add_cfunc_i((obj),(name),(func),0,NULL,(mdata),(mflags),(oflags),(ret),(pp),(pool),(tpool)))
 

Typedefs

typedef struct mir_object_t mir_object_t
 

Functions

mirkl_error_tmir_obj_create (mirkl_object_t **obj, int type, void *data, mirkl_uint32_t flags, mirkl_object_t *class, mir_prsdata_t *pp, apr_pool_t *pool)
 
mirkl_error_tmir_obj_delete (mirkl_object_t *obj, mir_prsdata_t *pp)
 
int mir_obj_checkdel (mirkl_object_t *obj, int debug_flag, mir_prsdata_t *pp)
 
mirkl_error_tmir_obj_add_data (mirkl_object_t *obj, void *data, int type)
 
void * mir_obj_get_data (mirkl_object_t *obj, int type)
 
mirkl_error_tmir_obj_copy_todata (mirkl_object_t *obj, void *data, mirkl_size_t dlen, int type)
 
void mir_obj_rem_data (mirkl_object_t *obj, int type)
 
int mir_obj_check_adata (unsigned int numobj, mirkl_object_t **obj, unsigned int *flags, int *otype)
 
int mir_obj_check_data (unsigned int numobj, mirkl_object_t **obj, unsigned int *flags,...)
 
void mir_obj_set_flags (mirkl_object_t *obj, mirkl_uint32_t flags)
 
void mir_obj_clear_flags (mirkl_object_t *obj, mirkl_uint32_t flags)
 
int mir_obj_test_clear_flags (mirkl_object_t *obj, mirkl_uint32_t flags)
 
mirkl_uint32_t mir_obj_get_flags (mirkl_object_t *obj)
 
mirkl_error_tmir_obj_set_class (mirkl_object_t *obj, mirkl_object_t *class)
 
mirkl_object_t * mir_obj_get_class (mirkl_object_t *obj)
 
void mir_obj_inc_used (mirkl_object_t *obj)
 
void mir_obj_dec_used (mirkl_object_t *obj)
 
mirkl_int64_t mir_obj_id (mirkl_object_t *obj)
 Returns object id.
 
mirkl_error_tmir_obj_add_variable (mirkl_object_t *obj, const char *var_name, mirkl_object_t *var_init_value, mirkl_object_t **var_out, mir_prsdata_t *pp)
 
void mir_obj_del_variable (mirkl_object_t *obj, const char *var_name)
 
mirkl_object_t * mir_obj_get_variable (mirkl_object_t *obj, const char *var_name)
 
unsigned int mir_obj_count_variables (mirkl_object_t *obj)
 Returns total number of variables in object.
 
mirkl_error_tmir_obj_add_method (mirkl_object_t *obj, const char *var_name, mirkl_object_t *var_init_value, mirkl_object_t **var_out, mir_prsdata_t *pp)
 
mirkl_error_tmir_obj_add_method_cfunc_i (mirkl_object_t *obj, const char *var_name, mirkl_error_t *(*func)(mirkl_object_t *obj, mir_ast_t *ast, mir_ast_t **ret, void *mdata, mir_prsdata_t *pp, apr_pool_t *pool), int line, const char *file, void *mdata, mirkl_uint32_t mflags, mirkl_uint32_t oflags, mirkl_object_t **ret_mobj, mirkl_object_t **ret_var, mir_prsdata_t *pp, apr_pool_t *pool, apr_pool_t *tmp_pool)
 
mirkl_error_tmir_obj_add_cfunc_i (mirkl_object_t *obj, const char *var_name, mirkl_error_t *(*func)(mirkl_object_t *obj, mir_ast_t *ast, mir_ast_t **ret, void *mdata, mir_prsdata_t *pp, apr_pool_t *pool), int line, const char *file, void *mdata, mirkl_uint32_t mflags, mirkl_uint32_t oflags, mirkl_object_t **ret_fobj, mir_prsdata_t *pp, apr_pool_t *pool, apr_pool_t *tmp_pool)
 
mirkl_error_tmir_obj_add_reader (mirkl_object_t *obj, const char *var_name, mirkl_uint32_t mflags, mirkl_uint32_t oflags, mirkl_object_t **ret_mobj, mirkl_object_t **ret_var, mir_prsdata_t *pp, apr_pool_t *pool, apr_pool_t *tmp_pool)
 
mirkl_error_tmir_obj_add_writer (mirkl_object_t *obj, const char *var_name, mirkl_uint32_t mflags, mirkl_uint32_t oflags, mirkl_object_t **ret_mobj, mirkl_object_t **ret_var, mir_prsdata_t *pp, apr_pool_t *pool, apr_pool_t *tmp_pool)
 
mirkl_object_t * mir_obj_get_methodvar (mirkl_object_t *obj, const char *name)
 
void mir_obj_del_method (mirkl_object_t *obj, const char *name)
 
mirkl_error_tmir_obj_method_apply (mirkl_object_t *obj, mir_ast_t *ast, const char *method_name, mir_ast_t **ret, mir_prsdata_t *pp, apr_pool_t *tmp_pool)
 
mirkl_error_tmir_obj_method_apply_all (mirkl_object_t *obj, mir_ast_t *ast, const char *method_name, mir_ast_t **ret, mir_prsdata_t *pp, apr_pool_t *tmp_pool)
 
mirkl_error_tmir_obj_method_apply_super (mirkl_object_t *obj, mir_ast_t *ast, const char *method_name, mir_ast_t **ret, mir_prsdata_t *pp, apr_pool_t *tmp_pool)
 

Detailed Description

Note
All mir_obj_... functions expect that input mirkl_object_t is of type #MIR_OBJTYPE_OBJ

Macro Definition Documentation

◆ MIR_OBJFLAG_ETERNAL

#define MIR_OBJFLAG_ETERNAL   0x0001

Flags of objects This object lives all the time as program runs. Otherwise, if this bit is not set, the object can be deleted if it's not needed any more (no variables have references to it).

◆ MIR_OBJFLAG_FALSEOBJ

#define MIR_OBJFLAG_FALSEOBJ   0x0020

This object is 'false' or equivalent to 'false'.

◆ MIR_OBJFLAG_HASMODEL

#define MIR_OBJFLAG_HASMODEL   0x0002

A model is defined for the object.

◆ MIR_OBJFLAG_MODCHAN

#define MIR_OBJFLAG_MODCHAN   0x0004

Changes in object model has been detected. Object can be updated.

◆ MIR_OBJFLAG_NILOBJ

#define MIR_OBJFLAG_NILOBJ   0x0008

This object is nil or equivalent to nil.

◆ MIR_OBJFLAG_TRUEOBJ

#define MIR_OBJFLAG_TRUEOBJ   0x0010

This object is 'true' or equivalent to 'true'.

Function Documentation

◆ mir_obj_add_method()

mirkl_error_t * mir_obj_add_method ( mirkl_object_t *  obj,
const char *  var_name,
mirkl_object_t *  var_init_value,
mirkl_object_t **  var_out,
mir_prsdata_t *  pp 
)

Add a function to an object as object method.

Parameters
[in]objObject, to which the method should be added.
[in]var_nameName of variable, which contains the method.
[in]var_init_valueMethod object, which should be added.
[in,out]var_outPointer to newly created variable if not NULL.
[in]ppParser context.

◆ mir_obj_add_variable()

mirkl_error_t * mir_obj_add_variable ( mirkl_object_t *  obj,
const char *  var_name,
mirkl_object_t *  var_init_value,
mirkl_object_t **  var_out,
mir_prsdata_t *  pp 
)

Add variable to object.

Parameters
var_nameName of variable.
var_init_valueMir object as initial value of the variable.
var_outPointer to the newly created variable if not NULL.
ppParser context.

◆ mir_obj_check_adata()

int mir_obj_check_adata ( unsigned int  numobj,
mirkl_object_t **  obj,
unsigned int *  flags,
int *  otype 
)

Checks if there is data of particular type in objects.

Parameters
numobjNumber of objects in arrays obj, flags and otype.
objArray of objects to be checked.
flagsArray of flags.
otypeArray of types.
Returns
Returns zero if all fine, otherwise positive integer i+1, where i is the index in obj array where the problem occured.
Note
Entries in obj array can be NULL. In this case if flags[i] != 0 then this object is considered as required and the respective error code returned.
The parameter flags can be NULL, in this case all objects are considered as optional (not required).

◆ mir_obj_check_data()

int mir_obj_check_data ( unsigned int  numobj,
mirkl_object_t **  obj,
unsigned int *  flags,
  ... 
)

Similar to mir_obj_check_adata, but the types are given explicitly as variable length argument list.

◆ mir_obj_create()

mirkl_error_t * mir_obj_create ( mirkl_object_t **  obj,
int  type,
void *  data,
mirkl_uint32_t  flags,
mirkl_object_t *  class,
mir_prsdata_t *  pp,
apr_pool_t *  pool 
)

Create Mir object.

Parameters
[in,out]objPointer to create object.
[in]typeType of data to be added to object, MIR_OBJDATA_...
[in]dataUser data to be added to object.
[in]flagsObject flags, MIR_OBJFLAG_...
[in]classPointer to object of class, to which the created object belongs.
[in]ppParser context.
[in]poolMemory pool for object allocation.

◆ mir_obj_del_variable()

void mir_obj_del_variable ( mirkl_object_t *  obj,
const char *  var_name 
)

Delete variable from object.

Parameters
var_nameName of variable.

◆ mir_obj_get_variable()

mirkl_object_t * mir_obj_get_variable ( mirkl_object_t *  obj,
const char *  var_name 
)

Get variable of object.

Parameters
var_nameName of variable.

◆ mir_obj_method_apply()

mirkl_error_t * mir_obj_method_apply ( mirkl_object_t *  obj,
mir_ast_t *  ast,
const char *  method_name,
mir_ast_t **  ret,
mir_prsdata_t *  pp,
apr_pool_t *  tmp_pool 
)

Applies a method to an object.

Parameters
[in]objObject to which the method should be applied.
[in]astArguments for the method.
[in]method_nameName of the method to be applied.
[out]retResults of the method application. (Objects, errors).
[in]ppParser context.
[in]tmp_poolWorking memory pool for temporary allocations.

◆ mir_obj_method_apply_all()

mirkl_error_t * mir_obj_method_apply_all ( mirkl_object_t *  obj,
mir_ast_t *  ast,
const char *  method_name,
mir_ast_t **  ret,
mir_prsdata_t *  pp,
apr_pool_t *  tmp_pool 
)

Similar to mir_obj_method_apply, but walks through the whole chain of method sources and applies all available methods to the object.

◆ mir_obj_method_apply_super()

mirkl_error_t * mir_obj_method_apply_super ( mirkl_object_t *  obj,
mir_ast_t *  ast,
const char *  method_name,
mir_ast_t **  ret,
mir_prsdata_t *  pp,
apr_pool_t *  tmp_pool 
)

Applies a method to an object.

Note
The searching of the method starts from the superclass of the currently active class (nesting is possible).
Parameters
[in]objObject to which the method should be applied.
[in]astArguments for the method.
[in]method_nameName of the method to be applied.
[out]retResults of the method application.
[in]ppParser context.
[in]tmp_poolWorking memory pool for temporary allocations.