// The generic PrintTo *must* come after the non-generic PrintTo otherwise it // will end up calling itself. void PrintTo(const TimingFunction& timingFunction, ::std::ostream* os) { switch (timingFunction.type()) { case TimingFunction::LinearFunction: { const LinearTimingFunction& linear = toLinearTimingFunction(timingFunction); PrintTo(linear, os); return; } case TimingFunction::CubicBezierFunction: { const CubicBezierTimingFunction& cubic = toCubicBezierTimingFunction(timingFunction); PrintTo(cubic, os); return; } case TimingFunction::StepsFunction: { const StepsTimingFunction& step = toStepsTimingFunction(timingFunction); PrintTo(step, os); return; } case TimingFunction::ChainedFunction: { const ChainedTimingFunction& chained = toChainedTimingFunction(timingFunction); PrintTo(chained, os); return; } default: ASSERT_NOT_REACHED(); } }
// The generic operator== *must* come after the // non-generic operator== otherwise it will end up calling itself. bool operator==(const TimingFunction& lhs, const TimingFunction& rhs) { switch (lhs.type()) { case TimingFunction::LinearFunction: { const LinearTimingFunction& linear = toLinearTimingFunction(lhs); return (linear == rhs); } case TimingFunction::CubicBezierFunction: { const CubicBezierTimingFunction& cubic = toCubicBezierTimingFunction(lhs); return (cubic == rhs); } case TimingFunction::StepsFunction: { const StepsTimingFunction& step = toStepsTimingFunction(lhs); return (step == rhs); } default: ASSERT_NOT_REACHED(); } return false; }
PassRefPtr<TimingFunction> CompositorAnimationsTimingFunctionReverser::reverse(const TimingFunction* timefunc) { switch (timefunc->type()) { case TimingFunction::LinearFunction: { const LinearTimingFunction* linear = toLinearTimingFunction(timefunc); return reverse(linear); } case TimingFunction::CubicBezierFunction: { const CubicBezierTimingFunction* cubic = toCubicBezierTimingFunction(timefunc); return reverse(cubic); } case TimingFunction::ChainedFunction: { const ChainedTimingFunction* chained = toChainedTimingFunction(timefunc); return reverse(chained); } // Steps function can not be reversed. case TimingFunction::StepsFunction: default: ASSERT_NOT_REACHED(); return PassRefPtr<TimingFunction>(); } }