/* * Copyright (C) 2008 Apple Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_SVG_ANIMATION_SMIL_TIME_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_SVG_ANIMATION_SMIL_TIME_H_ #include <algorithm> #include <ostream> #include "base/containers/enum_set.h" #include "base/time/time.h" #include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h" #include "third_party/blink/renderer/platform/wtf/hash_traits.h" #include "third_party/blink/renderer/platform/wtf/math_extras.h" namespace blink { class SMILRepeatCount; struct SMILInterval; // SMILTime is used as both a time and time delta in the SMIL animation // code. It is a small wrapper around TimeDelta that adds two sentinel values // for SMIL concepts: "indefinite" and "unresolved". // // For ordering, the special values have the properties that: // // <finite SMILTime> < SMILTime::Indefinite() < SMILTime::Unresolved() // // SMILTime::Earliest() and SMILTime::Latest() are smallest and largest finite // time values respectively and sort accordingly. // // Addition and subtraction follow the semantics defined for computations of // active duration (https://www.w3.org/TR/SMIL3/smil-timing.html#q78). class SMILTime { … }; CORE_EXPORT std::ostream& operator<<(std::ostream& os, SMILTime time); // What generated a SMILTime. enum class SMILTimeOrigin { … }; SMILTimeOriginSet; class SMILTimeWithOrigin { … }; inline bool operator<(const SMILTimeWithOrigin& a, const SMILTimeWithOrigin& b) { … } // An interval of SMILTimes. // "...the begin time of the interval is included in the interval, but the end // time is excluded from the interval." // (https://www.w3.org/TR/SMIL3/smil-timing.html#q101) struct SMILInterval { … }; inline bool operator==(const SMILInterval& a, const SMILInterval& b) { … } inline bool operator!=(const SMILInterval& a, const SMILInterval& b) { … } } // namespace blink namespace WTF { template <> struct HashTraits<blink::SMILInterval> : GenericHashTraits<blink::SMILInterval> { … }; } // namespace WTF #endif // THIRD_PARTY_BLINK_RENDERER_CORE_SVG_ANIMATION_SMIL_TIME_H_