File: auto_ptrcontainer.hpp

package info (click to toggle)
mariadb-10.0 10.0.16-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie-kfreebsd
  • size: 416,512 kB
  • sloc: cpp: 1,351,103; ansic: 803,086; perl: 59,621; pascal: 32,136; sh: 25,156; yacc: 14,897; xml: 5,194; sql: 4,651; cs: 4,647; makefile: 4,113; python: 2,526; ruby: 2,496; lex: 1,427; asm: 295; awk: 54; php: 22; sed: 16
file content (67 lines) | stat: -rw-r--r-- 2,196 bytes parent folder | download | duplicates (13)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67

// vim:sw=2:ai

/*
 * Copyright (C) 2010 DeNA Co.,Ltd.. All rights reserved.
 * See COPYRIGHT.txt for details.
 */

#ifndef DENA_AUTO_PTRCONTAINER_HPP
#define DENA_AUTO_PTRCONTAINER_HPP

namespace dena {

template <typename Tcnt>
struct auto_ptrcontainer {
  typedef Tcnt container_type;
  typedef typename container_type::value_type value_type;
  typedef typename container_type::pointer pointer;
  typedef typename container_type::reference reference;
  typedef typename container_type::const_reference const_reference;
  typedef typename container_type::size_type size_type;
  typedef typename container_type::difference_type difference_type;
  typedef typename container_type::iterator iterator;
  typedef typename container_type::const_iterator const_iterator;
  typedef typename container_type::reverse_iterator reverse_iterator;
  typedef typename container_type::const_reverse_iterator
    const_reverse_iterator;
  iterator begin() { return cnt.begin(); }
  const_iterator begin() const { return cnt.begin(); }
  iterator end() { return cnt.end(); }
  const_iterator end() const { return cnt.end(); }
  reverse_iterator rbegin() { return cnt.rbegin(); }
  reverse_iterator rend() { return cnt.rend(); }
  const_reverse_iterator rbegin() const { return cnt.rbegin(); }
  const_reverse_iterator rend() const { return cnt.rend(); }
  size_type size() const { return cnt.size(); }
  size_type max_size() const { return cnt.max_size(); }
  bool empty() const { return cnt.empty(); }
  reference front() { return cnt.front(); }
  const_reference front() const { cnt.front(); }
  reference back() { return cnt.back(); }
  const_reference back() const { cnt.back(); }
  void swap(auto_ptrcontainer& x) { cnt.swap(x.cnt); }
  ~auto_ptrcontainer() {
    for (iterator i = begin(); i != end(); ++i) {
      delete *i;
    }
  }
  template <typename Tap> void push_back_ptr(Tap& ap) {
    cnt.push_back(ap.get());
    ap.release();
  }
  void erase_ptr(iterator i) {
    delete *i;
    cnt.erase(i);
  }
  reference operator [](size_type n) { return cnt[n]; }
  const_reference operator [](size_type n) const { return cnt[n]; }
  void clear() { cnt.clear(); }
 private:
  Tcnt cnt;
};

};

#endif