1 2 // vim:sw=2:ai 3 4 /* 5 * Copyright (C) 2010 DeNA Co.,Ltd.. All rights reserved. 6 * See COPYRIGHT.txt for details. 7 */ 8 9 #ifndef DENA_AUTO_PTRCONTAINER_HPP 10 #define DENA_AUTO_PTRCONTAINER_HPP 11 12 namespace dena { 13 14 template <typename Tcnt> 15 struct auto_ptrcontainer { 16 typedef Tcnt container_type; 17 typedef typename container_type::value_type value_type; 18 typedef typename container_type::pointer pointer; 19 typedef typename container_type::reference reference; 20 typedef typename container_type::const_reference const_reference; 21 typedef typename container_type::size_type size_type; 22 typedef typename container_type::difference_type difference_type; 23 typedef typename container_type::iterator iterator; 24 typedef typename container_type::const_iterator const_iterator; 25 typedef typename container_type::reverse_iterator reverse_iterator; 26 typedef typename container_type::const_reverse_iterator 27 const_reverse_iterator; begindena::auto_ptrcontainer28 iterator begin() { return cnt.begin(); } begindena::auto_ptrcontainer29 const_iterator begin() const { return cnt.begin(); } enddena::auto_ptrcontainer30 iterator end() { return cnt.end(); } enddena::auto_ptrcontainer31 const_iterator end() const { return cnt.end(); } rbegindena::auto_ptrcontainer32 reverse_iterator rbegin() { return cnt.rbegin(); } renddena::auto_ptrcontainer33 reverse_iterator rend() { return cnt.rend(); } rbegindena::auto_ptrcontainer34 const_reverse_iterator rbegin() const { return cnt.rbegin(); } renddena::auto_ptrcontainer35 const_reverse_iterator rend() const { return cnt.rend(); } sizedena::auto_ptrcontainer36 size_type size() const { return cnt.size(); } max_sizedena::auto_ptrcontainer37 size_type max_size() const { return cnt.max_size(); } emptydena::auto_ptrcontainer38 bool empty() const { return cnt.empty(); } frontdena::auto_ptrcontainer39 reference front() { return cnt.front(); } frontdena::auto_ptrcontainer40 const_reference front() const { cnt.front(); } backdena::auto_ptrcontainer41 reference back() { return cnt.back(); } backdena::auto_ptrcontainer42 const_reference back() const { cnt.back(); } swapdena::auto_ptrcontainer43 void swap(auto_ptrcontainer& x) { cnt.swap(x.cnt); } ~auto_ptrcontainerdena::auto_ptrcontainer44 ~auto_ptrcontainer() { 45 for (iterator i = begin(); i != end(); ++i) { 46 delete *i; 47 } 48 } push_back_ptrdena::auto_ptrcontainer49 template <typename Tap> void push_back_ptr(Tap& ap) { 50 cnt.push_back(ap.get()); 51 ap.release(); 52 } erase_ptrdena::auto_ptrcontainer53 void erase_ptr(iterator i) { 54 delete *i; 55 cnt.erase(i); 56 } operator []dena::auto_ptrcontainer57 reference operator [](size_type n) { return cnt[n]; } operator []dena::auto_ptrcontainer58 const_reference operator [](size_type n) const { return cnt[n]; } cleardena::auto_ptrcontainer59 void clear() { cnt.clear(); } 60 private: 61 Tcnt cnt; 62 }; 63 64 }; 65 66 #endif 67 68