/**
* Copyright 2005-2007 ECMWF
* 
* Licensed under the GNU Lesser General Public License which
* incorporates the terms and conditions of version 3 of the GNU
* General Public License.
* See LICENSE and gpl-3.0.txt for details.
*/

#include "grib_api_internal.h"


grib_concept_value* grib_concept_value_new(grib_context* c, const char* name,grib_concept_condition* conditions)
{
	grib_concept_value* v = grib_context_malloc_clear_persistent(c,sizeof(grib_concept_value));
	
	v->name = grib_context_strdup_persistent(c,name);
	v->conditions = conditions;
	return v;
}

void grib_concept_value_delete(grib_context* c,grib_concept_value* v)
{
	grib_concept_condition* e = v->conditions;
	while(e)
	{
		grib_concept_condition* n = e->next;
		grib_concept_condition_delete(c,e);
		e = n;
	}
	grib_context_free_persistent(c,v->name);
	grib_context_free_persistent(c,v);
}

grib_concept_condition* grib_concept_condition_new(grib_context* c,const char* name,grib_expression* expression)
{
	grib_concept_condition* v = grib_context_malloc_clear_persistent(c,sizeof(grib_concept_condition));
	v->name = grib_context_strdup_persistent(c,name);
	v->expression = expression;
	return v;
}

void grib_concept_condition_delete(grib_context* c,grib_concept_condition* v)
{
	grib_expression_free(c,v->expression);
	grib_context_free_persistent(c,v->name);
	grib_context_free_persistent(c,v);
}