1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "printing/page_number.h"
11 #include "base/logging.h"
12 #include "printing/print_settings.h"
16 PageNumber::PageNumber(const PrintSettings& settings, int document_page_count) {
17 Init(settings, document_page_count);
20 PageNumber::PageNumber()
23 page_range_index_(-1),
24 document_page_count_(0) {
27 void PageNumber::operator=(const PageNumber& other) {
28 ranges_ = other.ranges_;
29 page_number_ = other.page_number_;
30 page_range_index_ = other.page_range_index_;
31 document_page_count_ = other.document_page_count_;
34 void PageNumber::Init(const PrintSettings& settings, int document_page_count) {
35 DCHECK(document_page_count);
36 ranges_ = settings.ranges().empty() ? NULL : &settings.ranges();
37 document_page_count_ = document_page_count;
39 page_range_index_ = 0;
40 page_number_ = (*ranges_)[0].from;
42 if (document_page_count) {
47 page_range_index_ = -1;
51 int PageNumber::operator++() {
53 // Switch to next page.
54 if (++page_number_ == document_page_count_) {
59 // Switch to next page.
61 // Page ranges are inclusive.
62 if (page_number_ > (*ranges_)[page_range_index_].to) {
63 DCHECK(ranges_->size() <= static_cast<size_t>(
64 std::numeric_limits<int>::max()));
65 if (++page_range_index_ == static_cast<int>(ranges_->size())) {
69 page_number_ = (*ranges_)[page_range_index_].from;
76 bool PageNumber::operator==(const PageNumber& other) const {
77 return page_number_ == other.page_number_ &&
78 page_range_index_ == other.page_range_index_;
80 bool PageNumber::operator!=(const PageNumber& other) const {
81 return page_number_ != other.page_number_ ||
82 page_range_index_ != other.page_range_index_;
85 } // namespace printing