1/*
2* Copyright (C) 2009 Google Inc. All rights reserved.
3*
4* Redistribution and use in source and binary forms, with or without
5* modification, are permitted provided that the following conditions are
6* met:
7*
8*     * Redistributions of source code must retain the above copyright
9* notice, this list of conditions and the following disclaimer.
10*     * Redistributions in binary form must reproduce the above
11* copyright notice, this list of conditions and the following disclaimer
12* in the documentation and/or other materials provided with the
13* distribution.
14*     * Neither the name of Google Inc. nor the names of its
15* contributors may be used to endorse or promote products derived from
16* this software without specific prior written permission.
17*
18* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29*/
30
31#ifndef V8NamedNodesCollection_h
32#define V8NamedNodesCollection_h
33
34#include "Node.h"
35#include "NodeList.h"
36#include <wtf/PassRefPtr.h>
37#include <wtf/RefPtr.h>
38#include <wtf/Vector.h>
39
40namespace WebCore {
41
42    class V8NamedNodesCollection : public NodeList {
43    public:
44        static PassRefPtr<NodeList> create(const Vector<RefPtr<Node> >& nodes)
45        {
46            return adoptRef(new V8NamedNodesCollection(nodes));
47        }
48
49        virtual unsigned length() const { return m_nodes.size(); }
50        virtual Node* item(unsigned) const;
51        virtual Node* itemWithName(const AtomicString&) const;
52
53    private:
54        explicit V8NamedNodesCollection(const Vector<RefPtr<Node> >& nodes)
55            : m_nodes(nodes) { }
56
57        Vector<RefPtr<Node> > m_nodes;
58    };
59
60}  // namespace WebCore
61
62#endif  // V8NamedNodesCollection_h
63