summaryrefslogtreecommitdiff
path: root/Source/WebCore/html/TimeRanges.h
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2016-04-10 09:28:39 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2016-04-10 09:28:39 +0000
commit32761a6cee1d0dee366b885b7b9c777e67885688 (patch)
treed6bec92bebfb216f4126356e55518842c2f476a1 /Source/WebCore/html/TimeRanges.h
parenta4e969f4965059196ca948db781e52f7cfebf19e (diff)
downloadWebKitGtk-tarball-32761a6cee1d0dee366b885b7b9c777e67885688.tar.gz
webkitgtk-2.4.11webkitgtk-2.4.11
Diffstat (limited to 'Source/WebCore/html/TimeRanges.h')
-rw-r--r--Source/WebCore/html/TimeRanges.h92
1 files changed, 68 insertions, 24 deletions
diff --git a/Source/WebCore/html/TimeRanges.h b/Source/WebCore/html/TimeRanges.h
index 20b2edf64..72233be83 100644
--- a/Source/WebCore/html/TimeRanges.h
+++ b/Source/WebCore/html/TimeRanges.h
@@ -10,10 +10,10 @@
* 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
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, 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
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, 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
@@ -26,7 +26,6 @@
#ifndef TimeRanges_h
#define TimeRanges_h
-#include "PlatformTimeRanges.h"
#include <algorithm>
#include <wtf/PassRefPtr.h>
#include <wtf/RefCounted.h>
@@ -38,37 +37,82 @@ typedef int ExceptionCode;
class TimeRanges : public RefCounted<TimeRanges> {
public:
- WEBCORE_EXPORT static Ref<TimeRanges> create();
- WEBCORE_EXPORT static Ref<TimeRanges> create(double start, double end);
- static Ref<TimeRanges> create(const PlatformTimeRanges&);
+ static PassRefPtr<TimeRanges> create()
+ {
+ return adoptRef(new TimeRanges);
+ }
+ static PassRefPtr<TimeRanges> create(double start, double end)
+ {
+ return adoptRef(new TimeRanges(start, end));
+ }
- WEBCORE_EXPORT double start(unsigned index, ExceptionCode&) const;
- WEBCORE_EXPORT double end(unsigned index, ExceptionCode&) const;
-
- WEBCORE_EXPORT PassRefPtr<TimeRanges> copy() const;
+ PassRefPtr<TimeRanges> copy() const;
void invert();
- WEBCORE_EXPORT void intersectWith(const TimeRanges&);
- void unionWith(const TimeRanges&);
-
- WEBCORE_EXPORT unsigned length() const;
+ void intersectWith(const TimeRanges*);
+ void unionWith(const TimeRanges*);
- WEBCORE_EXPORT void add(double start, double end);
- bool contain(double time) const;
+ unsigned length() const { return m_ranges.size(); }
+ double start(unsigned index, ExceptionCode&) const;
+ double end(unsigned index, ExceptionCode&) const;
+
+ void add(double start, double end);
+ bool contain(double time) const;
+
size_t find(double time) const;
- WEBCORE_EXPORT double nearest(double time) const;
- double totalDuration() const;
+
+ double nearest(double time) const;
- const PlatformTimeRanges& ranges() const { return m_ranges; }
- PlatformTimeRanges& ranges() { return m_ranges; }
+ double totalDuration() const;
private:
- WEBCORE_EXPORT explicit TimeRanges();
- WEBCORE_EXPORT TimeRanges(double start, double end);
- TimeRanges(const PlatformTimeRanges&);
+ TimeRanges() { }
+ TimeRanges(double start, double end);
+ TimeRanges(const TimeRanges&);
+
+ // We consider all the Ranges to be semi-bounded as follow: [start, end[
+ struct Range {
+ Range() { }
+ Range(double start, double end)
+ {
+ m_start = start;
+ m_end = end;
+ }
+ double m_start;
+ double m_end;
+
+ inline bool isPointInRange(double point) const
+ {
+ return m_start <= point && point < m_end;
+ }
+
+ inline bool isOverlappingRange(const Range& range) const
+ {
+ return isPointInRange(range.m_start) || isPointInRange(range.m_end) || range.isPointInRange(m_start);
+ }
+ inline bool isContiguousWithRange(const Range& range) const
+ {
+ return range.m_start == m_end || range.m_end == m_start;
+ }
+
+ inline Range unionWithOverlappingOrContiguousRange(const Range& range) const
+ {
+ Range ret;
- PlatformTimeRanges m_ranges;
+ ret.m_start = std::min(m_start, range.m_start);
+ ret.m_end = std::max(m_end, range.m_end);
+
+ return ret;
+ }
+
+ inline bool isBeforeRange(const Range& range) const
+ {
+ return range.m_start >= m_end;
+ }
+ };
+
+ Vector<Range> m_ranges;
};
} // namespace WebCore