ADAPT / src / arc_utils.c
arc_utils.c
Raw

#include <stdio.h>
#include <stdlib.h>


#include "tool_runner.h"
#include "mape_k.h"
#include "arc_model.h"
#include "arc_system.h"
#include "arc_parse.h"
#include "file_utils.h"

void cleanup_sys(struct arc_system *sys)
{
    
    if(!sys)
    {
		return;
    }

    
    for(size_t i=0;i<sys->num_components;i++)
    {
		if(sys->components[i])
		{
		
			for(size_t j=0;j<sys->components[i]->num_interfaces;j++)
			{
				if(sys->components[i]->interfaces[j])
				{
					for(size_t k=0;k<sys->components[i]->interfaces[j]->num_properties;k++)
					{
						if(sys->components[i]->interfaces[j]->properties[k])
						{
							destroy_property(sys->components[i]->interfaces[j]->properties[k]);
							free(sys->components[i]->interfaces[j]->properties[k]);
						}
					}
					destroy_interface(sys->components[i]->interfaces[j]);
					free(sys->components[i]->interfaces[j]);
				}
			}

			for(size_t j=0;j<sys->components[i]->num_properties;j++)
			{
				if(sys->components[i]->properties[j])
				{
					destroy_property(sys->components[i]->properties[j]);
					free(sys->components[i]->properties[j]);
				}
			}
		    
			destroy_component(sys->components[i]);
			free(sys->components[i]);
		}
    }

    for(size_t i=0;i<sys->num_invocations;i++)
    {
		if(sys->invocations[i])
		{
			free(sys->invocations[i]);
		}
    }

    for(size_t i=0;i<sys->num_properties;i++)
    {
		if(sys->properties[i])
		{
			destroy_property(sys->properties[i]);
			free(sys->properties[i]);
		}
    }
    
    destroy_system(sys);
    free(sys);
}


void load_arc_model(char *arc_file, struct arc_model *a_m)
{
    char *text = read_file(arc_file);
    struct arc_system *system=arc_parse(text);
    free(text);

    if(!system)
    {
		fprintf(stderr,"Could not parse architecture file, exiting\n");
		exit(-1);
    }
    init_model(a_m, system);
}