Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- //system of functional nodes
- #define Wind_BASE struct WindNode* next; \
- enum WindType type;
- enum WindType
- {
- WindType_INT,
- WindType_ADD
- };
- //base type struct for inheritance
- struct WindNode
- {
- Wind_BASE
- };
- struct WindAdd
- {
- Wind_BASE
- struct WindNode* first;
- struct WindNode* second;
- };
- struct WindInt
- {
- Wind_BASE
- int val;
- };
- //method to add and return result of add node
- int addTest(struct WindNode* node)
- {
- if(node->type == WindType_ADD)
- {
- struct WindNode* a = ((struct WindAdd*)node)->first;
- struct WindNode* b = ((struct WindAdd*)node)->second;
- return ((struct WindInt*)a)->val + ((struct WindInt*)b)->val;
- }
- else return 0;
- }
- int main(int argc, char const *argv[])
- {
- //init phase
- struct WindAdd add;
- struct WindAdd* addp = &add;
- add.type = WindType_ADD;
- struct WindInt a;
- struct WindInt* ap = &a;
- a.val = 3;
- struct WindInt b;
- struct WindInt* bp = &b;
- b.val = 3;
- add.first = (struct WindNode*)ap;
- add.second = (struct WindNode*)bp;
- //treats an ASt-like addition node as computation
- printf("The result is %d\n", addTest((struct WindNode*)addp));
- return 0;
- }
Add Comment
Please, Sign In to add comment