OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2014 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 InterpolableValue_h | |
6 #define InterpolableValue_h | |
7 | |
8 #include "wtf/OwnPtr.h" | |
9 #include "wtf/PassOwnPtr.h" | |
10 | |
11 namespace WebCore { | |
12 | |
13 class InterpolableValue { | |
14 public: | |
15 virtual PassOwnPtr<InterpolableValue> interpolate(const InterpolableValue &o ther, double percentage) const = 0; | |
16 virtual PassOwnPtr<InterpolableValue> clone() const = 0; | |
17 | |
18 virtual bool isNumber() const { return false; } | |
19 virtual bool isBool() const { return false; } | |
20 virtual bool isList() const { return false; } | |
21 | |
22 virtual ~InterpolableValue() { } | |
23 }; | |
24 | |
25 class InterpolableNumber : public InterpolableValue { | |
26 public: | |
27 static PassOwnPtr<InterpolableNumber> create(double value) | |
28 { | |
29 return adoptPtr(new InterpolableNumber(value)); | |
30 } | |
31 | |
32 virtual PassOwnPtr<InterpolableValue> interpolate(const InterpolableValue &o ther, double progress) const OVERRIDE FINAL; | |
alancutter (OOO until 2018)
2014/02/26 00:42:29
The suite of blend() functions have the "other" be
shans
2014/02/26 21:24:20
Done.
| |
33 virtual PassOwnPtr<InterpolableValue> clone() const OVERRIDE FINAL { return create(m_value); } | |
34 virtual bool isNumber() const OVERRIDE FINAL { return true; } | |
35 double value() const { return m_value; } | |
36 private: | |
37 double m_value; | |
38 | |
39 InterpolableNumber(double value) | |
40 : m_value(value) | |
41 { } | |
42 | |
43 }; | |
44 | |
45 class InterpolableBool : public InterpolableValue { | |
46 public: | |
47 static PassOwnPtr<InterpolableBool> create(bool value) | |
48 { | |
49 return adoptPtr(new InterpolableBool(value)); | |
50 } | |
51 | |
52 virtual PassOwnPtr<InterpolableValue> interpolate(const InterpolableValue &o ther, double percentage) const OVERRIDE FINAL; | |
53 virtual PassOwnPtr<InterpolableValue> clone() const OVERRIDE FINAL { return create(m_value); } | |
54 virtual bool isBool() const OVERRIDE FINAL { return true; } | |
55 bool value() const { return m_value; } | |
56 private: | |
57 bool m_value; | |
58 | |
59 InterpolableBool(bool value) | |
60 : m_value(value) | |
61 { } | |
62 }; | |
63 | |
64 class InterpolableList : public InterpolableValue { | |
65 public: | |
66 static PassOwnPtr<InterpolableList> create(const InterpolableList &other) | |
67 { | |
68 return adoptPtr(new InterpolableList(other)); | |
69 } | |
70 | |
71 static PassOwnPtr<InterpolableList> create(size_t size) | |
72 { | |
73 return adoptPtr(new InterpolableList(size)); | |
74 } | |
75 | |
76 virtual PassOwnPtr<InterpolableValue> interpolate(const InterpolableValue &o ther, double percentage) const OVERRIDE FINAL; | |
77 virtual PassOwnPtr<InterpolableValue> clone() const OVERRIDE FINAL { return create(*this); } | |
78 virtual bool isList() const OVERRIDE FINAL { return true; } | |
79 void set(size_t position, PassOwnPtr<InterpolableValue> value) | |
80 { | |
81 ASSERT(position < m_size); | |
82 m_values.get()[position] = value; | |
83 } | |
84 const InterpolableValue* get(size_t position) const | |
85 { | |
86 ASSERT(position < m_size); | |
alancutter (OOO until 2018)
2014/02/26 00:42:29
I'm not so sure unchecked array access in release
shans
2014/02/26 21:24:20
InterpolableValues should only be constructed in a
| |
87 return m_values.get()[position].get(); | |
88 } | |
89 | |
90 private: | |
91 InterpolableList(size_t size) | |
92 : m_size(size) | |
93 { | |
94 m_values = adoptArrayPtr(new OwnPtr<InterpolableValue>[size]); | |
95 } | |
96 | |
97 InterpolableList(const InterpolableList& other) | |
98 : m_size(other.m_size) | |
99 { | |
100 m_values = adoptArrayPtr(new OwnPtr<InterpolableValue>[m_size]); | |
101 for (size_t i = 0; i < m_size; i++) | |
102 set(i, other.m_values.get()[i]->clone()); | |
103 } | |
104 | |
105 size_t m_size; | |
106 OwnPtr<OwnPtr<InterpolableValue>[]> m_values; | |
107 }; | |
108 | |
109 DEFINE_TYPE_CASTS(InterpolableNumber, InterpolableValue, value, value->isNumber( ), value.isNumber()); | |
110 DEFINE_TYPE_CASTS(InterpolableBool, InterpolableValue, value, value->isBool(), v alue.isBool()); | |
111 DEFINE_TYPE_CASTS(InterpolableList, InterpolableValue, value, value->isList(), v alue.isList()); | |
112 | |
113 } | |
114 | |
115 #endif | |
OLD | NEW |