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/check.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) {}
26 void PageNumber::operator=(const PageNumber& other) {
27 ranges_ = other.ranges_;
28 page_number_ = other.page_number_;
29 page_range_index_ = other.page_range_index_;
30 document_page_count_ = other.document_page_count_;
33 void PageNumber::Init(const PrintSettings& settings, int document_page_count) {
34 DCHECK(document_page_count);
35 ranges_ = settings.ranges().empty() ? NULL : &settings.ranges();
36 document_page_count_ = document_page_count;
38 page_range_index_ = 0;
39 page_number_ = (*ranges_)[0].from;
41 if (document_page_count) {
46 page_range_index_ = -1;
50 int PageNumber::operator++() {
52 // Switch to next page.
53 if (++page_number_ == document_page_count_) {
58 // Switch to next page.
60 // Page ranges are inclusive.
61 if (page_number_ > (*ranges_)[page_range_index_].to) {
62 DCHECK(ranges_->size() <=
63 static_cast<size_t>(std::numeric_limits<int>::max()));
64 if (++page_range_index_ == static_cast<int>(ranges_->size())) {
68 page_number_ = (*ranges_)[page_range_index_].from;
75 bool PageNumber::operator==(const PageNumber& other) const {
76 return page_number_ == other.page_number_ &&
77 page_range_index_ == other.page_range_index_;
79 bool PageNumber::operator!=(const PageNumber& other) const {
80 return page_number_ != other.page_number_ ||
81 page_range_index_ != other.page_range_index_;
84 } // namespace printing