| Index: Source/core/animation/UnderlyingValue.h
|
| diff --git a/Source/core/animation/UnderlyingValue.h b/Source/core/animation/UnderlyingValue.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..6d76d8fd866865e678c19e11ff99d5ccd5d05c00
|
| --- /dev/null
|
| +++ b/Source/core/animation/UnderlyingValue.h
|
| @@ -0,0 +1,59 @@
|
| +// Copyright 2015 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#ifndef UnderlyingValue_h
|
| +#define UnderlyingValue_h
|
| +
|
| +#include "core/animation/InterpolationValue.h"
|
| +#include "wtf/Allocator.h"
|
| +
|
| +namespace blink {
|
| +
|
| +// Handles memory management of underlying InterpolationValues in applyStack()
|
| +// Ensures we perform copy on write if we are not the owner of an underlying InterpolationValue.
|
| +// This functions similar to a DataRef except on OwnPtr'd objects.
|
| +class UnderlyingValue {
|
| + STACK_ALLOCATED();
|
| +
|
| +public:
|
| + UnderlyingValue()
|
| + : m_valueOwner(nullptr)
|
| + , m_value(nullptr)
|
| + { }
|
| +
|
| + void set(const InterpolationValue* interpolationValue)
|
| + {
|
| + // By clearing m_valueOwner we will perform a copy before attempting to mutate m_value,
|
| + // thus upholding the const contract for this instance of interpolationValue despite the const_cast.
|
| + m_valueOwner.clear();
|
| + m_value = const_cast<InterpolationValue*>(interpolationValue);
|
| + }
|
| + void set(PassOwnPtr<InterpolationValue> interpolationValue)
|
| + {
|
| + m_valueOwner = interpolationValue;
|
| + m_value = m_valueOwner.get();
|
| + }
|
| + InterpolationComponentValue& mutableComponent()
|
| + {
|
| + ASSERT(m_value);
|
| + if (!m_valueOwner)
|
| + set(m_value->clone());
|
| + return m_value->mutableComponent();
|
| + }
|
| + const InterpolationValue* get() const { return m_value; }
|
| + operator bool() const { return m_value; }
|
| + const InterpolationValue* operator->() const
|
| + {
|
| + ASSERT(m_value);
|
| + return m_value;
|
| + }
|
| +
|
| +private:
|
| + OwnPtr<InterpolationValue> m_valueOwner;
|
| + InterpolationValue* m_value;
|
| +};
|
| +
|
| +} // namespace blink
|
| +
|
| +#endif // UnderlyingValue_h
|
|
|