12f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
22f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)// found in the LICENSE file.
42f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)
52f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)#ifndef CC_RESOURCES_PRIORITIZED_TILE_SET_H_
62f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)#define CC_RESOURCES_PRIORITIZED_TILE_SET_H_
72f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)
82f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)#include <vector>
92f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)
102f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)#include "cc/base/cc_export.h"
112f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)#include "cc/resources/managed_tile_state.h"
122f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)
132f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)namespace cc {
142f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)class Tile;
152f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)
162f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)class CC_EXPORT PrioritizedTileSet {
172f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles) public:
182f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)  PrioritizedTileSet();
192f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)  ~PrioritizedTileSet();
202f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)
212f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)  void InsertTile(Tile* tile, ManagedTileBin bin);
222f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)  void Clear();
232f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)
242f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)  class CC_EXPORT Iterator {
252f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)   public:
262f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)    Iterator(PrioritizedTileSet* set, bool use_priority_ordering);
272f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)
282f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)    ~Iterator();
292f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)
302f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)    void DisablePriorityOrdering();
312f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)
322f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)    Iterator& operator++();
332f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)    Tile* operator->() { return *(*this); }
342f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)    Tile* operator*();
352f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)    operator bool() const {
362f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)      return iterator_ != tile_set_->tiles_[current_bin_].end();
372f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)    }
382f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)
392f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)   private:
402f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)    void AdvanceList();
412f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)
422f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)    PrioritizedTileSet* tile_set_;
432f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)    ManagedTileBin current_bin_;
442f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)    std::vector<Tile*>::iterator iterator_;
452f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)    bool use_priority_ordering_;
462f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)  };
472f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)
482f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles) private:
492f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)  friend class Iterator;
502f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)
512f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)  void SortBinIfNeeded(ManagedTileBin bin);
522f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)
532f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)  std::vector<Tile*> tiles_[NUM_BINS];
542f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)  bool bin_sorted_[NUM_BINS];
552f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)};
562f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)
572f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)}  // namespace cc
582f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)
592f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)#endif  // CC_RESOURCES_PRIORITIZED_TILE_SET_H_
60