summaryrefslogblamecommitdiff
path: root/hw6/include/sceneIO_cache.inline.h
blob: b0ce0d50ee51ae028bc97400822c1d32c69ffc27 (plain) (tree)

































































                                                                                      
/******************************************************************/
/* This file is part of the homework assignments for CSCI-427/527 */
/* at The College of William & Mary and authored by Pieter Peers. */
/* No part of this file, whether altered or in original form, can */
/* be distributed or used outside the context of CSCI-427/527     */
/* without consent of either the College of William & Mary or     */
/* Pieter Peers.                                                  */
/******************************************************************/
#if defined(_SCENEIO_CACHE_H_) && !defined(_SCENEIO_CACHE_INLINE_H_)
#define _SCENEIO_CACHE_INLINE_H_

#include <string>
#include <memory>
#include <vector>

#include "errorMessage.h"

template<typename T>
std::shared_ptr<T> nodeCache<T>::get(const std::string& name) const
{
  // see if node exists
  auto ref_node = _cache.find(name);

  // return nullptr if not.
  if(ref_node == _cache.end()) return nullptr;

  // return node.
  else return ref_node->second;
}


template<typename T>
void nodeCache<T>::add(const std::string& name, const std::shared_ptr<T>& node)
{
  _cache[name] = node;
}

template<typename T>
std::vector<std::shared_ptr<T>> nodeCache<T>::unusedNodes(unsigned int maxCount) const
{
  std::vector<std::shared_ptr<T>> result;

  // check each node if unique
  for(auto itr=_cache.begin(); itr != _cache.end(); itr++)
    if(itr->second.use_count() <= maxCount)
      result.push_back(itr->second);

  // done.
  return result;
}


template<typename T>
std::vector<std::shared_ptr<T>> nodeCache<T>::allNodes(void) const
{
  std::vector<std::shared_ptr<T>> result;

  // check each node if unique
  for(auto itr=_cache.begin(); itr != _cache.end(); itr++)
      result.push_back(itr->second);

  // done.
  return result;
}

#endif /* _SCENEIO_CACHE_INLINE_H_ */