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"
9 #include "base/logging.h"
10 #include "printing/print_settings.h"
14 PageNumber::PageNumber(const PrintSettings
& settings
, int document_page_count
) {
15 Init(settings
, document_page_count
);
18 PageNumber::PageNumber()
21 page_range_index_(-1),
22 document_page_count_(0) {
25 void PageNumber::operator=(const PageNumber
& other
) {
26 ranges_
= other
.ranges_
;
27 page_number_
= other
.page_number_
;
28 page_range_index_
= other
.page_range_index_
;
29 document_page_count_
= other
.document_page_count_
;
32 void PageNumber::Init(const PrintSettings
& settings
, int document_page_count
) {
33 DCHECK(document_page_count
);
34 ranges_
= settings
.ranges().empty() ? NULL
: &settings
.ranges();
35 document_page_count_
= document_page_count
;
37 page_range_index_
= 0;
38 page_number_
= (*ranges_
)[0].from
;
40 if (document_page_count
) {
45 page_range_index_
= -1;
49 int PageNumber::operator++() {
51 // Switch to next page.
52 if (++page_number_
== document_page_count_
) {
57 // Switch to next page.
59 // Page ranges are inclusive.
60 if (page_number_
> (*ranges_
)[page_range_index_
].to
) {
61 DCHECK(ranges_
->size() <= static_cast<size_t>(
62 std::numeric_limits
<int>::max()));
63 if (++page_range_index_
== static_cast<int>(ranges_
->size())) {
67 page_number_
= (*ranges_
)[page_range_index_
].from
;
74 bool PageNumber::operator==(const PageNumber
& other
) const {
75 return page_number_
== other
.page_number_
&&
76 page_range_index_
== other
.page_range_index_
;
78 bool PageNumber::operator!=(const PageNumber
& other
) const {
79 return page_number_
!= other
.page_number_
||
80 page_range_index_
!= other
.page_range_index_
;
83 } // namespace printing