Advertisement
Guest User

Untitled

a guest
May 18th, 2015
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.57 KB | None | 0 0
  1. #ifndef CONTAINER_H
  2. #define CONTAINER_H
  3.  
  4. // Container.h
  5. //
  6. // UE Algorithmen und Datenstrukturen - SS 2015 Universitaet Wien
  7. // Container - Projekt
  8. // https://cewebs.cs.univie.ac.at/ADS/ss15/
  9.  
  10. #include <iostream>
  11. #include <functional>
  12.  
  13. enum Order { dontcare, ascending, descending };
  14.  
  15. class ContainerException : public std::exception {
  16. public:
  17.     virtual const char* what() const noexcept override = 0;
  18. };
  19.  
  20. template <typename E>
  21. class Container {
  22. public:
  23.     Container& operator=(const Container&) = delete;
  24.     Container(const Container&) = delete;
  25.     Container() = default;
  26.  
  27.     virtual ~Container() { }
  28.  
  29.     virtual void add(const E& e) { add(&e, 1); }
  30.     virtual void add(const E e[], size_t s) = 0;
  31.  
  32.     virtual void remove(const E& e) { remove(&e, 1); }
  33.     virtual void remove(const E e[], size_t s) = 0;
  34.  
  35.     virtual bool member(const E& e) const = 0;
  36.     virtual size_t size() const = 0;
  37.     virtual bool empty() const { return size() == 0; }
  38.  
  39.     virtual size_t apply(std::function<void(const E&)> f, Order order = dontcare) const = 0;
  40.  
  41.     virtual E min() const = 0;
  42.     virtual E max() const = 0;
  43.  
  44.     virtual std::ostream& print(std::ostream& o) const = 0;
  45. };
  46. template <typename E>
  47. inline std::ostream& operator<<(std::ostream& o, const Container<E>& c) { return c.print(o); }
  48.  
  49. template <typename E> inline size_t hashValue(const E& e) { return size_t(e); }
  50. template <typename E> inline double doubleValue(const E& e) { return double(e); }
  51. template <typename E> inline size_t ordinalValue(const E& e) { return size_t(e); }
  52. #endif //CONTAINER_H
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement