Main Page | Modules | Data Structures | File List | Data Fields | Globals | Related Pages

models.c

Go to the documentation of this file.
00001 /* ---------------------------------------------------------------------------- 00002 @COPYRIGHT : 00003 Copyright 1993,1994,1995 David MacDonald, 00004 McConnell Brain Imaging Centre, 00005 Montreal Neurological Institute, McGill University. 00006 Permission to use, copy, modify, and distribute this 00007 software and its documentation for any purpose and without 00008 fee is hereby granted, provided that the above copyright 00009 notice appear in all copies. The author and McGill University 00010 make no representations about the suitability of this 00011 software for any purpose. It is provided "as is" without 00012 express or implied warranty. 00013 ---------------------------------------------------------------------------- */ 00014 00015 #include <volume_io/internal_volume_io.h> 00016 #include <bicpl/objects.h> 00017 00018 #ifndef lint 00019 static char rcsid[] = "$Header: /software/source//libraries/bicpl/Objects/models.c,v 1.10 2000/02/06 15:30:43 stever Exp $"; 00020 #endif 00021 00022 /* ----------------------------- MNI Header ----------------------------------- 00023 @NAME : initialize_model 00024 @INPUT : 00025 @OUTPUT : model 00026 @RETURNS : 00027 @DESCRIPTION: Initializes the model to be an empty list of objects. 00028 @METHOD : 00029 @GLOBALS : 00030 @CALLS : 00031 @CREATED : 1993 David MacDonald 00032 @MODIFIED : 00033 ---------------------------------------------------------------------------- */ 00034 00035 public void initialize_model( 00036 model_struct *model ) 00037 { 00038 model->filename = create_string( NULL ); 00039 model->n_objects = 0; 00040 model->extra_ptr = (void *) NULL; 00041 } 00042 00043 /* ----------------------------- MNI Header ----------------------------------- 00044 @NAME : delete_model 00045 @INPUT : model 00046 @OUTPUT : 00047 @RETURNS : 00048 @DESCRIPTION: Deletes the model. 00049 @METHOD : 00050 @GLOBALS : 00051 @CALLS : 00052 @CREATED : 1993 David MacDonald 00053 @MODIFIED : 00054 ---------------------------------------------------------------------------- */ 00055 00056 public void delete_model( 00057 model_struct *model ) 00058 { 00059 int i; 00060 00061 delete_string( model->filename ); 00062 00063 for_less( i, 0, model->n_objects ) 00064 delete_object( model->objects[i] ); 00065 00066 if( model->n_objects > 0 ) 00067 FREE( model->objects ); 00068 00069 if( model->extra_ptr != (void *) NULL ) 00070 FREE( model->extra_ptr ); 00071 } 00072 00073 /* ----------------------------- MNI Header ----------------------------------- 00074 @NAME : assign_model_extra_ptr 00075 @INPUT : model 00076 ptr 00077 @OUTPUT : 00078 @RETURNS : 00079 @DESCRIPTION: Assigns the general-purpose void pointer associated with a model. 00080 This is where application-specific data may be stored. 00081 @METHOD : 00082 @GLOBALS : 00083 @CALLS : 00084 @CREATED : 1993 David MacDonald 00085 @MODIFIED : 00086 ---------------------------------------------------------------------------- */ 00087 00088 public void assign_model_extra_ptr( 00089 model_struct *model, 00090 void *ptr ) 00091 { 00092 model->extra_ptr = ptr; 00093 } 00094 00095 /* ----------------------------- MNI Header ----------------------------------- 00096 @NAME : get_model_extra_ptr 00097 @INPUT : model 00098 @OUTPUT : 00099 @RETURNS : ptr 00100 @DESCRIPTION: Returns the general-purpose void pointer. 00101 @METHOD : 00102 @GLOBALS : 00103 @CALLS : 00104 @CREATED : 1993 David MacDonald 00105 @MODIFIED : 00106 ---------------------------------------------------------------------------- */ 00107 00108 public void *get_model_extra_ptr( 00109 model_struct *model ) 00110 { 00111 return( model->extra_ptr ); 00112 } 00113 00114 /* ----------------------------- MNI Header ----------------------------------- 00115 @NAME : add_object_to_list 00116 @INPUT : n_objects 00117 object_list 00118 new_object 00119 @OUTPUT : 00120 @RETURNS : 00121 @DESCRIPTION: Adds an object to a list of objects. 00122 @METHOD : 00123 @GLOBALS : 00124 @CALLS : 00125 @CREATED : 1993 David MacDonald 00126 @MODIFIED : 00127 ---------------------------------------------------------------------------- */ 00128 00129 public void add_object_to_list( 00130 int *n_objects, 00131 object_struct ***object_list, 00132 object_struct *new_object ) 00133 { 00134 ADD_ELEMENT_TO_ARRAY( *object_list, *n_objects, new_object, 1 ); 00135 } 00136 00137 /* ----------------------------- MNI Header ----------------------------------- 00138 @NAME : remove_object_from_list 00139 @INPUT : n_objects 00140 object_list 00141 obj_index 00142 @OUTPUT : 00143 @RETURNS : 00144 @DESCRIPTION: Removes the obj_index'th object from the list, sliding the 00145 remaining ones down. 00146 @METHOD : 00147 @GLOBALS : 00148 @CALLS : 00149 @CREATED : 1993 David MacDonald 00150 @MODIFIED : 00151 ---------------------------------------------------------------------------- */ 00152 00153 public void remove_object_from_list( 00154 int *n_objects, 00155 object_struct **object_list[], 00156 int obj_index ) 00157 { 00158 DELETE_ELEMENT_FROM_ARRAY( *object_list, *n_objects, obj_index, 1 ); 00159 } 00160 00161 /* ----------------------------- MNI Header ----------------------------------- 00162 @NAME : delete_object_list 00163 @INPUT : n_objects 00164 object_list 00165 @OUTPUT : 00166 @RETURNS : 00167 @DESCRIPTION: Deletes the list of objects. 00168 @METHOD : 00169 @GLOBALS : 00170 @CALLS : 00171 @CREATED : 1993 David MacDonald 00172 @MODIFIED : 00173 ---------------------------------------------------------------------------- */ 00174 00175 public void delete_object_list( 00176 int n_objects, 00177 object_struct *object_list[] ) 00178 { 00179 int i; 00180 00181 if( n_objects > 0 ) 00182 { 00183 for_less( i, 0, n_objects ) 00184 { 00185 delete_object( object_list[i] ); 00186 } 00187 00188 FREE( object_list ); 00189 } 00190 } 00191 00192 /* ----------------------------- MNI Header ----------------------------------- 00193 @NAME : find_object_index_in_model 00194 @INPUT : model 00195 object 00196 @OUTPUT : 00197 @RETURNS : index 00198 @DESCRIPTION: Finds the position of the object in the model. 00199 @METHOD : 00200 @GLOBALS : 00201 @CALLS : 00202 @CREATED : 1993 David MacDonald 00203 @MODIFIED : 00204 ---------------------------------------------------------------------------- */ 00205 00206 public int find_object_index_in_model( 00207 model_struct *model, 00208 object_struct *object ) 00209 { 00210 int obj_index; 00211 00212 for_less( obj_index, 0, model->n_objects ) 00213 { 00214 if( model->objects[obj_index] == object ) 00215 return( obj_index ); 00216 } 00217 00218 return( -1 ); 00219 } 00220 00221 /* ----------------------------- MNI Header ----------------------------------- 00222 @NAME : add_object_to_model 00223 @INPUT : model 00224 new_object 00225 @OUTPUT : 00226 @RETURNS : 00227 @DESCRIPTION: Adds an object to a model. 00228 @METHOD : 00229 @GLOBALS : 00230 @CALLS : 00231 @CREATED : 1993 David MacDonald 00232 @MODIFIED : 00233 ---------------------------------------------------------------------------- */ 00234 00235 public void add_object_to_model( 00236 model_struct *model, 00237 object_struct *new_object ) 00238 { 00239 add_object_to_list( &model->n_objects, &model->objects, new_object ); 00240 } 00241 00242 /* ----------------------------- MNI Header ----------------------------------- 00243 @NAME : insert_object_in_model 00244 @INPUT : model 00245 new_object 00246 obj_index 00247 @OUTPUT : 00248 @RETURNS : 00249 @DESCRIPTION: Inserts an object into a model at the specified location. 00250 @METHOD : 00251 @GLOBALS : 00252 @CALLS : 00253 @CREATED : 1993 David MacDonald 00254 @MODIFIED : 00255 ---------------------------------------------------------------------------- */ 00256 00257 public void insert_object_in_model( 00258 model_struct *model, 00259 object_struct *new_object, 00260 int obj_index ) 00261 { 00262 int i; 00263 00264 SET_ARRAY_SIZE( model->objects, model->n_objects, model->n_objects+1, 1 ); 00265 ++model->n_objects; 00266 00267 for( i = model->n_objects-1; i > obj_index; --i ) 00268 model->objects[i] = model->objects[i-1]; 00269 model->objects[obj_index] = new_object; 00270 } 00271 00272 /* ----------------------------- MNI Header ----------------------------------- 00273 @NAME : remove_ith_object_from_model 00274 @INPUT : model 00275 obj_index 00276 @OUTPUT : 00277 @RETURNS : 00278 @DESCRIPTION: Removes an object from a list, without deleting the object. 00279 @METHOD : 00280 @GLOBALS : 00281 @CALLS : 00282 @CREATED : 1993 David MacDonald 00283 @MODIFIED : 00284 ---------------------------------------------------------------------------- */ 00285 00286 public void remove_ith_object_from_model( 00287 model_struct *model, 00288 int obj_index ) 00289 { 00290 remove_object_from_list( &model->n_objects, &model->objects, obj_index ); 00291 } 00292 00293 /* ----------------------------- MNI Header ----------------------------------- 00294 @NAME : remove_object_from_model 00295 @INPUT : model 00296 object 00297 @OUTPUT : 00298 @RETURNS : 00299 @DESCRIPTION: Removes the object from the model. 00300 @METHOD : 00301 @GLOBALS : 00302 @CALLS : 00303 @CREATED : 1993 David MacDonald 00304 @MODIFIED : 00305 ---------------------------------------------------------------------------- */ 00306 00307 public void remove_object_from_model( 00308 model_struct *model, 00309 object_struct *object ) 00310 { 00311 remove_ith_object_from_model( model, 00312 find_object_index_in_model(model,object) ); 00313 }

Generated on Wed Jul 28 09:10:57 2004 for BICPL by doxygen 1.3.7