blob: 94c6466f25380ebe9adc029278da397d1cc2c617 [file] [log] [blame]
/*
* File Name: valid.c
* Purpose: Determines the validity for both index key and non-key
* attributes.
*
* 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 definition */
#include "dataManagement.h" /* for primitive type definitions */
#include "dataObject.h" /* for DataAttribute definition */
#include "errorMessage.h" /* for errorMessage() definition */
#include "indexKey.h" /* for IndexKey definition */
/*
*
* Name: validIndexKey
* Input: index key, A
* Output: flag indicating validity
* Return: TRUE or FALSE
* Description: Returns boolean value indicating if the input index key is
* valid, i.e., the lower point is lower than the upper point,
* etc.
* Calls: errorMessage()
* System:
* Author: M.L.Rivas
*
* Copyright 1999, Atlantic Aerospace Electronics Corp.
*/
Boolean validIndexKey( IndexKey *key ) /* key to validate */
{ /* beginning of validIndexKey() */
Boolean flag = TRUE;
static Char name[] = "validIndexKey";
assert( key );
/*
* Check that lower point is less than upper point
*/
if ( key->lower.T >= key->upper.T ) {
errorMessage( "Lower T > Upper T", REPLACE );
errorMessage( name, PREPEND );
flag = FALSE;
}
else if ( key->lower.X >= key->upper.X ) {
errorMessage( "Lower X > Upper X", REPLACE );
errorMessage( name, PREPEND );
flag = FALSE;
}
else if ( key->lower.Y >= key->upper.Y ) {
errorMessage( "Lower Y > Upper Y", REPLACE );
errorMessage( name, PREPEND );
flag = FALSE;
}
else if ( key->lower.Z >= key->upper.Z ) {
errorMessage( "Lower Z > Upper Z", REPLACE );
errorMessage( name, PREPEND );
flag = FALSE;
}
return ( flag );
} /* end of validIndexKey() */
/*
*
* Name: validAttributes
* Input: list of attributes
* Output: flag indicating validity
* Return: TRUE or FALSE
* Description: Returns boolean value indicating if all attributes in list
* are valid. An attribute is valid if the code lies within
* the specified range and if key values lie within range and
* non-key values are not NULL.
* Calls: errorMessage()
* System:
* Author: M.L.Rivas
*
* Copyright 1999, Atlantic Aerospace Electronics Corp.
*/
Boolean validAttributes( DataAttribute *attributes ) /* attribute to validate */
{ /* beginning of validAttributes() */
DataAttribute *temp; /* looping variable for checking list of attributes */
static Char name[] = "validAttributes";
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 );
/*
* Loop through attribute list checking each attribute. An attribute is
* checked by first checking the code. If the code is in range, check for
* key or non-key value. If key, check float range. If non-key, check
* non-NULL.
*/
for ( temp = attributes; temp != NULL; temp = temp->next ) {
/*
* check for bad attribute code
*/
if ( temp->code < MIN_ATTRIBUTE_CODE ||
temp->code > MAX_ATTRIBUTE_CODE ) {
errorMessage( "invalid attribute code", REPLACE );
errorMessage( name, PREPEND );
return ( FALSE );
}
else {
if ( temp->code >= MIN_ATTRIBUTE_CODE &&
temp->code < NUM_OF_KEY_ATTRIBUTES ) {
/*
* Check key value for range
*/
if ( temp->attribute.value.key < MINIMUM_VALUE_OF_FLOAT ||
temp->attribute.value.key > MAXIMUM_VALUE_OF_FLOAT ) {
errorMessage( "key value out-of-range", REPLACE );
errorMessage( name, PREPEND );
return ( FALSE );
}
}
else {
/*
* Check non-key value for non-NULL
*/
if ( temp->attribute.value.nonKey == NULL ) {
errorMessage( "non-key value set to NULL", REPLACE );
errorMessage( name, PREPEND );
return ( FALSE );
}
}
}
}
return ( TRUE );
} /* end of validAttributes() */