Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(892)

Side by Side Diff: Source/WebCore/platform/CalculationValue.h

Issue 10447005: Merge 116914 (Closed) Base URL: http://svn.webkit.org/repository/webkit/branches/chromium/1132/
Patch Set: Created 8 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « LayoutTests/css3/calc/transition-crash2-expected.txt ('k') | Source/WebCore/platform/Length.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2011 Google Inc. All rights reserved. 2 * Copyright (C) 2011 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 CalcAdd = '+', 44 CalcAdd = '+',
45 CalcSubtract = '-', 45 CalcSubtract = '-',
46 CalcMultiply = '*', 46 CalcMultiply = '*',
47 CalcDivide = '/' 47 CalcDivide = '/'
48 }; 48 };
49 49
50 enum CalculationPermittedValueRange { 50 enum CalculationPermittedValueRange {
51 CalculationRangeAll, 51 CalculationRangeAll,
52 CalculationRangeNonNegative 52 CalculationRangeNonNegative
53 }; 53 };
54
55 enum CalcExpressionNodeType {
56 CalcExpressionNodeUndefined,
57 CalcExpressionNodeNumber,
58 CalcExpressionNodeLength,
59 CalcExpressionNodeBinaryOperation
60 };
54 61
55 class CalcExpressionNode { 62 class CalcExpressionNode {
56 public: 63 public:
64 CalcExpressionNode()
65 : m_type(CalcExpressionNodeUndefined)
66 {
67 }
68
57 virtual ~CalcExpressionNode() 69 virtual ~CalcExpressionNode()
58 { 70 {
59 } 71 }
60 72
61 virtual float evaluate(float maxValue) const = 0; 73 virtual float evaluate(float maxValue) const = 0;
74 virtual bool operator==(const CalcExpressionNode&) const = 0;
75
76 CalcExpressionNodeType type() const { return m_type; }
77
78 protected:
79 CalcExpressionNodeType m_type;
62 }; 80 };
63 81
64 class CalculationValue : public RefCounted<CalculationValue> { 82 class CalculationValue : public RefCounted<CalculationValue> {
65 public: 83 public:
66 static PassRefPtr<CalculationValue> create(PassOwnPtr<CalcExpressionNode> va lue, CalculationPermittedValueRange); 84 static PassRefPtr<CalculationValue> create(PassOwnPtr<CalcExpressionNode> va lue, CalculationPermittedValueRange);
67 float evaluate(float maxValue) const; 85 float evaluate(float maxValue) const;
86
87 bool operator==(const CalculationValue& o) const
88 {
89 return m_value == o.m_value || *(m_value.get()) == *(o.m_value.get());
90 }
68 91
69 private: 92 private:
70 CalculationValue(PassOwnPtr<CalcExpressionNode> value, CalculationPermittedV alueRange range) 93 CalculationValue(PassOwnPtr<CalcExpressionNode> value, CalculationPermittedV alueRange range)
71 : m_value(value) 94 : m_value(value)
72 , m_isNonNegative(range == CalculationRangeNonNegative) 95 , m_isNonNegative(range == CalculationRangeNonNegative)
73 { 96 {
74 } 97 }
75 98
76 OwnPtr<CalcExpressionNode> m_value; 99 OwnPtr<CalcExpressionNode> m_value;
77 bool m_isNonNegative; 100 bool m_isNonNegative;
78 }; 101 };
79 102
80 class CalcExpressionNumber : public CalcExpressionNode { 103 class CalcExpressionNumber : public CalcExpressionNode {
81 public: 104 public:
82 explicit CalcExpressionNumber(float value) 105 explicit CalcExpressionNumber(float value)
83 : m_value(value) 106 : m_value(value)
84 { 107 {
108 m_type = CalcExpressionNodeNumber;
85 } 109 }
86 110
111 bool operator==(const CalcExpressionNumber& o) const
112 {
113 return m_value == o.m_value;
114 }
115
116 virtual bool operator==(const CalcExpressionNode& o) const
117 {
118 return type() == o.type() && *this == static_cast<const CalcExpressionNu mber&>(o);
119 }
120
87 virtual float evaluate(float) const 121 virtual float evaluate(float) const
88 { 122 {
89 return m_value; 123 return m_value;
90 } 124 }
91 125
92 private: 126 private:
93 float m_value; 127 float m_value;
94 }; 128 };
95 129
96 class CalcExpressionLength : public CalcExpressionNode { 130 class CalcExpressionLength : public CalcExpressionNode {
97 public: 131 public:
98 explicit CalcExpressionLength(Length length) 132 explicit CalcExpressionLength(Length length)
99 : m_length(length) 133 : m_length(length)
100 { 134 {
135 m_type = CalcExpressionNodeLength;
101 } 136 }
102 137
138 bool operator==(const CalcExpressionLength& o) const
139 {
140 return m_length == o.m_length;
141 }
142
143 virtual bool operator==(const CalcExpressionNode& o) const
144 {
145 return type() == o.type() && *this == static_cast<const CalcExpressionLe ngth&>(o);
146 }
147
103 virtual float evaluate(float maxValue) const 148 virtual float evaluate(float maxValue) const
104 { 149 {
105 return floatValueForLength(m_length, maxValue); 150 return floatValueForLength(m_length, maxValue);
106 } 151 }
107 152
108 private: 153 private:
109 Length m_length; 154 Length m_length;
110 }; 155 };
111 156
112 class CalcExpressionBinaryOperation : public CalcExpressionNode { 157 class CalcExpressionBinaryOperation : public CalcExpressionNode {
113 public: 158 public:
114 CalcExpressionBinaryOperation(PassOwnPtr<CalcExpressionNode> leftSide, PassO wnPtr<CalcExpressionNode> rightSide, CalcOperator op) 159 CalcExpressionBinaryOperation(PassOwnPtr<CalcExpressionNode> leftSide, PassO wnPtr<CalcExpressionNode> rightSide, CalcOperator op)
115 : m_leftSide(leftSide) 160 : m_leftSide(leftSide)
116 , m_rightSide(rightSide) 161 , m_rightSide(rightSide)
117 , m_operator(op) 162 , m_operator(op)
118 { 163 {
164 m_type = CalcExpressionNodeBinaryOperation;
119 } 165 }
120 166
167 bool operator==(const CalcExpressionBinaryOperation& o) const
168 {
169 return m_operator == o.m_operator && *m_leftSide == *o.m_leftSide && *m_ rightSide == *o.m_rightSide;
170 }
171
172 virtual bool operator==(const CalcExpressionNode& o) const
173 {
174 return type() == o.type() && *this == static_cast<const CalcExpressionBi naryOperation&>(o);
175 }
176
177
121 virtual float evaluate(float) const; 178 virtual float evaluate(float) const;
122 179
123 private: 180 private:
124 OwnPtr<CalcExpressionNode> m_leftSide; 181 OwnPtr<CalcExpressionNode> m_leftSide;
125 OwnPtr<CalcExpressionNode> m_rightSide; 182 OwnPtr<CalcExpressionNode> m_rightSide;
126 CalcOperator m_operator; 183 CalcOperator m_operator;
127 }; 184 };
128 185
129 } // namespace WebCore 186 } // namespace WebCore
130 187
131 #endif // CalculationValue_h 188 #endif // CalculationValue_h
OLDNEW
« no previous file with comments | « LayoutTests/css3/calc/transition-crash2-expected.txt ('k') | Source/WebCore/platform/Length.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698