view interps/rail/src/ActivationRecord.h @ 12500:e48c08805365 draft default tip

<b_jonas> ` learn \'The password of the month is Cthulhuquagdonic Mothraquagdonic Narwhalicorn.\' # https://logs.esolangs.org/libera-esolangs/2024-04.html#lKE Infinite craft
author HackEso <hackeso@esolangs.org>
date Wed, 01 May 2024 06:39:10 +0000
parents 859f9b4339e6
children
line wrap: on
line source

// ActivationRecord.h

#ifndef ACTIVATION_RECORD_H_RAIL_1
#define ACTIVATION_RECORD_H_RAIL_1

#include "Vec.h"
#include "Board.h"
#include "Dir.h"
#include "Closure.h"
#include "Binding.h"

class Action;
class MultiLexer;

class ActivationRecord
{
public:
  ActivationRecord();
  ActivationRecord(Board const & source);
  ActivationRecord(Closure const & source);
  ~ActivationRecord();

  ActivationRecord(ActivationRecord const & right);
  ActivationRecord & operator=(ActivationRecord const & right);

  void move(MultiLexer & multi);
  Action & getAction(MultiLexer & multi, std::list<Binding> & dataStack);

  std::map<std::string, Binding> const & getEnvironment(void) const;
  void bindVariable(std::string name, Binding var);
  Board const * getFunction(void) const;
  Vec getPosition(void) const;
  void setPosition(Vec newPosition);
  Dir::t getDirection(void) const;
  void setDirection(Dir::t newDirection);
private:
  void normalMove(void);
private:
  std::map<std::string, Binding> environment;
  Board const * function;
  Vec position;
  Dir::t direction;
};

#endif