// Copyright (c) 1999 Philip A. Hardin (pahardin@cs.utexas.edu)
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License v2 or later.


#include "dimentable.h"



/*=========================================================================*/
dimension *dimenTable::Add(coord value, dimenTable& symmDims) {
  dimenList::iterator dim;
  dimension	*symmDim= NULL,
  		*halfDim= NULL,
  		*qrtrDim= NULL;

  for(dim= dimens.begin(); dim != dimens.end(); dim++) {
    if ((*dim).value== value)
      return &(*dim);
    if ((*dim).value== -value)
      symmDim= &(*dim);
  }

  dimension newdim;

  if (symmDim) {
    newdim= dimension(value,dimension::symmetric,symmDim);
    return & *symmDims.dimens.insert(dimens.end(),newdim);
  }

  newdim= dimension(value,dimension::unique);
  return & *dimens.insert(dimens.end(),newdim);
}


/*-------------------------------------------------------------------------*/
void dimenTable::Empty() {
  // notice that the first, zero-valued dimension should not be erased!
  dimens.erase(++(dimens.begin()),dimens.end());
}


/*-------------------------------------------------------------------------*/
// The first "always-0" dimension isn't counted
void dimenTable::CountProps(int accums[]) const {
  dimenList::const_iterator dim= dimens.begin();

  dim++;
  for( ; dim != dimens.end(); dim++)
    accums[(*dim).prop]++;
}
