/*
 * Project: MoleCuilder
 * Description: creates and alters molecular systems
 * Copyright (C)  2010-2012 University of Bonn. All rights reserved.
 * 
 *
 *   This file is part of MoleCuilder.
 *
 *    MoleCuilder is free software: you can redistribute it and/or modify
 *    it under the terms of the GNU General Public License as published by
 *    the Free Software Foundation, either version 2 of the License, or
 *    (at your option) any later version.
 *
 *    MoleCuilder is distributed in the hope that it will be useful,
 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *    GNU General Public License for more details.
 *
 *    You should have received a copy of the GNU General Public License
 *    along with MoleCuilder.  If not, see .
 */
/*
 * TremoloAtomInfoContainer.cpp
 *
 *  Created on: Dec 7, 2010
 *      Author: heber
 */
// include config.h
#ifdef HAVE_CONFIG_H
#include 
#endif
#include "CodePatterns/MemDebug.hpp"
#include "CodePatterns/toString.hpp"
#include 
#include "TremoloAtomInfoContainer.hpp"
TremoloAtomInfoContainer::TremoloAtomInfoContainer() :
  F("0"),
  stress("0"),
  imprData("-"),
  GroupMeasureTypeNo("0"),
  type("-"),
  extType("-"),
  name("-"),
  resName("-"),
  chainID("0"),
  resSeq("0"),
  occupancy("0"),
  tempFactor("0"),
  segID("0"),
  Charge("0"),
  charge("0"),
  GrpTypeNo("0"),
  torsion("-"),
  neighbors(std::vector(0, 5)),
  neighbors_processed(false)
{}
void TremoloAtomInfoContainer::set(TremoloKey::atomDataKey key, std::string value) {
  switch (key) {
    case TremoloKey::F :
      F = value;
      break;
    case TremoloKey::stress :
      stress = value;
     break;
    case TremoloKey::imprData :
      imprData = value;
      break;
    case TremoloKey::GroupMeasureTypeNo :
      GroupMeasureTypeNo = value;
      break;
    case TremoloKey::type :
      type = value;
      break;
    case TremoloKey::extType :
      extType = value;
      break;
    case TremoloKey::name :
      name = value;
      break;
    case TremoloKey::resName :
      resName = value;
      break;
    case TremoloKey::chainID :
      chainID = value;
      break;
    case TremoloKey::resSeq :
      resSeq = value;
      break;
    case TremoloKey::occupancy :
      occupancy = value;
      break;
    case TremoloKey::tempFactor :
      tempFactor = value;
      break;
    case TremoloKey::segID :
      segID = value;
      break;
    case TremoloKey::Charge :
      Charge = value;
      break;
    case TremoloKey::charge :
      charge = value;
      break;
    case TremoloKey::GrpTypeNo :
      GrpTypeNo = value;
      break;
    case TremoloKey::torsion :
      torsion = value;
      break;
    case TremoloKey::noKey :
      break;
    default :
      std::cout << "Unknown key: " << key << ", value: " << value << std::endl;
      break;
  }
}
std::string TremoloAtomInfoContainer::get(TremoloKey::atomDataKey key) const
{
  switch (key) {
    case TremoloKey::F :
      return F;
    case TremoloKey::stress :
      return stress;
    case TremoloKey::imprData :
      return imprData;
    case TremoloKey::GroupMeasureTypeNo :
      return GroupMeasureTypeNo;
    case TremoloKey::type :
      return type;
    case TremoloKey::extType :
      return extType;
    case TremoloKey::name :
      return name;
    case TremoloKey::resName :
      return resName;
    case TremoloKey::chainID :
      return chainID;
    case TremoloKey::resSeq :
      return resSeq;
    case TremoloKey::occupancy :
      return occupancy;
    case TremoloKey::tempFactor :
      return tempFactor;
    case TremoloKey::segID :
      return segID;
    case TremoloKey::Charge :
      return Charge;
    case TremoloKey::charge :
      return charge;
    case TremoloKey::GrpTypeNo :
      return GrpTypeNo;
    case TremoloKey::torsion :
      return torsion;
    case TremoloKey::noKey :
      return std::string("noKey"); // warning string
    default :
      std::cout << "Unknown key: " << key << std::endl;
      return "";
  }
}
std::ostream& operator<<(std::ostream& out, const TremoloAtomInfoContainer& info)
{
  out << info.get(TremoloKey::F) << "\t";
  out << info.get(TremoloKey::stress) << "\t";
  out << info.get(TremoloKey::imprData) << "\t";
  out << info.get(TremoloKey::GroupMeasureTypeNo) << "\t";
  out << info.get(TremoloKey::type) << "\t";
  out << info.get(TremoloKey::extType) << "\t";
  out << info.get(TremoloKey::name) << "\t";
  out << info.get(TremoloKey::resName) << "\t";
  out << info.get(TremoloKey::chainID) << "\t";
  out << info.get(TremoloKey::resSeq) << "\t";
  out << info.get(TremoloKey::occupancy) << "\t";
  out << info.get(TremoloKey::tempFactor) << "\t";
  out << info.get(TremoloKey::segID) << "\t";
  out << info.get(TremoloKey::Charge) << "\t";
  out << info.get(TremoloKey::charge) << "\t";
  out << info.get(TremoloKey::GrpTypeNo) << "\t";
  out << info.get(TremoloKey::torsion) << "\t";
  out << info.neighbors << "\t";
  out << info.neighbors_processed;
  return out;
}