#ifndef ZNODE_VECTOR_H
#define ZNODE_VECTOR_H

#include <vector>



//using znode_vector  = std::vector<zplain_node*>;
template<typename T>
class znode_vector : public std::vector<T*>
{

public:

  // FIX! implement this!
  // why delete??
  znode_vector() = default;
  znode_vector(const znode_vector&) = delete;
  znode_vector& operator=(const znode_vector&) = delete;


  virtual ~znode_vector()
  {

  }

  znode_vector* clone() const
  {
    znode_vector* new_list = new znode_vector;
    clone_into( *new_list );
    return new_list;
  }

  void clone_into( znode_vector& new_list ) const
  {
    new_list.clear();
    for(const auto entry : *this )
      new_list.push_back( entry->clone() );
  }

  void clone_from( const znode_vector& src_list )
  {
    this->clear();
    for(const auto entry : src_list )
      this->push_back( entry->clone() );
  }

};

#endif // ZNODE_VECTOR_H
