Upload upstream chromium 67.0.3396
[platform/framework/web/chromium-efl.git] / printing / page_number.cc
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.
4
5 #include "printing/page_number.h"
6
7 #include <stddef.h>
8
9 #include <limits>
10
11 #include "base/logging.h"
12 #include "printing/print_settings.h"
13
14 namespace printing {
15
16 PageNumber::PageNumber(const PrintSettings& settings, int document_page_count) {
17   Init(settings, document_page_count);
18 }
19
20 PageNumber::PageNumber()
21     : ranges_(NULL),
22       page_number_(-1),
23       page_range_index_(-1),
24       document_page_count_(0) {
25 }
26
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_;
32 }
33
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;
38   if (ranges_) {
39     page_range_index_ = 0;
40     page_number_ = (*ranges_)[0].from;
41   } else {
42     if (document_page_count) {
43       page_number_ = 0;
44     } else {
45       page_number_ = -1;
46     }
47     page_range_index_ = -1;
48   }
49 }
50
51 int PageNumber::operator++() {
52   if (!ranges_) {
53     // Switch to next page.
54     if (++page_number_ == document_page_count_) {
55       // Finished.
56       *this = npos();
57     }
58   } else {
59     // Switch to next page.
60     ++page_number_;
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())) {
66         // Finished.
67         *this = npos();
68       } else {
69         page_number_ = (*ranges_)[page_range_index_].from;
70       }
71     }
72   }
73   return ToInt();
74 }
75
76 bool PageNumber::operator==(const PageNumber& other) const {
77   return page_number_ == other.page_number_ &&
78          page_range_index_ == other.page_range_index_;
79 }
80 bool PageNumber::operator!=(const PageNumber& other) const {
81   return page_number_ != other.page_number_ ||
82          page_range_index_ != other.page_range_index_;
83 }
84
85 }  // namespace printing