summaryrefslogtreecommitdiffstats
path: root/media/webrtc/signaling/src/common/PtrVector.h
blob: 68c76047282cca0cfada8801938707eca681ba79 (plain)
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
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
 * You can obtain one at http://mozilla.org/MPL/2.0/. */

#ifndef PtrVector_h
#define PtrVector_h

#include <mozilla/Move.h>
#include <vector>

namespace mozilla
{

// Trivial wrapper class around a vector of ptrs.
// TODO: Remove this once our buildconfig allows us to put unique_ptr in stl
// containers, and just use std::vector<unique_ptr<T>> instead.
template <class T> class PtrVector
{
public:
  PtrVector() = default;
  PtrVector(const PtrVector&) = delete;
  PtrVector(PtrVector&& aOther)
    : values(Move(aOther.values))
  {}
  PtrVector& operator=(const PtrVector&) = delete;
  PtrVector& operator=(PtrVector&& aOther)
  {
    Swap(values, aOther.values);
    return *this;
  }

  ~PtrVector()
  {
    for (T* value : values) { delete value; }
  }

  std::vector<T*> values;
};

} // namespace mozilla

#endif // PtrVector_h