/*****************************************************************************
* File: A_PAA_object.c
*
* Object: probe_assignment (PAA)
* Subsystem: autosampler
* Domain: A
* Repository: as2.ooa
*
* Notice:
* (C) Copyright 1999, 2000 ROX Software, Inc.
* All rights reserved.
*
* Model Compiler: MC3020 V1.3.0
*
* Warnings:
* !!! THIS IS AN AUTO-GENERATED FILE. PLEASE DO NOT EDIT. !!!
****************************************************************************/
#include "A_objects.h"
#include "A_PAA_object.h"
#include "A_ROW_object.h"
#include "A_SP_object.h"
/*****************************************************************************
* Statically allocate space for the instance population for this object.
* Allocate space for the object and its attributes.
* Depending on the collection scheme, allocate containoids (collection
* nodes) for gathering instances into free and active extents.
****************************************************************************/
static A_PAA_s A_PAA_ObjectPool_s[ A_PAA_MAX_EXTENT_SIZE ];
static Escher_ObjectSet_s A_PAA_ActiveExtent_s; /* set container */
Escher_ObjectSet_s * pG_A_PAA_extent;
static Escher_ObjectSet_s * p_A_PAA_inanimate;
/*****************************************************************************
* Initialize object factory services.
****************************************************************************/
void
A_PAA_FactoryInit()
{
unsigned int i;
Escher_ObjectSet_s s;
Escher_InitSet( &s );
/* Initialize object instance storage free pool (inanimate list)
* by linking the containoids into a linear, null-terminated,
* singly linked list. */
for ( i = 0; i < A_PAA_MAX_EXTENT_SIZE; i++ )
{
Escher_SetInsertElement( &s, &A_PAA_ObjectPool_s[ i ] );
}
p_A_PAA_inanimate = s.next; /* free list head */
/* Initialize object class extent (animate list) to empty. */
Escher_InitSet( &A_PAA_ActiveExtent_s );
pG_A_PAA_extent = &A_PAA_ActiveExtent_s;
}
/*****************************************************************************
* Object Creation Accessor
****************************************************************************/
A_PAA_s *
A_PAA_Create()
{
Escher_ObjectSet_s * node;
A_PAA_s * self;
/* Check if object pool is empty. */
if ( !p_A_PAA_inanimate ) {
UserObjectPoolEmptyCallout( "as2", "probe_assignment" );
return (A_PAA_s *) 0;
}
/* Acquire instance storage from object free pool. */
node = p_A_PAA_inanimate;
p_A_PAA_inanimate = p_A_PAA_inanimate->next;
self = (A_PAA_s *) node->object;
/* Initialize application analysis object attributes. */
self->m_radius = 0;
self->m_probe_ID = 0;
/* Initialize relationship storage */
self->mc_ROW_R2 = 0;
self->mc_SP_R2 = 0;
/* Insert instance into active extent (animate). */
node->next = pG_A_PAA_extent->next;
pG_A_PAA_extent->next = node;
return self;
}
/*****************************************************************************
* Object Deletion Accessor
****************************************************************************/
void
A_PAA_Delete( A_PAA_s * self )
{
Escher_ObjectSet_s * slot;
if ( !self )
{
return;
}
/* Remove instance from object extent. */
slot = Escher_SetRemoveNode( pG_A_PAA_extent, self );
/* Release relationship storage */
self->mc_ROW_R2 = 0;
self->mc_SP_R2 = 0;
/* Reset identifying attribute(s) to system default values */
self->m_radius = 0;
self->m_probe_ID = 0;
/* Release instance storage back to object free pool. */
slot->next = p_A_PAA_inanimate;
p_A_PAA_inanimate = slot;
}
/*****************************************************************************
* RELATE ROW TO SP ACROSS R2 USING PAA
****************************************************************************/
void
A_PAA_R2_Link( A_ROW_s * aone, A_SP_s * aoth, A_PAA_s * assr )
{
if ( !aone || !aoth || !assr )
{
return;
}
assr->m_radius = aone->m_radius;
assr->m_probe_ID = aoth->m_probe_ID;
/* Initialize optimized relationship storage extended attributes */
assr->mc_ROW_R2 = aone;
assr->mc_SP_R2 = aoth;
aone->mc_PAA_R2 = assr;
aoth->mc_PAA_R2 = assr;
}
/*****************************************************************************
* UNRELATE ROW FROM SP ACROSS R2 USING PAA
****************************************************************************/
void
A_PAA_R2_Unlink( A_ROW_s * aone, A_SP_s * aoth, A_PAA_s * assr )
{
if ( !aone || !aoth || !assr )
{
return;
}
assr->m_radius = 0;
assr->m_probe_ID = 0;
assr->mc_ROW_R2 = (A_ROW_s *)0;
assr->mc_SP_R2 = (A_SP_s *)0;
aone->mc_PAA_R2 = (A_PAA_s *)0;
aoth->mc_PAA_R2 = (A_PAA_s *)0;
}