Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/C/Firefox/dom/smil/   (Browser von der Mozilla Stiftung Version 136.0.1©)  Datei vom 10.2.2025 mit Größe 4 kB image not shown  

Quelle  SMILTimeValue.h   Sprache: C

 
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */


#ifndef DOM_SMIL_SMILTIMEVALUE_H_
#define DOM_SMIL_SMILTIMEVALUE_H_

#include "mozilla/SMILTypes.h"
#include "nsDebug.h"

namespace mozilla {

/*----------------------------------------------------------------------
 * SMILTimeValue class
 *
 * A tri-state time value.
 *
 * First a quick overview of the SMIL time data types:
 *
 * SMILTime          -- a timestamp in milliseconds.
 * SMILTimeValue     -- (this class) a timestamp that can take the additional
 *                      states 'indefinite' and 'unresolved'
 * SMILInstanceTime  -- an SMILTimeValue used for constructing intervals. It
 *                      contains additional fields to govern reset behavior
 *                      and track timing dependencies (e.g. syncbase timing).
 * SMILInterval      -- a pair of SMILInstanceTimes that defines a begin and
 *                      an end time for animation.
 * SMILTimeValueSpec -- a component of a begin or end attribute, such as the
 *                      '5s' or 'a.end+2m' in begin="5s; a.end+2m". Acts as
 *                      a broker between an SMILTimedElement and its
 *                      SMILInstanceTimes by generating new instance times
 *                      and handling changes to existing times.
 *
 * Objects of this class may be in one of three states:
 *
 * 1) The time is resolved and has a definite millisecond value
 * 2) The time is resolved and indefinite
 * 3) The time is unresolved
 *
 * In summary:
 *
 * State      | GetMillis     | IsDefinite | IsIndefinite | IsResolved
 * -----------+---------------+------------+--------------+------------
 * Definite   | SMILTimeValue | true       | false        | true
 * -----------+---------------+------------+--------------+------------
 * Indefinite | --            | false      | true         | true
 * -----------+---------------+------------+--------------+------------
 * Unresolved | --            | false      | false        | false
 *
 */


class SMILTimeValue {
 public:
  // Creates an unresolved time value
  SMILTimeValue()
      : mMilliseconds(kUnresolvedMillis), mState(STATE_UNRESOLVED) {}

  // Creates a resolved time value
  explicit SMILTimeValue(SMILTime aMillis)
      : mMilliseconds(aMillis), mState(STATE_DEFINITE) {}

  // Named constructor to create an indefinite time value
  static SMILTimeValue Indefinite() {
    SMILTimeValue value;
    value.SetIndefinite();
    return value;
  }

  static SMILTimeValue Zero() { return SMILTimeValue(SMILTime(0L)); }

  bool IsIndefinite() const { return mState == STATE_INDEFINITE; }
  void SetIndefinite() {
    mState = STATE_INDEFINITE;
    mMilliseconds = kUnresolvedMillis;
  }

  bool IsResolved() const { return mState != STATE_UNRESOLVED; }
  void SetUnresolved() {
    mState = STATE_UNRESOLVED;
    mMilliseconds = kUnresolvedMillis;
  }

  bool IsDefinite() const { return mState == STATE_DEFINITE; }
  SMILTime GetMillis() const {
    MOZ_ASSERT(mState == STATE_DEFINITE,
               "GetMillis() called for unresolved or indefinite time");

    return mState == STATE_DEFINITE ? mMilliseconds : kUnresolvedMillis;
  }

  bool IsZero() const {
    return mState == STATE_DEFINITE ? mMilliseconds == 0 : false;
  }

  void SetMillis(SMILTime aMillis) {
    mState = STATE_DEFINITE;
    mMilliseconds = aMillis;
  }

  /*
   * EnsureNonZero ensures values such as 0.0001s are not represented as 0
   * for values where 0 is invalid.
   */

  enum class Rounding : uint8_t { EnsureNonZero, Nearest };

  void SetMillis(double aMillis, Rounding aRounding);

  int8_t CompareTo(const SMILTimeValue& aOther) const;

  bool operator==(const SMILTimeValue& aOther) const {
    return CompareTo(aOther) == 0;
  }

  bool operator!=(const SMILTimeValue& aOther) const {
    return CompareTo(aOther) != 0;
  }

  bool operator<(const SMILTimeValue& aOther) const {
    return CompareTo(aOther) < 0;
  }

  bool operator>(const SMILTimeValue& aOther) const {
    return CompareTo(aOther) > 0;
  }

  bool operator<=(const SMILTimeValue& aOther) const {
    return CompareTo(aOther) <= 0;
  }

  bool operator>=(const SMILTimeValue& aOther) const {
    return CompareTo(aOther) >= 0;
  }

 private:
  static const SMILTime kUnresolvedMillis;

  SMILTime mMilliseconds;
  enum { STATE_DEFINITE, STATE_INDEFINITE, STATE_UNRESOLVED } mState;
};

}  // namespace mozilla

#endif  // DOM_SMIL_SMILTIMEVALUE_H_

Messung V0.5
C=94 H=95 G=94

¤ Dauer der Verarbeitung: 0.3 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.