blob: 37dee99749ed455d3988d6407c2fb71f6e887169 [file] [log] [blame]
/*
* Name: createDataObject
* Input: data object type
* Output: new data object
* Return: DataObject pointer, or
* NULL (if allocation failed)
* Description: Routine creates a data object of specified type by
* allocating appropriate amount of memory for number of
* non-key attributes. Note that memory is not allocated for
* the individual non-key character strings since their
* specific size is not known before hand. The values for the
* data object are also filled with default values which
* produces an index key of a hyper-point at the lowest
* possible position in the space and sets each non-key
* character string to NULL.
* Calls: errorMessage()
* System: assert()
* malloc()
* free()
* Author: M.L.Rivas
*
* Revision History:
* Date Name Revision
* ------- --------------- ------------------------------
* 24May99 Matthew Rivas Created
*
* Copyright 1999, Atlantic Aerospace Electronics Corp.
*/
#include <assert.h> /* for assert() */
#include <stdlib.h> /* for NULL and malloc() */
#include "dataManagement.h" /* for primitive data types */
#include "dataObject.h" /* for DataObject definition */
#include "errorMessage.h" /* for errorMessage() definition */
DataObject * createDataObject( DataObjectType dataObjectType )
{ /* beginning of createDataObject() */
Int i; /* looping index for attributes */
Int numberOfAttributes; /* number of attribute by type */
DataObject * dataObject; /* data object to create */
static Char name[] = "createDataObject";
assert( !(dataObjectType != SMALL && \
dataObjectType != MEDIUM && \
dataObjectType != LARGE ) );
assert( MIN_ATTRIBUTE_CODE < NUM_OF_KEY_ATTRIBUTES );
assert( MIN_ATTRIBUTE_CODE < MAX_ATTRIBUTE_CODE );
assert( MAX_ATTRIBUTE_CODE < NUM_OF_LARGE_ATTRIBUTES );
assert( NUM_OF_KEY_ATTRIBUTES < NUM_OF_SMALL_ATTRIBUTES );
assert( NUM_OF_KEY_ATTRIBUTES < NUM_OF_MEDIUM_ATTRIBUTES );
assert( NUM_OF_KEY_ATTRIBUTES < NUM_OF_LARGE_ATTRIBUTES );
/*
* Create the data object
*/
dataObject = (DataObject *)malloc( sizeof( DataObject ) );
if ( dataObject == NULL ) {
/*
* Done: memory allocation error
*/
errorMessage( "memory allocation failure", REPLACE );
errorMessage( name, PREPEND );
return ( NULL );
} /* end if ( dataObject == NULL ) */
/*
* Determine number of attributes based on type input
*/
if ( dataObjectType == SMALL ) {
dataObject->type = SMALL;
numberOfAttributes = NUM_OF_SMALL_ATTRIBUTES;
} /* end if ( dataObjectType == SMALL ) */
else if ( dataObjectType == MEDIUM ) {
dataObject->type = MEDIUM;
numberOfAttributes = NUM_OF_MEDIUM_ATTRIBUTES;
} /* end if ( dataObjectType == MEDIUM ) */
else if ( dataObjectType == LARGE ) {
dataObject->type = LARGE;
numberOfAttributes = NUM_OF_LARGE_ATTRIBUTES;
} /* end if ( dataObjectType == LARGE ) */
else {
errorMessage( "invalid object type to create", REPLACE );
errorMessage( name, PREPEND );
free( dataObject );
/*
* Done: data object type error
*/
return ( NULL );
} /* end else */
/*
* Allocate memory for attributes
*/
dataObject->attributes =
(DataObjectAttribute *)malloc( numberOfAttributes *
sizeof( DataObjectAttribute ) );
if ( dataObject->attributes == NULL ) {
/*
* Done: memory allocation error
*/
errorMessage( "memory allocation failure", REPLACE );
errorMessage( name, PREPEND );
free( dataObject );
return ( NULL );
} /* end if ( dataObject->attributes == NULL ) */
/*
* Assign implausible initial key values
*/
for ( i = MIN_ATTRIBUTE_CODE; i < NUM_OF_KEY_ATTRIBUTES; i++ ) {
dataObject->attributes[ i ].value.key = MINIMUM_VALUE_OF_FLOAT;
} /* end loop for i */
/*
* Assign default non-key values
*/
for ( i = NUM_OF_KEY_ATTRIBUTES; i < numberOfAttributes; i++ ) {
dataObject->attributes[ i ].value.nonKey = NULL;
} /* end loop for i */
return ( dataObject );
} /* end of createDataObject() */