Pepper_31_C++_interfaces
Main Page
Namespaces
Classes
Files
File List
File Members
extensions
optional.h
Go to the documentation of this file.
1
// Copyright (c) 2013 The Chromium Authors. All rights reserved.
2
// Use of this source code is governed by a BSD-style license that can be
3
// found in the LICENSE file.
4
5
#ifndef PPAPI_CPP_EXTENSIONS_OPTIONAL_H_
6
#define PPAPI_CPP_EXTENSIONS_OPTIONAL_H_
7
8
namespace
pp {
9
namespace
ext {
10
11
template
<
class
T>
12
class
Optional {
13
public
:
14
Optional
() : value_(NULL) {
15
}
16
// Takes ownership of |value|.
17
explicit
Optional
(
T
* value) : value_(value) {
18
}
19
Optional
(
const
T
& value) : value_(new
T
(value)) {
20
}
21
Optional
(
const
Optional<T>
& other)
22
: value_(other.value_ ? new
T
(*other.value_) : NULL) {
23
}
24
25
~Optional
() {
26
Reset
();
27
}
28
29
Optional<T>
&
operator=
(
const
T
& other) {
30
if
(value_ == &other)
31
return
*
this
;
32
33
Reset
();
34
value_ =
new
T
(other);
35
36
return
*
this
;
37
}
38
39
Optional<T>
&
operator=
(
const
Optional<T>
& other) {
40
if
(value_ == other.value_)
41
return
*
this
;
42
43
Reset
();
44
if
(other.value_)
45
value_ =
new
T
(*other.value_);
46
47
return
*
this
;
48
}
49
50
bool
IsSet
()
const
{
51
return
!!value_;
52
}
53
54
T
*
Get
()
const
{
55
return
value_;
56
}
57
58
// Should only be used when IsSet() is true.
59
T
&
operator*
()
const
{
60
return
*value_;
61
}
62
63
// Should only be used when IsSet() is true.
64
T
*
operator->
()
const
{
65
PP_DCHECK
(value_);
66
return
value_;
67
}
68
69
// Takes ownership of |value|.
70
void
Set
(
T
* value) {
71
if
(value == value_)
72
return
;
73
74
Reset
();
75
*value_ = value;
76
}
77
78
void
Reset
() {
79
T
* value = value_;
80
value_ = NULL;
81
delete
value;
82
}
83
84
void
Swap
(
Optional<T>
* other) {
85
T
* temp = value_;
86
value_ = other->value_;
87
other->value_ = temp;
88
}
89
90
private
:
91
T
* value_;
92
};
93
94
}
// namespace ext
95
}
// namespace pp
96
97
#endif // PPAPI_CPP_EXTENSIONS_OPTIONAL_H_
pp::ext::Optional::Optional
Optional()
Definition:
optional.h:14
pp::ext::Optional::Set
void Set(T *value)
Definition:
optional.h:70
PP_DCHECK
#define PP_DCHECK(a)
Definition:
logging.h:16
pp::ext::Optional::operator*
T & operator*() const
Definition:
optional.h:59
pp::ext::Optional::IsSet
bool IsSet() const
Definition:
optional.h:50
pp::ext::Optional::Swap
void Swap(Optional< T > *other)
Definition:
optional.h:84
pp::ext::Optional::Optional
Optional(const Optional< T > &other)
Definition:
optional.h:21
pp::ext::Optional::operator->
T * operator->() const
Definition:
optional.h:64
pp::ext::Optional::Optional
Optional(T *value)
Definition:
optional.h:17
pp::ext::Optional::Optional
Optional(const T &value)
Definition:
optional.h:19
pp::ext::Optional::operator=
Optional< T > & operator=(const T &other)
Definition:
optional.h:29
pp::ext::Optional::Reset
void Reset()
Definition:
optional.h:78
pp::ext::Optional::Get
T * Get() const
Definition:
optional.h:54
pp::ext::Optional::operator=
Optional< T > & operator=(const Optional< T > &other)
Definition:
optional.h:39
T
pp::ext::Optional::~Optional
~Optional()
Definition:
optional.h:25
pp::ext::Optional
Definition:
alarms_dev.h:25
Generated on Wed May 4 2016 11:31:16 for Pepper_31_C++_interfaces by
1.8.6