Upload upstream chromium 85.0.4183.84
[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/check.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_(nullptr),
22       page_number_(-1),
23       page_range_index_(-1),
24       document_page_count_(0) {}
25
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_;
31 }
32
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;
37   if (ranges_) {
38     page_range_index_ = 0;
39     page_number_ = (*ranges_)[0].from;
40   } else {
41     if (document_page_count) {
42       page_number_ = 0;
43     } else {
44       page_number_ = -1;
45     }
46     page_range_index_ = -1;
47   }
48 }
49
50 int PageNumber::operator++() {
51   if (!ranges_) {
52     // Switch to next page.
53     if (++page_number_ == document_page_count_) {
54       // Finished.
55       *this = npos();
56     }
57   } else {
58     // Switch to next page.
59     ++page_number_;
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())) {
65         // Finished.
66         *this = npos();
67       } else {
68         page_number_ = (*ranges_)[page_range_index_].from;
69       }
70     }
71   }
72   return ToInt();
73 }
74
75 bool PageNumber::operator==(const PageNumber& other) const {
76   return page_number_ == other.page_number_ &&
77          page_range_index_ == other.page_range_index_;
78 }
79 bool PageNumber::operator!=(const PageNumber& other) const {
80   return page_number_ != other.page_number_ ||
81          page_range_index_ != other.page_range_index_;
82 }
83
84 }  // namespace printing