Chromium Code Reviews| Index: Source/wtf/LinkedStack.h |
| diff --git a/public/web/WebInbandTextTrack.h b/Source/wtf/LinkedStack.h |
| similarity index 58% |
| copy from public/web/WebInbandTextTrack.h |
| copy to Source/wtf/LinkedStack.h |
| index cebdf20b8552aee6e4cc4977ebcf6cb7ebbc1e02..a8bc2e1be4c157b8442436820dc3701c097ad85d 100644 |
| --- a/public/web/WebInbandTextTrack.h |
| +++ b/Source/wtf/LinkedStack.h |
| @@ -28,49 +28,82 @@ |
| * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| */ |
| -#ifndef WebInbandTextTrack_h |
| -#define WebInbandTextTrack_h |
| +#ifndef LinkedStack_h |
|
esprehn
2013/06/20 22:29:52
I hate the git diff similarity stuff :/
|
| +#define LinkedStack_h |
| -namespace WebKit { |
| +#include "wtf/OwnPtr.h" |
| -class WebString; |
| -class WebInbandTextTrackClient; |
| +namespace WTF { |
| -class WebInbandTextTrack { |
| +template <typename T> |
| +class LinkedStack { |
| public: |
| - enum Kind { |
| - KindSubtitles, |
| - KindCaptions, |
| - KindDescriptions, |
| - KindChapters, |
| - KindMetadata, |
| - KindNone |
| - }; |
| + LinkedStack() { } |
|
esprehn
2013/06/20 22:29:52
You can leave this out, we can use the default one
abarth-chromium
2013/06/20 22:52:32
Very true.
|
| + |
| + bool isEmpty(); |
| + |
| + void push(const T&); |
| + const T& peek(); |
| + void pop(); |
| + |
| + size_t size(); |
| + |
| +private: |
| + struct Node { |
| + Node(const T&, PassOwnPtr<Node> next); |
| - enum Mode { |
| - ModeDisabled, |
| - ModeHidden, |
| - ModeShowing |
| + T m_data; |
| + OwnPtr<Node> m_next; |
| }; |
| - virtual ~WebInbandTextTrack() {} |
| + OwnPtr<Node> m_head; |
| +}; |
| - virtual void setClient(WebInbandTextTrackClient*) = 0; |
| - virtual WebInbandTextTrackClient* client() = 0; |
| +template <typename T> |
| +LinkedStack<T>::Node::Node(const T& data, PassOwnPtr<Node> next) |
| + : m_data(data) |
| + , m_next(next) |
| +{ |
| +} |
| - virtual void setMode(Mode) = 0; |
| - virtual Mode mode() const = 0; |
| +template <typename T> |
| +inline bool LinkedStack<T>::isEmpty() |
| +{ |
| + return !m_head; |
| +} |
| - virtual Kind kind() const = 0; |
| - virtual bool isClosedCaptions() const = 0; |
| +template <typename T> |
| +inline void LinkedStack<T>::push(const T& data) |
| +{ |
| + m_head = adoptPtr(new Node(data, m_head.release())); |
| +} |
| - virtual WebString label() const = 0; |
| - virtual WebString language() const = 0; |
| - virtual bool isDefault() const = 0; |
| +template <typename T> |
| +inline const T& LinkedStack<T>::peek() |
| +{ |
| + return m_head->m_data; |
| +} |
| - virtual int textTrackIndex() const = 0; |
| -}; |
| +template <typename T> |
| +inline void LinkedStack<T>::pop() |
| +{ |
| + m_head = m_head->m_next.release(); |
| +} |
| + |
| +template <typename T> |
| +inline size_t LinkedStack<T>::size() |
|
esprehn
2013/06/20 22:29:52
I'd rather we just store the size inside here. Hav
abarth-chromium
2013/06/20 22:52:32
Ok.
|
| +{ |
| + size_t result = 0; |
| + Node* current = m_head.get(); |
| + while (current) { |
| + ++result; |
| + current = current->m_next.get(); |
| + } |
| + return result; |
| +} |
| + |
| +} |
| -} // namespace WebKit |
| +using WTF::LinkedStack; |
| #endif |