summaryrefslogtreecommitdiff
path: root/src/base/state.h
blob: 82db1e0a4ca608de3067703c0273ae94c39cf957 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#pragma once

#include "../jprint.h"

struct
{
	char *Address;
	char *Hook;
} typedef endpoint;

struct
{
	char *Node;
	char *Interface;
} typedef endpoint_configuration;

NAMED_ENUM(link_type, direct, pipe, );

struct
{
	endpoint_configuration Peer[2];
	link_type              Type;
} typedef link_configuration;

struct
{
	char              *Name;
	link_configuration Configuration;
	endpoint           Peer[2];
	union
	{
		struct
		{
		} direct;
		struct
		{
			u32 ID;
		} pipe;
	};
} typedef link_;

struct
{
	char         *Module;
	ucl_object_t *Configuration;
} typedef node_configuration;

struct
{
	char              *Name;
	node_configuration Configuration;
	ucl_object_t      *Data;
} typedef node;

struct
{
	size_t NodeCount;
	node  *Node;
	size_t LinkCount;
	link_ *Link;
} typedef experiment;

int FromString_link_type(char const *, link_type *);

void Free_endpoint(endpoint *);
void Free_endpoint_configuration(endpoint_configuration *);
void Free_link_configuration(link_configuration *);
void Free_link(link_ *);
void Free_node_configuration(node_configuration *);
void Free_node(node *);
void Free_experiment(experiment *);

char *Parse_endpoint(endpoint *, ucl_object_t const *, char const *Position);
char *Parse_endpoint_configuration(endpoint_configuration *, ucl_object_t const *, char const *Position);
char *Parse_link_type(link_type *, ucl_object_t const *, char const *Position);
char *Parse_link_configuration(link_configuration *, ucl_object_t const *, char const *Position);
char *Parse_link(link_ *, ucl_object_t const *, char const *Position);
char *Parse_node_configuration(node_configuration *, ucl_object_t const *, char const *Position);
char *Parse_node(node *, ucl_object_t const *, char const *Position);
char *Parse_experiment(experiment *, ucl_object_t const *, char const *Position);

void Save_endpoint(jprint_state *, endpoint const *);
void Save_endpoint_configuration(jprint_state *, endpoint_configuration const *);
void Save_link_configuration(jprint_state *, link_configuration const *);
void Save_link(jprint_state *, link_ const *);
void Save_node_configuration(jprint_state *, node_configuration const *);
void Save_node(jprint_state *, node const *);
void Save_experiment(jprint_state *, experiment const *);