1 /*
   2  * Copyright (c) 2013, 2019, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *
  23  */
  24 
  25 #ifndef SHARE_VM_UTILITIES_TICKS_INLINE_HPP
  26 #define SHARE_VM_UTILITIES_TICKS_INLINE_HPP
  27 
  28 #include "utilities/ticks.hpp"
  29 
  30 template <typename InstantType>
  31 inline TimeInterval<InstantType>& TimeInterval<InstantType>::operator+=(const TimeInterval<InstantType>& rhs) {
  32   _interval += rhs._interval;
  33   return *this;
  34 }
  35 
  36 template <typename InstantType>
  37 inline TimeInterval<InstantType>& TimeInterval<InstantType>::operator-=(const TimeInterval<InstantType>& rhs) {
  38   _interval -= rhs._interval;
  39   return *this;
  40 }
  41 
  42 template <typename InstantType>
  43 inline bool operator==(const TimeInterval<InstantType>& lhs, const TimeInterval<InstantType>& rhs) {
  44   return lhs.value() == rhs.value();
  45 }
  46 
  47 template <typename InstantType>
  48 inline bool operator!=(const TimeInterval<InstantType>& lhs, const TimeInterval<InstantType>& rhs) {
  49   return !operator==(lhs, rhs);
  50 }
  51 
  52 template <typename InstantType>
  53 inline bool operator<(const TimeInterval<InstantType>& lhs, const TimeInterval<InstantType>& rhs) {
  54   return lhs.value() < rhs.value();
  55 }
  56 
  57 template <typename InstantType>
  58 inline bool operator>(const TimeInterval<InstantType>& lhs, const TimeInterval<InstantType>& rhs) {
  59   return operator<(rhs, lhs);
  60 }
  61 
  62 template <typename InstantType>
  63 inline bool operator<=(const TimeInterval<InstantType>& lhs, const TimeInterval<InstantType>& rhs) {
  64   return !operator>(lhs, rhs);
  65 }
  66 
  67 template <typename InstantType>
  68 inline bool operator>=(const TimeInterval<InstantType>& lhs, const TimeInterval<InstantType>& rhs) {
  69   return !operator<(lhs, rhs);
  70 }
  71 
  72 template <typename InstantType>
  73 inline TimeInterval<InstantType> operator-(const InstantType& end, const InstantType& start) {
  74   return TimeInterval<InstantType>(end, start);
  75 }
  76 
  77 inline TimeInstant& TimeInstant::operator+=(const TimeInterval<TimeInstant>& rhs) {
  78   _instant += rhs.value();
  79   return *this;
  80 }
  81 
  82 inline TimeInstant& TimeInstant::operator-=(const TimeInterval<TimeInstant>& rhs) {
  83   _instant -= rhs.value();
  84   return *this;
  85 }
  86 
  87 inline bool operator==(const TimeInstant& lhs, const TimeInstant& rhs) {
  88   return lhs.value() == rhs.value();
  89 }
  90 
  91 inline bool operator!=(const TimeInstant& lhs, const TimeInstant& rhs) {
  92   return !operator==(lhs, rhs);
  93 }
  94 
  95 inline bool operator<(const TimeInstant& lhs, const TimeInstant& rhs) {
  96   return lhs.value() < rhs.value();
  97 }
  98 
  99 inline bool operator>(const TimeInstant& lhs, const TimeInstant& rhs) {
 100   return operator<(rhs, lhs);
 101 }
 102 
 103 inline bool operator<=(const TimeInstant& lhs, const TimeInstant& rhs) {
 104   return !operator>(lhs, rhs);
 105 }
 106 
 107 inline bool operator>=(const TimeInstant& lhs, const TimeInstant& rhs) {
 108   return !operator<(lhs, rhs);
 109 }
 110 
 111 inline TimeInstant operator+(const TimeInstant& lhs, const TimeInterval<TimeInstant>& span) {
 112   TimeInstant t(lhs);
 113   t += span;
 114   return t;
 115 }
 116 
 117 inline TimeInstant operator-(const TimeInstant& lhs, const TimeInterval<TimeInstant>& span) {
 118   TimeInstant t(lhs);
 119   t -= span;
 120   return t;
 121 }
 122 
 123 // TraceElapsedInterval
 124 
 125 inline bool operator==(const TraceElapsedInterval& lhs, const TraceElapsedInterval& rhs) {
 126   return lhs.value() == rhs.value();
 127 }
 128 
 129 inline bool operator!=(const TraceElapsedInterval& lhs, const TraceElapsedInterval& rhs) {
 130   return !operator==(lhs, rhs);
 131 }
 132 
 133 inline bool operator<(const TraceElapsedInterval& lhs, const TraceElapsedInterval& rhs) {
 134   return lhs.value() < rhs.value();
 135 }
 136 
 137 inline bool operator>(const TraceElapsedInterval& lhs, const TraceElapsedInterval& rhs) {
 138   return operator<(rhs, lhs);
 139 }
 140 
 141 inline bool operator<=(const TraceElapsedInterval& lhs, const TraceElapsedInterval& rhs) {
 142   return !operator>(lhs, rhs);
 143 }
 144 
 145 inline bool operator>=(const TraceElapsedInterval& lhs, const TraceElapsedInterval& rhs) {
 146   return !operator<(lhs, rhs);
 147 }
 148 
 149 inline TraceElapsedInterval operator-(const TraceElapsedCounter& end, const TraceElapsedCounter& start) {
 150   return TraceElapsedInterval(end, start);
 151 }
 152 
 153 // TraceElapsedCounter
 154 
 155 inline TraceElapsedCounter operator+(const TraceElapsedCounter& lhs, const TraceElapsedInterval& span) {
 156   TraceElapsedCounter t(lhs);
 157   t += span;
 158   return t;
 159 }
 160 
 161 inline TraceElapsedCounter operator-(const TraceElapsedCounter& lhs, const TraceElapsedInterval& span) {
 162   TraceElapsedCounter t(lhs);
 163   t -= span;
 164   return t;
 165 }
 166 
 167 inline bool operator==(const TraceElapsedCounter& lhs, const TraceElapsedCounter& rhs) {
 168   return lhs.value() == rhs.value();
 169 }
 170 
 171 inline bool operator!=(const TraceElapsedCounter& lhs, const TraceElapsedCounter& rhs) {
 172   return !operator==(lhs, rhs);
 173 }
 174 
 175 inline bool operator<(const TraceElapsedCounter& lhs, const TraceElapsedCounter& rhs) {
 176   return lhs.value() < rhs.value();
 177 }
 178 
 179 inline bool operator>(const TraceElapsedCounter& lhs, const TraceElapsedCounter& rhs) {
 180   return operator<(rhs, lhs);
 181 }
 182 
 183 inline bool operator<=(const TraceElapsedCounter& lhs, const TraceElapsedCounter& rhs) {
 184   return !operator>(lhs, rhs);
 185 }
 186 
 187 inline bool operator>=(const TraceElapsedCounter& lhs, const TraceElapsedCounter& rhs) {
 188   return !operator<(lhs, rhs);
 189 }
 190 
 191 #endif // SHARE_VM_UTILITIES_TICKS_INLINE_HPP