You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
46 lines
1.5 KiB
46 lines
1.5 KiB
7 months ago
|
// Copyright 2020 The Chromium Authors. All rights reserved.
|
||
|
// Use of this source code is governed by a BSD-style license that can be
|
||
|
// found in the LICENSE file.
|
||
|
|
||
|
#ifndef UTIL_SIMPLE_FRACTION_H_
|
||
|
#define UTIL_SIMPLE_FRACTION_H_
|
||
|
|
||
|
#include <string>
|
||
|
|
||
|
#include "absl/strings/string_view.h"
|
||
|
#include "platform/base/error.h"
|
||
|
|
||
|
namespace openscreen {
|
||
|
|
||
|
// SimpleFraction is used to represent simple (or "common") fractions, composed
|
||
|
// of a rational number written a/b where a and b are both integers.
|
||
|
|
||
|
// Note: Since SimpleFraction is a trivial type, it comes with a
|
||
|
// default constructor and is copyable, as well as allowing static
|
||
|
// initialization.
|
||
|
|
||
|
// Some helpful notes on SimpleFraction assumptions/limitations:
|
||
|
// 1. SimpleFraction does not perform reductions. 2/4 != 1/2, and -1/-1 != 1/1.
|
||
|
// 2. denominator = 0 is considered undefined.
|
||
|
// 3. numerator = saturates range to int min or int max
|
||
|
// 4. A SimpleFraction is "positive" if and only if it is defined and at least
|
||
|
// equal to zero. Since reductions are not performed, -1/-1 is negative.
|
||
|
struct SimpleFraction {
|
||
|
static ErrorOr<SimpleFraction> FromString(absl::string_view value);
|
||
|
std::string ToString() const;
|
||
|
|
||
|
bool operator==(const SimpleFraction& other) const;
|
||
|
bool operator!=(const SimpleFraction& other) const;
|
||
|
|
||
|
bool is_defined() const;
|
||
|
bool is_positive() const;
|
||
|
explicit operator double() const;
|
||
|
|
||
|
int numerator = 0;
|
||
|
int denominator = 0;
|
||
|
};
|
||
|
|
||
|
} // namespace openscreen
|
||
|
|
||
|
#endif // UTIL_SIMPLE_FRACTION_H_
|