| .. title:: clang-tidy - abseil-time-subtraction |
| |
| abseil-time-subtraction |
| ======================= |
| |
| Finds and fixes ``absl::Time`` subtraction expressions to do subtraction |
| in the Time domain instead of the numeric domain. |
| |
| There are two cases of Time subtraction in which deduce additional type |
| information: |
| |
| - When the result is an ``absl::Duration`` and the first argument is an |
| ``absl::Time``. |
| - When the second argument is a ``absl::Time``. |
| |
| In the first case, we must know the result of the operation, since without that |
| the second operand could be either an ``absl::Time`` or an ``absl::Duration``. |
| In the second case, the first operand *must* be an ``absl::Time``, because |
| subtracting an ``absl::Time`` from an ``absl::Duration`` is not defined. |
| |
| Examples: |
| |
| .. code-block:: c++ |
| |
| int x; |
| absl::Time t; |
| |
| // Original - absl::Duration result and first operand is a absl::Time. |
| absl::Duration d = absl::Seconds(absl::ToUnixSeconds(t) - x); |
| |
| // Suggestion - Perform subtraction in the Time domain instead. |
| absl::Duration d = t - absl::FromUnixSeconds(x); |
| |
| |
| // Original - Second operand is an absl::Time. |
| int i = x - absl::ToUnixSeconds(t); |
| |
| // Suggestion - Perform subtraction in the Time domain instead. |
| int i = absl::ToInt64Seconds(absl::FromUnixSeconds(x) - t); |