+++ /dev/null
-\r
-\r
-\r
-/*********************************************************************\r
- * (C) Copyright 1999 Albert Ludwigs University Freiburg\r
- * Institute of Computer Science\r
- *\r
- * All rights reserved. Use of this software is permitted for \r
- * non-commercial research purposes, and it may be copied only \r
- * for that use. All copies must include this copyright message.\r
- * This software is made available AS IS, and neither the authors\r
- * nor the Albert Ludwigs University Freiburg make any warranty\r
- * about the software or its performance. \r
- *********************************************************************/\r
-\r
-\r
-/*********************************************************************\r
- * File: memory.c\r
- * Description: Creation and Deletion functions for all data structures.\r
- *\r
- * Author: Joerg Hoffmann\r
- *\r
- *********************************************************************/ \r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-#include <string.h>\r
-#include "bb.h"\r
-#include "memory.h"\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-/**********************\r
- * CREATION FUNCTIONS *\r
- **********************/\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-/* parsing\r
- */\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-char *new_Token( int len )\r
-\r
-{\r
-\r
- char *tok = ( char * ) calloc( len, sizeof( char ) );\r
- CHECK_PTR(tok);\r
-\r
- return tok;\r
-\r
-}\r
-\r
-\r
-\r
-TokenList *new_TokenList( void )\r
-\r
-{\r
-\r
- TokenList *result = ( TokenList * ) calloc( 1, sizeof( TokenList ) );\r
- CHECK_PTR(result);\r
-\r
- result->item = NULL; \r
- result->next = NULL;\r
-\r
- return result;\r
-\r
-}\r
-\r
-\r
-\r
-FactList *new_FactList( void )\r
-\r
-{\r
-\r
- FactList *result = ( FactList * ) calloc( 1, sizeof( FactList ) );\r
- CHECK_PTR(result);\r
-\r
- result->item = NULL; \r
- result->next = NULL;\r
-\r
- return result;\r
-\r
-}\r
-\r
-\r
-\r
-PlNode *new_PlNode( Connective c )\r
-\r
-{\r
-\r
- PlNode *result = ( PlNode * ) calloc( 1, sizeof( PlNode ) );\r
- CHECK_PTR(result);\r
-\r
- result->connective = c;\r
- result->atom = NULL;\r
- result->sons = NULL;\r
- result->next = NULL;\r
-\r
- return result;\r
-\r
-}\r
-\r
-\r
-\r
-PlOperator *new_PlOperator( char *name )\r
-\r
-{\r
-\r
- PlOperator *result = ( PlOperator * ) calloc( 1, sizeof( PlOperator ) );\r
- CHECK_PTR(result);\r
-\r
- if ( name ) {\r
- result->name = new_Token(strlen(name)+1);\r
- CHECK_PTR(result->name);\r
- strcpy(result->name, name);\r
- } else {\r
- result->name = NULL;\r
- }\r
-\r
- result->params = NULL;\r
- result->preconds = NULL;\r
- result->effects = NULL;\r
- result->number_of_real_params = 0;\r
- result->next = NULL;\r
-\r
- return result;\r
-\r
-}\r
-\r
-\r
-\r
-PlOperator *new_axiom_op_list( void )\r
-\r
-{\r
-\r
- static int count;\r
- char *name;\r
- PlOperator *ret;\r
-\r
- /* WARNING: count should not exceed 999 \r
- */\r
- count++;\r
- if ( count == 10000 ) {\r
- printf("\ntoo many axioms! look into memory.c, line 157\n\n");\r
- exit( 1 );\r
- }\r
- name = new_Token(strlen(HIDDEN_STR)+strlen(AXIOM_STR)+4+1);\r
- sprintf(name, "%s%s%4d", HIDDEN_STR, AXIOM_STR, count);\r
-\r
- ret = new_PlOperator(name);\r
- free(name);\r
-\r
- return ret;\r
-\r
-}\r
-\r
-\r
-\r
-type_tree new_type_tree( char *name )\r
-\r
-{\r
-\r
- type_tree act_type;\r
- \r
- if (!name) {\r
- return NULL;\r
- }\r
-\r
- act_type = ( type_tree ) calloc( 1, sizeof( type_tree_elt ) );\r
- CHECK_PTR(act_type);\r
-\r
- act_type->name = new_Token( strlen( name ) + 1 );\r
- strcpy( act_type->name, name );\r
- act_type->sub_types = NULL;\r
-\r
- return act_type;\r
-\r
-}\r
-\r
-\r
-\r
-type_tree_list new_type_tree_list( char *name )\r
-\r
-{\r
-\r
- type_tree_list act_type_list;\r
- \r
- act_type_list = ( type_tree_list ) calloc( 1, sizeof( type_tree_list_elt ) );\r
- CHECK_PTR(act_type_list);\r
-\r
- if ( name ) {\r
- act_type_list->item = new_type_tree( name );\r
- } else {\r
- act_type_list->item = NULL;\r
- }\r
-\r
- act_type_list->next = NULL;\r
- \r
- return act_type_list;\r
-\r
-}\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-/* instantiation\r
- */\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-Operator *new_Operator( char *name, int norp )\r
-\r
-{\r
-\r
- int i;\r
-\r
- Operator *result = ( Operator * ) calloc( 1, sizeof( Operator ) );\r
- CHECK_PTR(result);\r
-\r
- if ( name ) {\r
- result->name = new_Token( strlen( name ) + 1 );\r
- CHECK_PTR( result->name );\r
- strcpy( result->name, name );\r
- } else {\r
- result->name = NULL;\r
- }\r
-\r
- result->num_vars = 0;\r
- result->number_of_real_params = norp;\r
-\r
- for ( i = 0; i < MAX_VARS; i++ ) {\r
- result->inst_table[i] = -1;\r
- }\r
-\r
- result->num_preconds = 0;\r
- result->num_adds = 0;\r
- result->num_dels = 0;\r
-\r
- result->out = FALSE;\r
-\r
- return result;\r
-\r
-}\r
-\r
-\r
-\r
-ActionTemplate *new_ActionTemplate( int op )\r
-\r
-{\r
-\r
- ActionTemplate *result = ( ActionTemplate * ) calloc( 1, sizeof( ActionTemplate ) );\r
- CHECK_PTR(result);\r
-\r
- result->op = op;\r
-\r
- result->next = NULL;\r
-\r
- return result;\r
-\r
-}\r
-\r
- \r
-\r
-Action *new_Action( int op )\r
-\r
-{\r
-\r
- Action *result = ( Action * ) calloc( 1, sizeof( Action ) );\r
- CHECK_PTR(result);\r
-\r
- result->op = op;\r
-\r
- result->num_preconds = 0;\r
- result->num_adds = 0;\r
- result->num_dels = 0;\r
-\r
- result->next = NULL;\r
-\r
- return result;\r
-\r
-}\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-/* graph\r
- */\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-BitVector *new_BitVector( int length )\r
-\r
-{\r
-\r
- BitVector *result = ( BitVector * ) calloc( length, sizeof( BitVector ) );\r
- CHECK_PTR(result);\r
-\r
- memset(result, 0, length);\r
-\r
- return result;\r
-\r
-}\r
-\r
-\r
-\r
-IntList *new_IntList( int i1 )\r
-\r
-{\r
-\r
- IntList *res = ( IntList * ) calloc( 1, sizeof( IntList ) );\r
- CHECK_PTR(res);\r
- \r
- res->i1 = i1;\r
- res->prev = NULL;\r
- res->next = NULL;\r
-\r
- return res;\r
-\r
-}\r
-\r
-\r
-\r
-IntPair *new_IntPair( int i1, int i2 )\r
-\r
-{\r
-\r
- IntPair *res = ( IntPair * ) calloc( 1, sizeof( IntPair ) );\r
- CHECK_PTR(res);\r
- \r
- res->i1 = i1;\r
- res->i2 = i2;\r
- res->prev = NULL;\r
- res->next = NULL;\r
-\r
- return res;\r
-\r
-}\r
-\r
-\r
-\r
-IntBitVectorList *new_IntBitVectorList( int i1, BitVector *bv, int num_bit )\r
-\r
-{\r
-\r
- int i;\r
-\r
- IntBitVectorList *res = ( IntBitVectorList * ) calloc( 1, sizeof( IntBitVectorList ) );\r
- CHECK_PTR(res);\r
- \r
- res->i1 = i1;\r
-\r
- res->bv = new_BitVector( num_bit );\r
- for ( i = 0; i < num_bit; i++ ) {\r
- res->bv[i] = bv[i];\r
- }\r
-\r
- res->next = NULL;\r
-\r
- return res;\r
-\r
-}\r
-\r
-\r
-\r
-FtLevelInfo *new_FtLevelInfo( void )\r
-\r
-{\r
-\r
- FtLevelInfo *tmp = ( FtLevelInfo * ) calloc ( 1, sizeof( FtLevelInfo ) );\r
- CHECK_PTR( tmp );\r
-\r
- /* adders stored as list to facilitate dynamic growth\r
- */\r
- tmp->A = NULL;\r
- tmp->end_A = NULL;\r
-\r
- /* op bit vectors:\r
- *\r
- * bit_A,\r
- * bit_A_exclusives\r
- *\r
- * allocated in main code for better readability\r
- */\r
-\r
- /* it is precond of these at this point\r
- */\r
- tmp->P = NULL;\r
-\r
- tmp->bit_exclusives = new_BitVector( gnum_ft_bit );\r
-\r
- tmp->status = 0;\r
-\r
- tmp->is_goal = FALSE;\r
- tmp->num_A = 0;\r
-\r
- tmp->rplan_frac = 0;\r
-\r
- return tmp;\r
-\r
-}\r
-\r
-\r
-\r
-OpLevelInfo *new_OpLevelInfo( void )\r
-\r
-{\r
-\r
- OpLevelInfo *tmp = ( OpLevelInfo * ) calloc ( 1, sizeof( OpLevelInfo ) );\r
- CHECK_PTR( tmp );\r
-\r
- tmp->bit_P_exclusives = new_BitVector( gnum_ft_bit );\r
- /* op bit vector:\r
- *\r
- * exclusives\r
- *\r
- * allocated in main code as size not known at time of \r
- * info allocation\r
- */\r
-\r
- tmp->status = 0;\r
-\r
- tmp->is_in_rplan = FALSE;\r
-\r
- tmp->losspos = -1;\r
- tmp->lossneg = -1;\r
-\r
- tmp->rplan_frac = 0;\r
- tmp->forced_in = FALSE;\r
-\r
- return tmp;\r
-\r
-}\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-StateHashEntry *new_StateHashEntry( void )\r
-\r
-{\r
-\r
- StateHashEntry *result = ( StateHashEntry * ) calloc( 1, sizeof( StateHashEntry ) );\r
- CHECK_PTR(result);\r
-\r
- result->next = NULL;\r
-\r
- return result;\r
-\r
-}\r
-\r
- \r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-/**********************\r
- * DELETION FUNCTIONS *\r
- **********************/\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-void free_TokenList( TokenList *source )\r
-\r
-{\r
-\r
- if ( source ) {\r
- free_TokenList( source->next );\r
- if ( source->item ) {\r
- free( source->item );\r
- }\r
- free( source );\r
- }\r
-\r
-}\r
-\r
-\r
-\r
-void free_FactList( FactList *source )\r
-\r
-{\r
-\r
- if ( source ) {\r
- free_FactList( source->next );\r
- free_TokenList( source->item );\r
- free( source );\r
- }\r
-\r
-}\r
-\r
-\r
-\r
-void free_PlNode( PlNode *node )\r
-\r
-{\r
- \r
- if ( node ) {\r
- free_PlNode( node->sons );\r
- free_PlNode( node->next );\r
- free_TokenList( node->atom );\r
- free( node );\r
- }\r
-\r
-}\r
-\r
-\r
-\r
-void free_PlOperator( PlOperator *o )\r
-\r
-{\r
-\r
- if ( o ) {\r
- free_PlOperator( o->next );\r
-\r
- if ( o->name ) {\r
- free( o->name );\r
- }\r
- \r
- free_FactList( o->params );\r
- free_PlNode( o->preconds );\r
- free_PlNode( o->effects );\r
-\r
- free( o );\r
- }\r
-\r
-}\r
-\r
-\r
-\r
-void free_Operator( Operator *o )\r
-\r
-{\r
-\r
- if ( o ) {\r
-\r
- if ( o->name ) {\r
- free( o->name );\r
- }\r
-\r
- free( o );\r
- } \r
-\r
-}\r
-\r
-\r
-\r
-void free_single_ActionTemplate( ActionTemplate *t )\r
-\r
-{\r
-\r
- if ( t ) {\r
- free( t );\r
- }\r
-\r
-}\r
-\r
-\r
-\r
-void free_IntList( IntList *il )\r
-\r
-{\r
-\r
- if ( il ) {\r
- free_IntList( il->next );\r
- free( il );\r
- }\r
-\r
-}\r
-\r
-\r
-\r
-void free_IntPair( IntPair *ip )\r
-\r
-{\r
-\r
- if ( ip ) {\r
- free_IntPair( ip->next );\r
- free( ip );\r
- }\r
-\r
-}\r
-\r
-\r
-\r
-void free_IntBitVectorList( IntBitVectorList *ibvl )\r
-\r
-{\r
-\r
- if ( ibvl ) {\r
- free_IntBitVectorList( ibvl->next );\r
- if ( !ibvl->bv ) {\r
- /* REMOVE THIS, LATER, FOR EFFICIENCY (HA HA) -- bet my arse it won't happen anyway.\r
- */\r
- printf("\ntrying to free an ibvl with empty bv??\n\n");\r
- exit( 1 );\r
- }\r
- free( ibvl->bv );\r
- free( ibvl );\r
- }\r
-\r
-}\r