Skip to content

Commit

Permalink
#416 Fixed initial replicator iteration bugs, added tests
Browse files Browse the repository at this point in the history
Also switched out delegates for virtual methods.
  • Loading branch information
SanderMertens committed Dec 2, 2015
1 parent 58f64d3 commit 02d847f
Show file tree
Hide file tree
Showing 21 changed files with 1,211 additions and 492 deletions.
714 changes: 691 additions & 23 deletions README.md

Large diffs are not rendered by default.

2 changes: 0 additions & 2 deletions packages/corto/lang/include/_corto.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@ extern "C" {
#include "corto_int.h"
#include "corto_interface.h"
#include "corto_interfaceVector.h"
#include "corto_invokeAction.h"
#include "corto_invokeEvent.h"
#include "corto_iterator.h"
#include "corto_list.h"
Expand All @@ -56,7 +55,6 @@ extern "C" {
#include "corto_procedure.h"
#include "corto_query.h"
#include "corto_replicator.h"
#include "corto_requestAction.h"
#include "corto_result.h"
#include "corto_sequence.h"
#include "corto_struct.h"
Expand Down
80 changes: 10 additions & 70 deletions packages/corto/lang/include/corto__api.h
Original file line number Diff line number Diff line change
Expand Up @@ -1007,36 +1007,6 @@ CORTO_LANG_EXPORT corto_int16 _corto_interfaceVectorseqInit(corto_interfaceVecto
CORTO_LANG_EXPORT corto_int16 _corto_interfaceVectorseqDeinit(corto_interfaceVectorseq* value);
#define corto_interfaceVectorseqDeinit(value) _corto_interfaceVectorseqDeinit(value)

/* /corto/lang/invokeAction */
CORTO_LANG_EXPORT corto_invokeAction* _corto_invokeActionCreate(corto_object instance, corto_function procedure);
#define corto_invokeActionCreate(instance, procedure) _corto_invokeActionCreate(instance, corto_function(procedure))
CORTO_LANG_EXPORT corto_invokeAction* _corto_invokeActionCreateChild(corto_object _parent, corto_string _name, corto_object instance, corto_function procedure);
#define corto_invokeActionCreateChild(_parent, _name, instance, procedure) _corto_invokeActionCreateChild(_parent, _name, instance, corto_function(procedure))
CORTO_LANG_EXPORT corto_int16 _corto_invokeActionUpdate(corto_invokeAction* _this, corto_object instance, corto_function procedure);
#define corto_invokeActionUpdate(_this, instance, procedure) _corto_invokeActionUpdate(_this, instance, corto_function(procedure))

CORTO_LANG_EXPORT corto_invokeAction* _corto_invokeActionDeclare(void);
#define corto_invokeActionDeclare() _corto_invokeActionDeclare()
CORTO_LANG_EXPORT corto_invokeAction* _corto_invokeActionDeclareChild(corto_object _parent, corto_string _name);
#define corto_invokeActionDeclareChild(_parent, _name) _corto_invokeActionDeclareChild(_parent, _name)
CORTO_LANG_EXPORT corto_int16 _corto_invokeActionDefine(corto_invokeAction* _this, corto_object instance, corto_function procedure);
#define corto_invokeActionDefine(_this, instance, procedure) _corto_invokeActionDefine(_this, instance, corto_function(procedure))
CORTO_LANG_EXPORT void _corto_invokeActionSet(corto_invokeAction* _this, corto_object instance, corto_function procedure);
#define corto_invokeActionSet(_this, instance, procedure) _corto_invokeActionSet(_this, instance, corto_function(procedure))
CORTO_LANG_EXPORT corto_string _corto_invokeActionStr(corto_invokeAction* value);
#define corto_invokeActionStr(value) _corto_invokeActionStr(value)
CORTO_LANG_EXPORT corto_invokeAction* corto_invokeActionFromStr(corto_invokeAction* value, corto_string str);
CORTO_LANG_EXPORT corto_int16 _corto_invokeActionCopy(corto_invokeAction* *dst, corto_invokeAction* src);
#define corto_invokeActionCopy(dst, src) _corto_invokeActionCopy(dst, src)
CORTO_LANG_EXPORT corto_int16 _corto_invokeActionCompare(corto_invokeAction* dst, corto_invokeAction* src);
#define corto_invokeActionCompare(dst, src) _corto_invokeActionCompare(dst, src)

CORTO_LANG_EXPORT corto_int16 _corto_invokeActionInit(corto_invokeAction* value);
#define corto_invokeActionInit(value) _corto_invokeActionInit(value)
CORTO_LANG_EXPORT corto_int16 _corto_invokeActionDeinit(corto_invokeAction* value);
#define corto_invokeActionDeinit(value) _corto_invokeActionDeinit(value)

corto_int16 corto_invokeActionCall(corto_invokeAction *_delegate, corto_object instance, corto_function function, corto_octetseq args);
/* /corto/lang/invokeEvent */
CORTO_LANG_EXPORT corto_invokeEvent _corto_invokeEventCreate(corto_replicator replicator, corto_object instance, corto_function function, corto_octetseq args);
#define corto_invokeEventCreate(replicator, instance, function, args) _corto_invokeEventCreate(corto_replicator(replicator), instance, corto_function(function), args)
Expand Down Expand Up @@ -1707,21 +1677,21 @@ CORTO_LANG_EXPORT corto_int16 _corto_queryCompare(corto_query dst, corto_query s
#define corto_queryCompare(dst, src) _corto_queryCompare(corto_query(dst), corto_query(src))

/* /corto/lang/replicator */
CORTO_LANG_EXPORT corto_replicator _corto_replicatorCreate(corto_object mount, corto_query query, corto_notifyAction onDeclare, corto_notifyAction onUpdate, corto_notifyAction onDelete, corto_invokeAction onInvoke, corto_requestAction onRequest);
#define corto_replicatorCreate(mount, query, onDeclare, onUpdate, onDelete, onInvoke, onRequest) _corto_replicatorCreate(mount, corto_query(query), onDeclare, onUpdate, onDelete, onInvoke, onRequest)
CORTO_LANG_EXPORT corto_replicator _corto_replicatorCreateChild(corto_object _parent, corto_string _name, corto_object mount, corto_query query, corto_notifyAction onDeclare, corto_notifyAction onUpdate, corto_notifyAction onDelete, corto_invokeAction onInvoke, corto_requestAction onRequest);
#define corto_replicatorCreateChild(_parent, _name, mount, query, onDeclare, onUpdate, onDelete, onInvoke, onRequest) _corto_replicatorCreateChild(_parent, _name, mount, corto_query(query), onDeclare, onUpdate, onDelete, onInvoke, onRequest)
CORTO_LANG_EXPORT corto_int16 _corto_replicatorUpdate(corto_replicator _this, corto_object mount, corto_query query, corto_notifyAction onDeclare, corto_notifyAction onUpdate, corto_notifyAction onDelete, corto_invokeAction onInvoke, corto_requestAction onRequest);
#define corto_replicatorUpdate(_this, mount, query, onDeclare, onUpdate, onDelete, onInvoke, onRequest) _corto_replicatorUpdate(corto_replicator(_this), mount, corto_query(query), onDeclare, onUpdate, onDelete, onInvoke, onRequest)
CORTO_LANG_EXPORT corto_replicator _corto_replicatorCreate(corto_object mount, corto_query query);
#define corto_replicatorCreate(mount, query) _corto_replicatorCreate(mount, corto_query(query))
CORTO_LANG_EXPORT corto_replicator _corto_replicatorCreateChild(corto_object _parent, corto_string _name, corto_object mount, corto_query query);
#define corto_replicatorCreateChild(_parent, _name, mount, query) _corto_replicatorCreateChild(_parent, _name, mount, corto_query(query))
CORTO_LANG_EXPORT corto_int16 _corto_replicatorUpdate(corto_replicator _this, corto_object mount, corto_query query);
#define corto_replicatorUpdate(_this, mount, query) _corto_replicatorUpdate(corto_replicator(_this), mount, corto_query(query))

CORTO_LANG_EXPORT corto_replicator _corto_replicatorDeclare(void);
#define corto_replicatorDeclare() _corto_replicatorDeclare()
CORTO_LANG_EXPORT corto_replicator _corto_replicatorDeclareChild(corto_object _parent, corto_string _name);
#define corto_replicatorDeclareChild(_parent, _name) _corto_replicatorDeclareChild(_parent, _name)
CORTO_LANG_EXPORT corto_int16 _corto_replicatorDefine(corto_replicator _this, corto_object mount, corto_query query, corto_notifyAction onDeclare, corto_notifyAction onUpdate, corto_notifyAction onDelete, corto_invokeAction onInvoke, corto_requestAction onRequest);
#define corto_replicatorDefine(_this, mount, query, onDeclare, onUpdate, onDelete, onInvoke, onRequest) _corto_replicatorDefine(corto_replicator(_this), mount, corto_query(query), onDeclare, onUpdate, onDelete, onInvoke, onRequest)
CORTO_LANG_EXPORT void _corto_replicatorSet(corto_replicator _this, corto_object mount, corto_query query, corto_notifyAction onDeclare, corto_notifyAction onUpdate, corto_notifyAction onDelete, corto_invokeAction onInvoke, corto_requestAction onRequest);
#define corto_replicatorSet(_this, mount, query, onDeclare, onUpdate, onDelete, onInvoke, onRequest) _corto_replicatorSet(corto_replicator(_this), mount, corto_query(query), onDeclare, onUpdate, onDelete, onInvoke, onRequest)
CORTO_LANG_EXPORT corto_int16 _corto_replicatorDefine(corto_replicator _this, corto_object mount, corto_query query);
#define corto_replicatorDefine(_this, mount, query) _corto_replicatorDefine(corto_replicator(_this), mount, corto_query(query))
CORTO_LANG_EXPORT void _corto_replicatorSet(corto_replicator _this, corto_object mount, corto_query query);
#define corto_replicatorSet(_this, mount, query) _corto_replicatorSet(corto_replicator(_this), mount, corto_query(query))
CORTO_LANG_EXPORT corto_string _corto_replicatorStr(corto_replicator value);
#define corto_replicatorStr(value) _corto_replicatorStr(corto_replicator(value))
CORTO_LANG_EXPORT corto_replicator corto_replicatorFromStr(corto_replicator value, corto_string str);
Expand All @@ -1730,36 +1700,6 @@ CORTO_LANG_EXPORT corto_int16 _corto_replicatorCopy(corto_replicator *dst, corto
CORTO_LANG_EXPORT corto_int16 _corto_replicatorCompare(corto_replicator dst, corto_replicator src);
#define corto_replicatorCompare(dst, src) _corto_replicatorCompare(corto_replicator(dst), corto_replicator(src))

/* /corto/lang/requestAction */
CORTO_LANG_EXPORT corto_requestAction* _corto_requestActionCreate(corto_object instance, corto_function procedure);
#define corto_requestActionCreate(instance, procedure) _corto_requestActionCreate(instance, corto_function(procedure))
CORTO_LANG_EXPORT corto_requestAction* _corto_requestActionCreateChild(corto_object _parent, corto_string _name, corto_object instance, corto_function procedure);
#define corto_requestActionCreateChild(_parent, _name, instance, procedure) _corto_requestActionCreateChild(_parent, _name, instance, corto_function(procedure))
CORTO_LANG_EXPORT corto_int16 _corto_requestActionUpdate(corto_requestAction* _this, corto_object instance, corto_function procedure);
#define corto_requestActionUpdate(_this, instance, procedure) _corto_requestActionUpdate(_this, instance, corto_function(procedure))

CORTO_LANG_EXPORT corto_requestAction* _corto_requestActionDeclare(void);
#define corto_requestActionDeclare() _corto_requestActionDeclare()
CORTO_LANG_EXPORT corto_requestAction* _corto_requestActionDeclareChild(corto_object _parent, corto_string _name);
#define corto_requestActionDeclareChild(_parent, _name) _corto_requestActionDeclareChild(_parent, _name)
CORTO_LANG_EXPORT corto_int16 _corto_requestActionDefine(corto_requestAction* _this, corto_object instance, corto_function procedure);
#define corto_requestActionDefine(_this, instance, procedure) _corto_requestActionDefine(_this, instance, corto_function(procedure))
CORTO_LANG_EXPORT void _corto_requestActionSet(corto_requestAction* _this, corto_object instance, corto_function procedure);
#define corto_requestActionSet(_this, instance, procedure) _corto_requestActionSet(_this, instance, corto_function(procedure))
CORTO_LANG_EXPORT corto_string _corto_requestActionStr(corto_requestAction* value);
#define corto_requestActionStr(value) _corto_requestActionStr(value)
CORTO_LANG_EXPORT corto_requestAction* corto_requestActionFromStr(corto_requestAction* value, corto_string str);
CORTO_LANG_EXPORT corto_int16 _corto_requestActionCopy(corto_requestAction* *dst, corto_requestAction* src);
#define corto_requestActionCopy(dst, src) _corto_requestActionCopy(dst, src)
CORTO_LANG_EXPORT corto_int16 _corto_requestActionCompare(corto_requestAction* dst, corto_requestAction* src);
#define corto_requestActionCompare(dst, src) _corto_requestActionCompare(dst, src)

CORTO_LANG_EXPORT corto_int16 _corto_requestActionInit(corto_requestAction* value);
#define corto_requestActionInit(value) _corto_requestActionInit(value)
CORTO_LANG_EXPORT corto_int16 _corto_requestActionDeinit(corto_requestAction* value);
#define corto_requestActionDeinit(value) _corto_requestActionDeinit(value)

corto_int16 corto_requestActionCall(corto_requestAction *_delegate, corto_resultIter* _result, corto_object scope, corto_string expr);
/* /corto/lang/result */
CORTO_LANG_EXPORT corto_result* _corto_resultCreate(corto_string name, corto_string parent, corto_string type);
#define corto_resultCreate(name, parent, type) _corto_resultCreate(name, parent, type)
Expand Down
35 changes: 7 additions & 28 deletions packages/corto/lang/include/corto__type.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@ extern "C" {
#define corto_interfaceseq(o) ((corto_interfaceseq *)corto_assertType((corto_type)corto_interfaceseq_o, o))
#define corto_interfaceVector(o) ((corto_interfaceVector *)corto_assertType((corto_type)corto_interfaceVector_o, o))
#define corto_interfaceVectorseq(o) ((corto_interfaceVectorseq *)corto_assertType((corto_type)corto_interfaceVectorseq_o, o))
#define corto_invokeAction(o) ((corto_invokeAction *)corto_assertType((corto_type)corto_invokeAction_o, o))
#define corto_invokeEvent(o) ((corto_invokeEvent)corto_assertType((corto_type)corto_invokeEvent_o, o))
#define corto_iterator(o) ((corto_iterator)corto_assertType((corto_type)corto_iterator_o, o))
#define corto_list(o) ((corto_list)corto_assertType((corto_type)corto_list_o, o))
Expand All @@ -77,7 +76,6 @@ extern "C" {
#define corto_procedureKind(o) ((corto_procedureKind *)corto_assertType((corto_type)corto_procedureKind_o, o))
#define corto_query(o) ((corto_query)corto_assertType((corto_type)corto_query_o, o))
#define corto_replicator(o) ((corto_replicator)corto_assertType((corto_type)corto_replicator_o, o))
#define corto_requestAction(o) ((corto_requestAction *)corto_assertType((corto_type)corto_requestAction_o, o))
#define corto_result(o) ((corto_result *)corto_assertType((corto_type)corto_result_o, o))
#define corto_resultIter(o) ((corto_resultIter *)corto_assertType((corto_type)corto_resultIter_o, o))
#define corto_sequence(o) ((corto_sequence)corto_assertType((corto_type)corto_sequence_o, o))
Expand Down Expand Up @@ -496,13 +494,6 @@ typedef int32_t corto_int32;
/* /corto/lang/int8 */
typedef int8_t corto_int8;

/* /corto/lang/invokeAction */
typedef struct corto_invokeAction corto_invokeAction;

struct corto_invokeAction {
corto_delegatedata _parent;
};

/* /corto/lang/query */
CORTO_CLASS(corto_query);

Expand All @@ -511,31 +502,12 @@ CORTO_CLASS_DEF(corto_query) {
corto_eventMask mask;
};

/* /corto/lang/notifyAction */
typedef struct corto_notifyAction corto_notifyAction;

struct corto_notifyAction {
corto_delegatedata _parent;
};

/* /corto/lang/requestAction */
typedef struct corto_requestAction corto_requestAction;

struct corto_requestAction {
corto_delegatedata _parent;
};

/* /corto/lang/replicator */
CORTO_CLASS(corto_replicator);

CORTO_CLASS_DEF(corto_replicator) {
corto_object mount;
corto_query query;
corto_notifyAction onDeclare;
corto_notifyAction onUpdate;
corto_notifyAction onDelete;
corto_invokeAction onInvoke;
corto_requestAction onRequest;
};

/* /corto/lang/octet */
Expand Down Expand Up @@ -595,6 +567,13 @@ CORTO_CLASS_DEF(corto_method) {
corto_bool _virtual;
};

/* /corto/lang/notifyAction */
typedef struct corto_notifyAction corto_notifyAction;

struct corto_notifyAction {
corto_delegatedata _parent;
};

/* /corto/lang/observableEvent */
CORTO_CLASS(corto_observableEvent);

Expand Down
12 changes: 7 additions & 5 deletions packages/corto/lang/include/corto_ll.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ void corto_llFree(corto_ll);

/* Walk list */
int corto_llWalk(corto_ll list, corto_walkAction callback, void* userdata);

/* Walk list, return pointers to elements */
int corto_llWalkPtr(corto_ll list, corto_walkAction callback, void* userdata);

Expand Down Expand Up @@ -67,7 +67,11 @@ int corto_llSize(corto_ll list);

/* Obtain iterator */
#define corto_llIter(list) _corto_llIter(list, alloca(sizeof(corto_llIter_s)));

corto_iter _corto_llIter(corto_ll, void *udata);
corto_iter corto_llIterAlloc(corto_ll);

void corto_llIterRelease(corto_iter *iter);

/* Append one list to another */
void corto_llAppendList(corto_ll l1, corto_ll l2);
Expand All @@ -77,10 +81,10 @@ void corto_llInsertList(corto_ll l1, corto_ll l2);

/* Reverse list */
void corto_llReverse(corto_ll list);

/* Clear list */
void corto_llClear(corto_ll list);

/* Iterator implementation */
void corto_llIterMoveFirst(corto_iter* iter);
void *corto_llIterMove(corto_iter* iter, unsigned int index);
Expand All @@ -96,5 +100,3 @@ void corto_llIterSet(corto_iter* iter, void* o);
#endif

#endif


4 changes: 2 additions & 2 deletions packages/corto/lang/include/corto_mem.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@
extern "C" {
#endif

#define corto_calloc(n) calloc(n, 1);
#define corto_alloc(n) malloc(n);
#define corto_calloc(n) calloc(n, 1)
#define corto_alloc(n) malloc(n)
#define corto_dealloc free
#define corto_realloc realloc

Expand Down
35 changes: 35 additions & 0 deletions packages/corto/lang/include/corto_replicator.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,41 @@ CORTO_LANG_EXPORT corto_void _corto_replicator_on_delete(corto_replicator _this,
CORTO_LANG_EXPORT corto_void _corto_replicator_on_update(corto_replicator _this, corto_object observable);
#define corto_replicator_on_update(_this, observable) _corto_replicator_on_update(corto_replicator(_this), observable)

/* virtual /corto/lang/replicator/onDeclare(object observable) */
CORTO_LANG_EXPORT void _corto_replicator_onDeclare(corto_replicator _this, corto_object observable);
#define corto_replicator_onDeclare(_this, observable) _corto_replicator_onDeclare(corto_replicator(_this), observable)

CORTO_LANG_EXPORT corto_void _corto_replicator_onDeclare_v(corto_replicator _this, corto_object observable);
#define corto_replicator_onDeclare_v(_this, observable) _corto_replicator_onDeclare_v(corto_replicator(_this), observable)

/* virtual /corto/lang/replicator/onDelete(object observable) */
CORTO_LANG_EXPORT void _corto_replicator_onDelete(corto_replicator _this, corto_object observable);
#define corto_replicator_onDelete(_this, observable) _corto_replicator_onDelete(corto_replicator(_this), observable)

CORTO_LANG_EXPORT corto_void _corto_replicator_onDelete_v(corto_replicator _this, corto_object observable);
#define corto_replicator_onDelete_v(_this, observable) _corto_replicator_onDelete_v(corto_replicator(_this), observable)

/* virtual /corto/lang/replicator/onInvoke(object instance,function proc,octetseq args) */
CORTO_LANG_EXPORT void _corto_replicator_onInvoke(corto_replicator _this, corto_object instance, corto_function proc, corto_octetseq args);
#define corto_replicator_onInvoke(_this, instance, proc, args) _corto_replicator_onInvoke(corto_replicator(_this), instance, corto_function(proc), args)

CORTO_LANG_EXPORT corto_void _corto_replicator_onInvoke_v(corto_replicator _this, corto_object instance, corto_function proc, corto_octetseq args);
#define corto_replicator_onInvoke_v(_this, instance, proc, args) _corto_replicator_onInvoke_v(corto_replicator(_this), instance, corto_function(proc), args)

/* virtual /corto/lang/replicator/onRequest(object parent,string expr) */
CORTO_LANG_EXPORT corto_resultIter _corto_replicator_onRequest(corto_replicator _this, corto_object parent, corto_string expr);
#define corto_replicator_onRequest(_this, parent, expr) _corto_replicator_onRequest(corto_replicator(_this), parent, expr)

CORTO_LANG_EXPORT corto_resultIter _corto_replicator_onRequest_v(corto_replicator _this, corto_object parent, corto_string expr);
#define corto_replicator_onRequest_v(_this, parent, expr) _corto_replicator_onRequest_v(corto_replicator(_this), parent, expr)

/* virtual /corto/lang/replicator/onUpdate(object observable) */
CORTO_LANG_EXPORT void _corto_replicator_onUpdate(corto_replicator _this, corto_object observable);
#define corto_replicator_onUpdate(_this, observable) _corto_replicator_onUpdate(corto_replicator(_this), observable)

CORTO_LANG_EXPORT corto_void _corto_replicator_onUpdate_v(corto_replicator _this, corto_object observable);
#define corto_replicator_onUpdate_v(_this, observable) _corto_replicator_onUpdate_v(corto_replicator(_this), observable)

CORTO_LANG_EXPORT corto_void _corto_replicator_post(corto_replicator _this, corto_event e);
#define corto_replicator_post(_this, e) _corto_replicator_post(corto_replicator(_this), corto_event(e))

Expand Down
Loading

0 comments on commit 02d847f

Please sign in to comment.