#include <stdio.h>
#include <string.h>
#include <demeter.h>

inline List Repetition::get_child() {
  return child;
}

inline List Repetition::set_child(List new_child) { 
  class List _old_child = child;
  child = new_child;
  return(_old_child);
}

inline char *Terminal::get_val() {
  return val;
}

inline char *Terminal::set_val(char *new_val) {
  char *_old_val = val;
  val = new_val;
  return(_old_val);
}

inline Ident::Ident(char *token = NULL) {
   if (token != NULL) {
      val = new char[strlen(token) + 1];
      strcpy(val, token);
   }      
   else {
      val = NULL;
   }
}

inline Ident::~Ident() {
   delete val;
}

inline Number::Number(int token) {
   val = (char *) new int;
   *((int *) val) = token;
}

inline Number::Number(char *token = NULL) {
   val = (char *) new int;
   if (token != NULL) {
      *((int *) val) = atoi(token);
   }
   else {
      *((int *) val) = 0;
   }
}

inline Number::~Number() {
   delete val;
}

inline int Number::get_val() {
  return *((int *) val);
}

inline int Number::set_val(int new_val) {
  int _old_val = *((int *) val);
  *((int *) val) = new_val;
  return(_old_val);
}

inline int Number::set_val(char *new_val) {
  int _old_val = *((int *) val);
  *((int *) val) = atoi(new_val);
  return(_old_val);
}

