//
// Copyright (c) 2009 Froduald Kabanza and the Université de Sherbrooke.
// Use of this software is permitted for non-commercial research purposes, and
// it may be copied or applied only for that use. All copies must include this
// copyright message.
// 
// This is a research prototype that has not gone through intensive tests and
// is delivered as is. It may still contain bugs. Froduald Kabanza and the
// Université de Sherbrooke disclaim any responsibility for damage that may be
// caused by using it.
//
// Please note that some files were inspired in part by the PDDL4J library:
// http://www.math-info.univ-paris5.fr/~pellier/software/software.php 
//
// Implementation: Simon Chamberland
// Project Manager: Froduald Kabanza
//

#include "stdafx.h"
#include "DefinedFormula.h"

using namespace planning;

DefinedFormula::~DefinedFormula()
{
  if (m_body != NULL)
    m_body->release(this);
}

void DefinedFormula::releaseMembers()
{
  assert(m_body != NULL);

  m_body->release(this);
  m_body = NULL;

  RootFormula::releaseMembers();
}

void DefinedFormula::setBody(const ILogicalExp* body)
{
  //
  // Body must be set after the actual instantiation since a derived predicate
  // typically refers to itself.
  //

  assert(m_body == NULL && body != NULL);

  m_body = body;
  m_body->acquire(this);
}
