android / platform / external / openscreen / 11164af4ded476b4292508bfe04d0901fec5016c / . / util / simple_fraction.h

// 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_ |