#ifndef __eqll_h
#define __eqll_h


typedef enum states_e { ERR = 0, VAR, CONST, OPER, WHITE, PAREN, FUNC } states_t;
extern char *       statesStr[];

typedef struct eqNode_s {
  struct eqNode_s  * lhs;
  
  states_t         type;
  char *           detail;
  int              priority;
  
  struct eqNode_s *  rhs;
} eqNode_t; // equation linked list type

typedef struct eqLL_s {
  eqNode_t * Head, * Tail;
} eqLL_t;


void eqNode_SetType(     eqNode_t * this, states_t type);
void eqNode_SetDetail(   eqNode_t * this, char * detail) ;
void eqNode_SetPriority( eqNode_t * this, int  priority) ;
void eqNode_CreateNode(  eqNode_t ** this, states_t type, char * detail , int * priority) ;
void eqNode_AppendNode(  eqNode_t ** this, eqNode_t ** add);
void eqNode_PrependNode( eqNode_t ** this, eqNode_t ** add);
void eqNode_DeleteNode(  eqNode_t * this);
void eqNode_Show(        eqNode_t * this) ;
void eqNode_ClearPoints( eqNode_t * this );

void eqLL_Delete(        eqLL_t * this,  eqNode_t * that );
void eqLL_Show(          eqLL_t * this) ;
void eqLL_Append(        eqLL_t * this,  states_t type, char * detail , int * priority );
void eqLL_Insert(        eqLL_t * this,  states_t type, char * detail , int * priority );
void eqLL_Init(          eqLL_t * this );
void eqLL_Fini(          eqLL_t * this );


#endif
