1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file.
4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#ifndef CC_LAYERS_LAYER_LISTS_H_
6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define CC_LAYERS_LAYER_LISTS_H_
7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <vector>
9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/memory/ref_counted.h"
11ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "cc/base/cc_export.h"
12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "cc/base/scoped_ptr_vector.h"
13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace cc {
15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class Layer;
16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class LayerImpl;
17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)typedef std::vector<scoped_refptr<Layer> > LayerList;
19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)typedef ScopedPtrVector<LayerImpl> OwnedLayerImplList;
21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)typedef std::vector<LayerImpl*> LayerImplList;
22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
23ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochclass CC_EXPORT RenderSurfaceLayerList {
24ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch public:
25ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  RenderSurfaceLayerList();
26ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  ~RenderSurfaceLayerList();
27ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
28ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  Layer* at(size_t i) const;
29ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  void pop_back();
30ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  void push_back(const scoped_refptr<Layer>& layer);
31ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  Layer* back();
32ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  size_t size() const;
33ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  bool empty() const { return size() == 0u; }
348bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  scoped_refptr<Layer>& operator[](size_t i);
358bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  const scoped_refptr<Layer>& operator[](size_t i) const;
36ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  LayerList::iterator begin();
37ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  LayerList::iterator end();
38ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  LayerList::const_iterator begin() const;
39ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  LayerList::const_iterator end() const;
40ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  void clear();
415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  LayerList& AsLayerList() { return list_; }
425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  const LayerList& AsLayerList() const { return list_; }
43ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
44ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch private:
45ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  LayerList list_;
46ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
47ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  DISALLOW_COPY_AND_ASSIGN(RenderSurfaceLayerList);
48ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch};
49ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}  // namespace cc
51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif  // CC_LAYERS_LAYER_LISTS_H_
53