Skip to content

Commit

Permalink
Added SecondChance algorithm to allow you to retry importing nodes th…
Browse files Browse the repository at this point in the history
…at could not be imported because they did not find their parents. This may be the case if we have a node type of Object which has its own parent node type of Variable. For example, this could be a HasHistoricalConfiguration reference type. Also, the status about how many nodes we have imported shows numbers that include nodes that were not imported due to some error.
  • Loading branch information
xydan83 committed Dec 11, 2023
1 parent fd60349 commit e4a3eed
Show file tree
Hide file tree
Showing 7 changed files with 129 additions and 53 deletions.
163 changes: 119 additions & 44 deletions backends/open62541/src/import.c

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion backends/stdout/examples/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ int main(int argc, char *argv[])

for (int i = 0; i < NL_NODECLASS_COUNT; i++)
{
NodesetLoader_forEachNode(loader, (NL_NodeClass)i, NULL, (NodesetLoader_forEachNode_Func)dumpNode);
NodesetLoader_forEachNode(loader, (NL_NodeClass)i, NULL, NULL, (NodesetLoader_forEachNode_Func)dumpNode);
}

NodesetLoader_delete(loader);
Expand Down
4 changes: 2 additions & 2 deletions include/NodesetLoader/NodesetLoader.h
Original file line number Diff line number Diff line change
Expand Up @@ -264,10 +264,10 @@ LOADER_EXPORT void NodesetLoader_delete(NodesetLoader *loader);
LOADER_EXPORT const NL_BiDirectionalReference *
NodesetLoader_getBidirectionalRefs(const NodesetLoader *loader);
LOADER_EXPORT bool NodesetLoader_sort(NodesetLoader *loader);
typedef void (*NodesetLoader_forEachNode_Func)(void *context, NL_Node *node);
typedef void (*NodesetLoader_forEachNode_Func)(void *context, NL_Node *node, void *extension);
LOADER_EXPORT size_t
NodesetLoader_forEachNode(NodesetLoader *loader, NL_NodeClass nodeClass,
void *context, NodesetLoader_forEachNode_Func fn);
void *context, void *extension, NodesetLoader_forEachNode_Func fn);
LOADER_EXPORT bool NodesetLoader_isInstanceNode (const NL_Node *baseNode);
#ifdef __cplusplus
}
Expand Down
5 changes: 3 additions & 2 deletions src/Nodeset.c
Original file line number Diff line number Diff line change
Expand Up @@ -632,12 +632,13 @@ void Nodeset_InverseNameFinish(const Nodeset *nodeset, NL_Node *node,
}

size_t Nodeset_forEachNode(Nodeset *nodeset, NL_NodeClass nodeClass,
void *context, NodesetLoader_forEachNode_Func fn)
void *context, void *extension,
NodesetLoader_forEachNode_Func fn)
{
NodeContainer *c = nodeset->nodes[nodeClass];
for (NL_Node **node = c->nodes; node != c->nodes + c->size; node++)
{
fn(context, *node);
fn(context, *node, extension);
}
return c->size;
}
2 changes: 1 addition & 1 deletion src/Nodeset.h
Original file line number Diff line number Diff line change
Expand Up @@ -71,5 +71,5 @@ void Nodeset_InverseNameFinish(const Nodeset *nodeset, NL_Node *node, char *text
const NL_BiDirectionalReference *
Nodeset_getBiDirectionalRefs(const Nodeset *nodeset);
size_t Nodeset_forEachNode(Nodeset *nodeset, NL_NodeClass nodeClass,
void *context, NodesetLoader_forEachNode_Func fn);
void *context, void *extension, NodesetLoader_forEachNode_Func fn);
#endif
4 changes: 2 additions & 2 deletions src/NodesetLoader.c
Original file line number Diff line number Diff line change
Expand Up @@ -567,8 +567,8 @@ NodesetLoader_getBidirectionalRefs(const NodesetLoader *loader)
}

size_t NodesetLoader_forEachNode(NodesetLoader *loader, NL_NodeClass nodeClass,
void *context,
void *context, void *extension,
NodesetLoader_forEachNode_Func fn)
{
return Nodeset_forEachNode(loader->nodeset, nodeClass, context, fn);
return Nodeset_forEachNode(loader->nodeset, nodeClass, context, extension, fn);
}
2 changes: 1 addition & 1 deletion tests/parser.c
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ START_TEST(Server_ImportBasicNodeClassTest)

for (int i = 0; i < NL_NODECLASS_COUNT; i++)
{
NodesetLoader_forEachNode(loader, (NL_NodeClass)i, &nodeCount,
NodesetLoader_forEachNode(loader, (NL_NodeClass)i, &nodeCount, NULL,
(NodesetLoader_forEachNode_Func)addNode);
}

Expand Down

0 comments on commit e4a3eed

Please sign in to comment.