#include "Node.h"

#include <stdio.h>

oop ListNode::empty(void)
{
  return new ListNode();
}

oop ListNode::with(oop anObject)
{
  oop list= new ListNode();
  list->add(anObject);
  return list;
}

oop ListNode::with(oop a, oop b)
{
  oop list= new ListNode();
  list->add(a);
  list->add(b);
  return list;
}

oop ListNode::with(oop a, oop b, oop c)
{
  oop list= new ListNode();
  list->add(a);
  list->add(b);
  list->add(c);
  return list;
}

oop ListNode::with(oop a, oop b, oop c, oop d)
{
  oop list= new ListNode();
  list->add(a);
  list->add(b);
  list->add(c);
  list->add(d);
  return list;
}

oop ListNode::print(void)
{
  oop s= (new String)->writeStream();
  printOnIndent(s, 0);
  fprintf(stderr, "%s\n", s->contents()->cString());
  return this;
}

oop ListNode::printOnIndent(oop stream, int indent)
{
  int i, j= size();
  stream->space(indent * 2)->format("%s(%d)\n", _debugName(), j);
  for (i= 0;  i < j;  ++i)
    {
      oop elt= at(i);
      if (elt->isNode())
	elt->printOnIndent(stream, indent + 1);
      else
	stream
	  ->space((indent + 1) * 2)
	  ->print(elt)
	  ->nl();
    }
  return this;
}
