// rpimpl_oplist.cpp
// Copyright (c) Menno Rubingh 2016.  Web: [http://rubinghsoftware.de]
// 
// MR Mar 2016.
//
// Definition of ParsedOperationList member functions.
//


#include "rpimpl_oplist.h"  //ParsedOperationList.

#include "rpimpl_ex.h"      //SContext, Ex.

#include <assert.h>        
#include <stdio.h>        



void ParsedOperationList:: init( void )
{
	m_n = 0;
	for ( int k = 0; k < NMAX; k++ ) { m_arr[k] = NULL; }
}
void ParsedOperationList:: zap( void )
{
	for ( int k = 0; k < NMAX; k++ ) 
	{ 
		OperationBase const * p = m_arr[k];
		if ( p != NULL ) { delete p; }
	}
}


OperationBase const * ParsedOperationList:: getElem( int i ) const
{
	assert( BETWEEN_IE( 0, i, m_n ) );
	return m_arr[i];
}

void ParsedOperationList:: appendElem( 
	SContext const *        iCxt,
	OperationBase const *   iOp )
{
	if ( m_n >= NMAX ) { throw Ex( iCxt, "too many operations in expression" ); }
	m_arr[m_n] = iOp;
	m_n++;
}

void ParsedOperationList:: dump( FILE * oF ) const
{
	fprintf( oF, "OpList (n=%d) : ", m_n );
	for ( int k = 0; k < m_n; k++ ) 
	{ 
		m_arr[k]->print(oF);
		fprintf( oF, " " );
	}
	fprintf( oF, "\n" );
}