/* EffectSpecList.h */

#ifndef Included_EffectSpecList_h
#define Included_EffectSpecList_h

/* EffectSpecList module depends on */
/* MiscInfo.h */
/* Audit */
/* Debug */
/* Definitions */
/* Memory */
/* Array */
/* DelayEffectSpec */
/* NonlinearProcSpec */
/* FilterSpec */
/* AnalyzerSpec */

struct EffectSpecListRec;
typedef struct EffectSpecListRec EffectSpecListRec;

/* forwards */
struct DelayEffectRec;
struct NonlinProcSpecRec;
struct FilterSpecRec;
struct AnalyzerSpecRec;

/* effect types */
typedef enum
	{
		eDelayEffect EXECUTE(= 12431),
		eNLProcEffect,
		eFilterEffect,
		eAnalyzerEffect
	} EffectTypes;

/* create a new effect list */
EffectSpecListRec*	NewEffectSpecList(void);

/* dispose of an effect list */
void								DisposeEffectSpecList(EffectSpecListRec* EffectSpecList);

/* add a delay effect to the spec list */
MyBoolean						AddDelayToEffectSpecList(EffectSpecListRec* EffectSpecList,
											struct DelayEffectRec* DelaySpec);

/* add a nonlinear processor to the spec list */
MyBoolean						AddNLProcToEffectSpecList(EffectSpecListRec* EffectSpecList,
											struct NonlinProcSpecRec* NLProcSpec);

/* add a parallel filter array to the spec list */
MyBoolean						AddFilterToEffectSpecList(EffectSpecListRec* EffectSpecList,
											struct FilterSpecRec* FilterSpec);

/* add an analyzer to the spec list */
MyBoolean						AddAnalyzerToEffectSpecList(EffectSpecListRec* EffectSpecList,
											struct AnalyzerSpecRec* AnalyzerSpec);

/* find out how many effects are in the list */
long								GetEffectSpecListLength(EffectSpecListRec* EffectSpecList);

/* get the type of the specified effect */
EffectTypes					GetEffectSpecListElementType(EffectSpecListRec* EffectSpecList,
											long Index);

/* get the delay effect at the specified index */
struct DelayEffectRec*	GetDelayEffectFromEffectSpecList(
											EffectSpecListRec* EffectSpecList, long Index);

/* get the nonlinear processor from the specified index */
struct NonlinProcSpecRec*	GetNLProcEffectFromEffectSpecList(
											EffectSpecListRec* EffectSpecList, long Index);

/* get the filter from the specified index */
struct FilterSpecRec*	GetFilterEffectFromEffectSpecList(
											EffectSpecListRec* EffectSpecList, long Index);

/* get the analyzer from the specified index */
struct AnalyzerSpecRec*	GetAnalyzerEffectFromEffectSpecList(
											EffectSpecListRec* EffectSpecList, long Index);

#endif
