// genDElement - An abstract data element library
// Copyright (C) 2013-2026 Eric Bechet, Frederic Duboeuf
//
// See the LICENSE file for license information.
// Please report all bugs and problems to <bechet@cadxfem.org> or <duboeuf@outlook.com>.
//
// Initial design: Frederic Duboeuf (rev.1511)


#include "genDataManager.h"
#include "genData.h"

DataList::~DataList()
{
  for (int i=0; i<dataContainer.size(); ++i)
    delete dataContainer[i];
}

std::ostream & operator<<(std::ostream &os, const DataList &list)
{
  std::streamsize width = os.width();
  os.width(width); os <<"";
  os << "DataList \"" << list.getIndex() <<"\" size : " << list.size() << std::endl;
  for (int i=0; i<list.size(); ++i)
  {
    os.width(width+2);
    os << *(list.getData(i));
  }
  return os;
}



DataIdManager::~DataIdManager()
{
  clear();
}

DataList* DataIdManager::addToList(const std::string &s, genData* d)
{
  typename DataListContainer::const_iterator it;
  it = find(s);
  DataList* list;
  if (it==end())
  {
    list = new DataList(s);
    dataListContainer[s]=list;
  }
  else
    list = it->second;
  list->addData(d);
  return list;
}

void DataIdManager::clearList(const std::string &s)
{
  typename DataListContainer::iterator it;
  it = find(s);
  DataList* list;
  if (it!=end())
  {
    list = it->second;
    dataListContainer.erase(it);
    delete list;
  }
}

void DataIdManager::clear()
{
  DataList* list;
  typename DataListContainer::iterator it;
  for(it=dataListContainer.begin(); it!=dataListContainer.end(); ++it)
  {
    list = it->second;
    delete list;
  }
  dataListContainer.clear();
}

std::ostream & operator<<(std::ostream &os, const DataIdManager &dataIdManager)
{
  os << "Number of DataLists : " << dataIdManager.size() << std::endl;
  typename DataIdManager::DataListContainer::const_iterator it;
  for (it=dataIdManager.begin(); it!=dataIdManager.end(); ++it)
  {
    os.width(2);
    os << *(it->second);
  }
  os << "\n";
  return os;
}