<div dir="ltr"><div><font face="arial, sans-serif" style="">Hello, Brian</font></div><div><font face="arial, sans-serif"><br></font></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><font face="arial, sans-serif" style="">Another consideration I'd like to put on the table is: can it be a value type?  Because an immutable range</font></blockquote><div><br></div><div>This was in my thoughts. I would even say it must be a value type. However, I considered not bothering the Valhalla team unless this API was at least a candidate.</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><font face="arial, sans-serif">As has been pointed out already, one would prefer to use a Comparator as a witness to ordering rather than the much weaker Comparable. </font></blockquote><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><font face="arial, sans-serif">I think the algebraic operations as you've proposed them (union, intersection, etc) are a bit of a mess, union especially.  </font></blockquote><div><br></div><div>As I said, there are a lot of issues with it. Of course I would love to have such an option in the API, but it has a lot of clashes with range arithmetic. Maybe I was too fast with the assumption that range arithmetic is needed in the first place, at least as instance methods. I will look into possibilities of extracting arithmetic into separate classes like Math and make Range nore skewed towards data structure with ability to manipulate it in the procedural fashion. I see that there is still a demand for things like unions (range sets), and subsequently there will be a demand for comfortable and standard ways to produce them.</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><font face="arial, sans-serif" style="">I would want to see Range implement Iterable (yes, I understand this rules out some possible types of ranges), as iterating over the elements of a range is one of the most likely operations.</font></blockquote><div><br></div><div>I previously did some research on producing streams out of ranges, it has shown itself pretty well, but API was a bit unintuitive. I will look into it more carefully though, when more prioritized tasks are completed.</div><div><br></div><div>Thanks for your feedback, I appreciate it.</div><div><br></div><div>Best regards</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Sep 23, 2024 at 9:47 PM Brian Goetz <<a href="mailto:brian.goetz@oracle.com">brian.goetz@oracle.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><u></u>

  
  <div>
    <font size="4" face="monospace">This is a nice start.  I'd like to
      add a few comments to help set expectations and to guide future
      explorations here.<br>
      <br>
      Starting with a "main goal" of "putting it in the JDK" is putting
      the cart before the horse.  The main goal should be to solve the
      problem well enough, for a broad enough variety of uses, that it
      might be _considered as a candidate for the JDK_ (possibly with
      some additional work), but it should stand well enough on its
      own.  (The Joda Time -> java.util.time transition is a good
      example of doing this right.)  Build a good thing first, then
      let's have a conversation about whether it belongs in the JDK.  <br>
      <br>
      Another consideration I'd like to put on the table is: can it be a
      value type?  Because an immutable range (and we wouldn't consider
      anything else) is an ideal candidate for being a value.  (This is
      one of many "is it going where the language is going" questions;
      I'll keep the rest of those to myself for now.)<br>
      <br>
      As has been pointed out already, one would prefer to use a
      Comparator as a witness to ordering rather than the much weaker
      Comparable.  <br>
      <br>
      I would want to see Range implement Iterable (yes, I understand
      this rules out some possible types of ranges), as iterating over
      the elements of a range is one of the most likely operations.<br>
      <br>
      I think the algebraic operations as you've proposed them (union,
      intersection, etc) are a bit of a mess, union especially.  <br>
      <br>
      <br>
      <br>
      <br>
    </font><br>
    <div>On 9/22/2024 3:01 PM, Olexandr Rotan
      wrote:<br>
    </div>
    <blockquote type="cite">
      
      <div dir="ltr">Hello everyone! I am writing here today to invite
        everyone to participate in the discussion regarding the Range
        APi proposal I have made into JDK. Here is the pull request
        link: <a href="https://github.com/openjdk/jdk/pull/21122" target="_blank">https://github.com/openjdk/jdk/pull/21122</a>,
        and PR text:
        <div><br>
          <p dir="auto" style="box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px;margin-top:0px"><span style="background-color:rgb(255,255,255)"><font color="#000000">This pull request describes the methods
                of the <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">Range<T></code> interface.
                The <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">Range<T></code> interface
                represents a bounded or unbounded range. (From now on,
                range, span and interval are used interchangeably, but
                docs only use "range")</font></span></p>
          <h3 dir="auto" style="box-sizing:border-box;font-size:1.25em;line-height:1.25;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji""><span style="background-color:rgb(255,255,255)"><font color="#000000">Goals:</font></span></h3>
          <ul dir="auto" style="box-sizing:border-box;padding:0px;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
            <li style="box-sizing:border-box">
              <p dir="auto" style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Main goal.
                      Standardization of the Range/Interval API:</strong> The
                    primary objective of this effort is to provide a
                    standardized interface for working with ranges or
                    spans of time (or any ordered types). Many existing
                    libraries offer their own custom implementations of
                    ranges, and they differ in significant ways, making
                    it harder to use and combine across different
                    codebases. Standardization will ensure consistency,
                    interoperability, and a more predictable interface
                    across various contexts.</font></span></p>
            </li>
            <li style="box-sizing:border-box;margin-top:0.25em">
              <p dir="auto" style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Versatile range
                      operations:</strong> provide a comprehensive API
                    for manipulating and querying ranges, especially
                    those representing time periods or numerical
                    intervals. The API simplifies common tasks like
                    checking containment, overlaps, or adjacency between
                    ranges.</font></span></p>
            </li>
            <li style="box-sizing:border-box;margin-top:0.25em">
              <p dir="auto" style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Support for
                      unbounded ranges:</strong> Unlike many existing
                    libraries, which assume intervals are always
                    bounded, this API aims to fully support unbounded
                    intervals. Users will be able to define ranges with
                    open starts or ends, making it suitable for temporal
                    data that spans indefinitely in one direction, such
                    as future projections or historical data with
                    unknown starting points.</font></span></p>
            </li>
            <li style="box-sizing:border-box;margin-top:0.25em">
              <p dir="auto" style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Performance
                      efficiency:</strong> The API aims to provide
                    optimized for performance implementation, that takes
                    advantage of all possible simplifications and
                    short-circuits.</font></span></p>
            </li>
            <li style="box-sizing:border-box;margin-top:0.25em">
              <p dir="auto" style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Consistency with
                      existing libraries:</strong> To aid adoption, the
                    API should be familiar to developers who have used
                    popular libraries like NodaTime, Joda-Time,
                    Three-Ten Extra, and Boost Date_Time, but with
                    enhancements for unbounded intervals, negative
                    ranges (?), and optional return types instead of
                    null values.</font></span></p>
            </li>
          </ul>
          <h3 dir="auto" style="box-sizing:border-box;font-size:1.25em;line-height:1.25;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji""><span style="background-color:rgb(255,255,255)"><font color="#000000">Non-Goals:</font></span></h3>
          <ul dir="auto" style="box-sizing:border-box;padding:0px;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
            <li style="box-sizing:border-box">
              <p dir="auto" style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Handling complex
                      data structures beyond smple ranges:</strong> This
                    API is not intended to manage or represent complex
                    data structures beyond ranges. For example, ranges
                    that involve intricate internal states, like
                    non-contiguous ranges (?) or ranges with multiple
                    gaps, are out of scope.</font></span></p>
            </li>
            <li style="box-sizing:border-box;margin-top:0.25em">
              <p dir="auto" style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Overly simplifying
                      range types:</strong> While ease of use is a goal,
                    its is not an aim to remove support for advanced
                    cases like unbounded or negative ranges, even if
                    this results in slightly more complex
                    implementations. The API should not be skewed
                    towards being purely a simple data structure for
                    bounded ranges.</font></span></p>
            </li>
            <li style="box-sizing:border-box;margin-top:0.25em">
              <p dir="auto" style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Application-specific
                      logic:</strong> The API is meant to be
                    domain-agnostic and general-purpose. It is not
                    intended to allow to embed application-specific
                    logic, such as calendar-based date manipulations or
                    domain-specific business rules for interval
                    comparison.</font></span></p>
            </li>
            <li style="box-sizing:border-box;margin-top:0.25em">
              <p dir="auto" style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Replacing existing
                      libraries:</strong> The goal is not to replace
                    established libraries like Joda-Time or
                    ThreeTen-Extra, but rather to augment these ideas
                    with support for unbounded ranges and additional
                    arithmetic operations. Although, it is a goal to
                    provide interface that could exisiting libraries
                    could easily retrofit into.</font></span></p>
            </li>
          </ul>
          <h3 dir="auto" style="box-sizing:border-box;font-size:1.25em;line-height:1.25;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji""><span style="background-color:rgb(255,255,255)"><font color="#000000">Motivation</font></span></h3>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000">The primary motivation behind
                standardizing the <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">Range</code> API
                is the <strong style="box-sizing:border-box">lack of an
                  established, universal interface</strong> for handling
                ranges or spans across various domains. Developers are
                often forced to work with different, incompatible range
                implementations across libraries or to re-implement
                common functionality themselves. This leads to redundant
                code, increased dependencies, and greater chances for
                errors.</font></span></p>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000">In many software systems—whether in
                scheduling, auditing, access control, or financial
                services—ranges are used to represent periods of time,
                numerical intervals, or validity spans. Without a
                standardized API, developers must contend with diverse
                implementations that often differ in naming conventions,
                behavior, and supported features. These variations
                create unnecessary complexity, as developers must:</font></span></p>
          <ol dir="auto" style="box-sizing:border-box;padding:0px;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
            <li style="box-sizing:border-box">
              <p dir="auto" style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Introduce additional
                      dependencies</strong>: Many libraries provide
                    similar functionality for ranges, but since they are
                    not interchangeable, developers must often add extra
                    dependencies to cover edge cases or specific use
                    cases that are not available in a single library.
                    This bloats the codebase and creates maintenance
                    overhead.</font></span></p>
            </li>
            <li style="box-sizing:border-box;margin-top:0.25em">
              <p dir="auto" style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Re-implement common
                      logic</strong>: In cases where no single library
                    meets the required needs, developers are forced to
                    write their own range-handling logic. This
                    reinvention of basic operations such as
                    intersection, union, or containment leads to
                    redundancy, increased likelihood of bugs, and
                    inconsistency in how ranges are handled across
                    different parts of the code.</font></span></p>
            </li>
            <li style="box-sizing:border-box;margin-top:0.25em">
              <p dir="auto" style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Fragmentation across
                      domains</strong>: Different libraries often define
                    their own range concepts (e.g., for date-times,
                    numbers, or general comparisons), which are rarely
                    compatible with one another. This lack of
                    compatibility makes integration between systems
                    difficult, requiring custom adapters or conversions.</font></span></p>
            </li>
          </ol>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000">By defining a standard <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">Range</code> API,
                the goal is to:</font></span></p>
          <ul dir="auto" style="box-sizing:border-box;padding:0px;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
            <li style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Reduce
                    the dependency footprint:</strong> A common,
                  well-designed API for ranges would eliminate the need
                  to import multiple libraries just to handle different
                  types of ranges, reducing dependencies in projects and
                  enhancing maintainability.</font></span></li>
            <li style="box-sizing:border-box;margin-top:0.25em"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Simplify
                    code and increase reusability:</strong> With a
                  standardized interface, developers can write
                  range-related code once and reuse it across projects
                  and libraries, confident that the same semantics and
                  operations will apply consistently.</font></span></li>
            <li style="box-sizing:border-box;margin-top:0.25em"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Minimize
                    developer errors:</strong> By providing a
                  predictable and well-documented interface, the
                  likelihood of misunderstandings or incorrect use of
                  range operations will decrease. Developers can trust
                  that operations like intersections, unions, and
                  comparisons will behave consistently, regardless of
                  the context.</font></span></li>
          </ul>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000">In essence, the lack of standardization
                in range operations creates unnecessary complexity,
                fragmentation, and redundant effort. A standardized <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">Range</code> API
                would provide clarity, reduce the need for additional
                dependencies, and enable more efficient, reusable, and
                error-free code across different projects and domains.</font></span></p>
          <h1 dir="auto" style="box-sizing:border-box;margin-right:0px;margin-left:0px;line-height:1.25;padding-bottom:0.3em;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji""><span style="background-color:rgb(255,255,255)"><font color="#000000">Key API points</font></span></h1>
          <h2 dir="auto" style="box-sizing:border-box;line-height:1.25;padding-bottom:0.3em;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji""><span style="background-color:rgb(255,255,255)"><font color="#000000">Support of unbounded intervals</font></span></h2>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000">API supports both one- and two-sided.
                Provided sample (draft) implementation for<code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">
                  ChronoDateTime</code> has 4 separate implementation
                for each type of ranges.</font></span></p>
          <h3 dir="auto" style="box-sizing:border-box;font-size:1.25em;line-height:1.25;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji""><span style="background-color:rgb(255,255,255)"><font color="#000000">Alternatives</font></span></h3>
          <ul dir="auto" style="box-sizing:border-box;padding:0px;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
            <li style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000">Many Libraries, like Luxon, C++ boost,
                  NodaTime and many others, arguably the most, fo not
                  explicitly support unbounded intervals. This reduces
                  complexity of implementation, but takes away many
                  possible optimization for edge-cases. Alternative they
                  propose is to use Instant.MIN and Instant.MAX or
                  similar to create unbounded-like intervals.</font></span></li>
          </ul>
          <h2 dir="auto" style="box-sizing:border-box;line-height:1.25;padding-bottom:0.3em;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji""><span style="background-color:rgb(255,255,255)"><font color="#000000">Support for negative intervals,</font></span></h2>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000">API supports both positive and negative
                and positive ranges. This is questionable and discussion
                is encouraged.</font></span></p>
          <h3 dir="auto" style="box-sizing:border-box;font-size:1.25em;line-height:1.25;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji""><span style="background-color:rgb(255,255,255)"><font color="#000000">Advantages</font></span></h3>
          <ul dir="auto" style="box-sizing:border-box;padding:0px;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
            <li style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000">Allows more flexible usage of API,
                  which would be helpful for use cases like diagrams
                  visualization.</font></span></li>
          </ul>
          <h3 dir="auto" style="box-sizing:border-box;font-size:1.25em;line-height:1.25;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji""><span style="background-color:rgb(255,255,255)"><font color="#000000">Disadvantages</font></span></h3>
          <ul dir="auto" style="box-sizing:border-box;padding:0px;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
            <li style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000">Dramatically increases amount of
                  boilerplate code inside the implementations.</font></span></li>
            <li style="box-sizing:border-box;margin-top:0.25em"><span style="background-color:rgb(255,255,255)"><font color="#000000">Makes behaviour of potential methods
                  like <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">boolean
                    endsBefore(T t) </code>unintuitive. Does this mean
                  that end() is before that provided parameter, or
                  latter of bounds (i.e. <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">start()</code> for
                  negative range and <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">end()</code> for
                  positive).</font></span></li>
            <li style="box-sizing:border-box;margin-top:0.25em"><span style="background-color:rgb(255,255,255)"><font color="#000000">Limited usability scope. Most use
                  cases would not benefit from possibility of negative
                  ranges creation, but would have to suffer performance
                  decrease.</font></span></li>
          </ul>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000">In general, either there should be
                support for negative ranges, or ranges might be
                end-exclusve, but not two at the same time, as having
                them both together dramatically increases complexity.</font></span></p>
          <h2 dir="auto" style="box-sizing:border-box;line-height:1.25;padding-bottom:0.3em;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji""><span style="background-color:rgb(255,255,255)"><font color="#000000"><code style="box-sizing:border-box;font-size:inherit;padding:0px 0.2em;margin:0px;border-radius:6px">Range</code> is
                not <code style="box-sizing:border-box;font-size:inherit;padding:0px 0.2em;margin:0px;border-radius:6px">Serializable</code></font></span></h2>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000">Currently ranges are not<code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">
                  Serializable</code>. This is due to difficulties
                regarding using non-serializable interfaces, like <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">ChronoDateTIme
                </code> in sample implementation.</font></span></p>
          <h3 dir="auto" style="box-sizing:border-box;font-size:1.25em;line-height:1.25;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji""><span style="background-color:rgb(255,255,255)"><font color="#000000">Alternatives</font></span></h3>
          <ul dir="auto" style="box-sizing:border-box;padding:0px;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
            <li style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000">Restrict range type variable to
                  implement <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">Serializable</code>.
                  I see this option as undesiarable bacause of how much
                  it narrows use of interface.</font></span></li>
          </ul>
          <h2 dir="auto" style="box-sizing:border-box;line-height:1.25;padding-bottom:0.3em;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji""><span style="background-color:rgb(255,255,255)"><font color="#000000">Current interface methods list is
                minimal</font></span></h2>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000">For now, API proposed contains minimal
                amount of methods that are used in range arithmetics.
                List of methods is supposed to change as discussion
                moves on.</font></span></p>
          <h2 dir="auto" style="box-sizing:border-box;line-height:1.25;padding-bottom:0.3em;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji""><span style="background-color:rgb(255,255,255)"><font color="#000000">Generic Range class vs Rnage interface +
                specific inmplementations</font></span></h2>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000">Currently, approach is to define
                interface and list of implementations.</font></span></p>
          <h3 dir="auto" style="box-sizing:border-box;font-size:1.25em;line-height:1.25;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji""><span style="background-color:rgb(255,255,255)"><font color="#000000">Advantages</font></span></h3>
          <ul dir="auto" style="box-sizing:border-box;padding:0px;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
            <li style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000">Ability to introduce specialized for
                  type of range methods. For example, <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">Timespan</code> could
                  have <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">Duration
                    toDuration()</code> method, potential <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">IntegerRange</code> could
                  have something like <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">LongRange
                    toLongRange()</code> dur to limitations of
                  comparability between classes. This would be
                  impossible with structural class Range without
                  declaring additional static utility methods.</font></span></li>
            <li style="box-sizing:border-box;margin-top:0.25em"><span style="background-color:rgb(255,255,255)"><font color="#000000">Enhanced validation of annotaion
                  targets as classes, unlike generics, arent erased.</font></span></li>
          </ul>
          <h3 dir="auto" style="box-sizing:border-box;font-size:1.25em;line-height:1.25;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji""><span style="background-color:rgb(255,255,255)"><font color="#000000">Disadvantages</font></span></h3>
          <ul dir="auto" style="box-sizing:border-box;padding:0px;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
            <li style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000">Increased amount of classes to
                  maintain.</font></span></li>
            <li style="box-sizing:border-box;margin-top:0.25em"><span style="background-color:rgb(255,255,255)"><font color="#000000">Additional considerations would be
                  required before extending Range interface in case if
                  hierarchy non-sealed to ensure backward compatibility.</font></span></li>
          </ul>
          <h1 dir="auto" style="box-sizing:border-box;margin-right:0px;margin-left:0px;line-height:1.25;padding-bottom:0.3em;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji""><span style="background-color:rgb(255,255,255)"><font color="#000000">API Description</font></span></h1>
          <h3 dir="auto" style="box-sizing:border-box;font-size:1.25em;line-height:1.25;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji""><span style="background-color:rgb(255,255,255)"><font color="#000000">NB: Since date ranges is supposed to be
                one of the most popular if not the most popular use case
                for range, date-time libraries were main reference for
                interface design.</font></span></h3>
          <hr style="box-sizing:content-box;height:0.25em;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;border:0px;padding:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
          <h2 dir="auto" style="box-sizing:border-box;line-height:1.25;padding-bottom:0.3em;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji""><span style="background-color:rgb(255,255,255)"><font color="#000000">Section: Bounds</font></span></h2>
          <h3 dir="auto" style="box-sizing:border-box;font-size:1.25em;line-height:1.25;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji""><span style="background-color:rgb(255,255,255)"><font color="#000000">General notes</font></span></h3>
          <ul dir="auto" style="box-sizing:border-box;padding:0px;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
            <li style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000">In <strong style="box-sizing:border-box">Boost Date_Time</strong> (<code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">time_period.begin()</code>),
                  the start and end are always defined, meaning there is
                  no concept of unbounded intervals. Similarly, some
                  libraries like <strong style="box-sizing:border-box">Chrono</strong> in
                  Rust assume bounded intervals by default. In fact,
                  only a few libraries expose trully unbound ranges.
                  Although, while complexity of implementation is
                  increased by this corner cases, thier performance also
                  vastly increased by cutting amount of operations in
                  each method at least in half (For two-way unbound
                  interval, almost all operations return constnat
                  value).</font></span></li>
          </ul>
          <hr style="box-sizing:content-box;height:0.25em;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;border:0px;padding:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
          <h3 dir="auto" style="box-sizing:border-box;font-size:1.25em;line-height:1.25;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji""><code style="box-sizing:border-box;font-size:inherit;padding:0px 0.2em;margin:0px;border-radius:6px;background-color:rgb(255,255,255)"><font color="#000000">T start()</font></code></h3>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Description:</strong><br style="box-sizing:border-box">
                Returns the start of the range. If the range is
                unbounded at the start, this method throws an <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">UnsupportedOperationException</code>.
                This can be preemptively checked using <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">isBoundedAtStart()</code>.</font></span></p>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><strong style="box-sizing:border-box;background-color:rgb(255,255,255)"><font color="#000000">Alternatives:</font></strong></p>
          <ul dir="auto" style="box-sizing:border-box;padding:0px;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
            <li style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000">Method could return <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">Optional<T></code> instead
                  of throwing an exception. I see this two approaches
                  roughly identical in terms of pros/cons score, so
                  suggestions are much appreciated.</font></span></li>
          </ul>
          <hr style="box-sizing:content-box;height:0.25em;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;border:0px;padding:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
          <h3 dir="auto" style="box-sizing:border-box;font-size:1.25em;line-height:1.25;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji""><code style="box-sizing:border-box;font-size:inherit;padding:0px 0.2em;margin:0px;border-radius:6px;background-color:rgb(255,255,255)"><font color="#000000">T end()</font></code></h3>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Description</strong>:<br style="box-sizing:border-box">
                Returns the end of the range. If the range is unbounded
                at the end, this method throws an <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">UnsupportedOperationException</code>.
                Use <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">isBoundedAtEnd()</code> to
                check if the range is bounded.</font></span></p>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><strong style="box-sizing:border-box;background-color:rgb(255,255,255)"><font color="#000000">Alternatives:</font></strong></p>
          <ul dir="auto" style="box-sizing:border-box;padding:0px;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
            <li style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000">Simallarly to start(), method could
                  return <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">Optional<T></code> instead
                  of throwing an exception. I see this two approaches
                  roughly identical in terms of pros/cons score, so
                  suggestions are much appreciated.</font></span></li>
          </ul>
          <hr style="box-sizing:content-box;height:0.25em;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;border:0px;padding:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
          <h3 dir="auto" style="box-sizing:border-box;font-size:1.25em;line-height:1.25;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji""><code style="box-sizing:border-box;font-size:inherit;padding:0px 0.2em;margin:0px;border-radius:6px;background-color:rgb(255,255,255)"><font color="#000000">boolean isBoundedAtStart()</font></code></h3>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Description</strong>:<br style="box-sizing:border-box">
                Returns <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">true</code> if
                the range is bounded at the start. If unbounded, it
                returns <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">false</code>,
                meaning calling <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">start()</code> will
                throw an <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">UnsupportedOperationException</code>.</font></span></p>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Alternatives</strong>:</font></span></p>
          <ul dir="auto" style="box-sizing:border-box;padding:0px;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
            <li style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Joda-Time</strong>, <strong style="box-sizing:border-box">NodaTime</strong>, <strong style="box-sizing:border-box">Luxon</strong>, and <strong style="box-sizing:border-box">Moment.js</strong> do
                  not explicitly support unbounded intervals by default
                  but can use <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">null</code> or
                  special values to represent unbounded starts.</font></span></li>
            <li style="box-sizing:border-box;margin-top:0.25em"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Boost
                    Date_Time</strong> and <strong style="box-sizing:border-box">Chrono</strong> don’t
                  support unbounded ranges directly, so this method is
                  unnecessary.</font></span></li>
          </ul>
          <hr style="box-sizing:content-box;height:0.25em;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;border:0px;padding:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
          <h3 dir="auto" style="box-sizing:border-box;font-size:1.25em;line-height:1.25;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji""><code style="box-sizing:border-box;font-size:inherit;padding:0px 0.2em;margin:0px;border-radius:6px;background-color:rgb(255,255,255)"><font color="#000000">boolean isBoundedAtEnd()</font></code></h3>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Description</strong>:<br style="box-sizing:border-box">
                Returns <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">true</code> if
                the range is bounded at the end. A false value means the
                range is unbounded at the end, and calling <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">end()</code> will
                throw an <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">UnsupportedOperationException</code>.</font></span></p>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Alternatives</strong>:</font></span></p>
          <ul dir="auto" style="box-sizing:border-box;padding:0px;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
            <li style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000">Similar to <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">isBoundedAtStart()</code>,
                  most libraries don’t have built-in unbounded
                  intervals, but the concept can be simulated using <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">null</code>,
                  minimal/maximal possible value etc. Pros and cons were
                  described in API notes.</font></span></li>
          </ul>
          <hr style="box-sizing:content-box;height:0.25em;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;border:0px;padding:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
          <h2 dir="auto" style="box-sizing:border-box;line-height:1.25;padding-bottom:0.3em;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji""><span style="background-color:rgb(255,255,255)"><font color="#000000">Section: boolean operations</font></span></h2>
          <h3 dir="auto" style="box-sizing:border-box;font-size:1.25em;line-height:1.25;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji""><code style="box-sizing:border-box;font-size:inherit;padding:0px 0.2em;margin:0px;border-radius:6px;background-color:rgb(255,255,255)"><font color="#000000">boolean contains(T instant)</font></code></h3>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Description</strong>:<br style="box-sizing:border-box">
                Returns <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">true</code> if
                the given <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">instant</code> falls
                within the start and end bounds of the range, otherwise
                returns <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">false</code>.</font></span></p>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Similar
                  Methods in other libraries</strong>:</font></span></p>
          <ul dir="auto" style="box-sizing:border-box;padding:0px;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
            <li style="box-sizing:border-box"><strong style="box-sizing:border-box;background-color:rgb(255,255,255)"><font color="#000000">NodaTime (<code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">Interval.Contains</code>)</font></strong></li>
            <li style="box-sizing:border-box;margin-top:0.25em"><strong style="box-sizing:border-box;background-color:rgb(255,255,255)"><font color="#000000">Joda-Time (<code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">Interval.contains</code>)</font></strong></li>
            <li style="box-sizing:border-box;margin-top:0.25em"><strong style="box-sizing:border-box;background-color:rgb(255,255,255)"><font color="#000000">Luxon (<code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">Interval.contains</code>)</font></strong></li>
            <li style="box-sizing:border-box;margin-top:0.25em"><strong style="box-sizing:border-box;background-color:rgb(255,255,255)"><font color="#000000">Boost Date_Time (<code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">time_period.contains()</code>)</font></strong></li>
            <li style="box-sizing:border-box;margin-top:0.25em"><span style="background-color:rgb(255,255,255)"><font color="#000000">And many others...</font></span></li>
          </ul>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Differences
                  with existing APIs</strong>:</font></span></p>
          <ul dir="auto" style="box-sizing:border-box;padding:0px;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
            <li style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Moment.js</strong> doesn’t
                  provide a direct <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">contains</code> method
                  but the <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">moment-range</code> plugin
                  adds this functionality with <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">range.contains()</code>.</font></span></li>
          </ul>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Note</strong>:
                this method is present in most interval implementations.
                Terefore, I concider as basic and unremovable from the
                API.</font></span></p>
          <hr style="box-sizing:content-box;height:0.25em;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;border:0px;padding:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
          <h3 dir="auto" style="box-sizing:border-box;font-size:1.25em;line-height:1.25;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji""><code style="box-sizing:border-box;font-size:inherit;padding:0px 0.2em;margin:0px;border-radius:6px;background-color:rgb(255,255,255)"><font color="#000000">boolean overlaps(Range<? extends
                T> other)</font></code></h3>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Description</strong>:<br style="box-sizing:border-box">
                Checks if the current range overlaps with another range.
                Returns <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">true</code> if
                the two ranges overlap, otherwise returns <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">false</code>.</font></span></p>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Similar
                  Methods in other libraries</strong>:</font></span></p>
          <ul dir="auto" style="box-sizing:border-box;padding:0px;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
            <li style="box-sizing:border-box"><strong style="box-sizing:border-box;background-color:rgb(255,255,255)"><font color="#000000">NodaTime (<code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">Interval.Overlaps</code>)</font></strong></li>
            <li style="box-sizing:border-box;margin-top:0.25em"><strong style="box-sizing:border-box;background-color:rgb(255,255,255)"><font color="#000000">Joda-Time (<code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">Interval.overlaps</code>)</font></strong></li>
            <li style="box-sizing:border-box;margin-top:0.25em"><strong style="box-sizing:border-box;background-color:rgb(255,255,255)"><font color="#000000">Luxon (<code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">Interval.overlaps</code>)</font></strong></li>
            <li style="box-sizing:border-box;margin-top:0.25em"><strong style="box-sizing:border-box;background-color:rgb(255,255,255)"><font color="#000000">Boost Date_Time (<code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">time_period.intersects()</code>)</font></strong></li>
            <li style="box-sizing:border-box;margin-top:0.25em"><span style="background-color:rgb(255,255,255)"><font color="#000000">And many others...</font></span></li>
          </ul>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Differences
                  with existing APIs</strong>:</font></span></p>
          <ul dir="auto" style="box-sizing:border-box;padding:0px;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
            <li style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Moment.js</strong>:
                  The <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">moment-range</code> plugin
                  provides a similar <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">overlaps()</code> method
                  to check overlap.</font></span></li>
            <li style="box-sizing:border-box;margin-top:0.25em"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Chrono</strong> relies
                  on custom interval intersection logic.</font></span></li>
          </ul>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Note</strong>:
                this method is present in most interval implementations.
                Terefore, I concider as basic and unremovable from the
                API.</font></span></p>
          <hr style="box-sizing:content-box;height:0.25em;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;border:0px;padding:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
          <h3 dir="auto" style="box-sizing:border-box;font-size:1.25em;line-height:1.25;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji""><span style="background-color:rgb(255,255,255)"><font color="#000000">General notes on next two methods</font></span></h3>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000">Most of the libraries propose API like <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">isBefore(T
                  point)</code> or do not provide methods like this at
                all. Since current implementation throws an exception if
                interval is not bounded, trivial check for <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">isBefore</code> could
                become 4-6 lines long. The question basically comes down
                to whether the Range class should be more
                data-structure-like or object-like. I would argue that
                at least <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">isBefore(T
                  moment)</code> is required, especially since ranges
                can be negative currently. Existence of boolean
                isBefore(Range<? extends T> other)<code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">and
                  similar</code>isAfter` is up to discussion.</font></span></p>
          <h3 dir="auto" style="box-sizing:border-box;font-size:1.25em;line-height:1.25;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji""><code style="box-sizing:border-box;font-size:inherit;padding:0px 0.2em;margin:0px;border-radius:6px;background-color:rgb(255,255,255)"><font color="#000000">boolean isBefore(Range<? extends
                T> other)</font></code></h3>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Description</strong>:<br style="box-sizing:border-box">
                Returns <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">true</code> if
                the current range is strictly before another range
                (i.e., ends before the other range starts).</font></span></p>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Differences
                  with other libraries</strong>:</font></span></p>
          <ul dir="auto" style="box-sizing:border-box;padding:0px;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
            <li style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">NodaTime</strong>:
                  You’d manually compare <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">End</code> of
                  one interval with the <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">Start</code> of
                  another.</font></span></li>
            <li style="box-sizing:border-box;margin-top:0.25em"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Joda-Time</strong>:
                  Manual comparison with <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">Interval.getEnd()</code> and <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">Interval.getStart()</code>.</font></span></li>
            <li style="box-sizing:border-box;margin-top:0.25em"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Boost
                    Date_Time</strong> and <strong style="box-sizing:border-box">Chrono</strong> would
                  use custom logic to compare <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">time_period</code> or
                  ranges of time, since they don’t have a direct
                  equivalent of <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">isBefore()</code>.</font></span></li>
          </ul>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><strong style="box-sizing:border-box;background-color:rgb(255,255,255)"><font color="#000000">Alternatives</font></strong></p>
          <ul dir="auto" style="box-sizing:border-box;padding:0px;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
            <li style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000">Most of the libraries propose API
                  like <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">isBefore(T
                    point)</code> or do not provide methods like this at
                  all. Since current implementation throws an exception
                  if interval is not bounded, trivial check for <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">isBefore</code> could
                  become 4-6 lines long. The question basically comes
                  down to whether the Range class should be more
                  data-structure-like or object-like. I would argue that
                  at least <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">isBefore(T
                    moment)</code> is required, especially since ranges
                  can be negative currently</font></span></li>
          </ul>
          <hr style="box-sizing:content-box;height:0.25em;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;border:0px;padding:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
          <h3 dir="auto" style="box-sizing:border-box;font-size:1.25em;line-height:1.25;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji""><code style="box-sizing:border-box;font-size:inherit;padding:0px 0.2em;margin:0px;border-radius:6px;background-color:rgb(255,255,255)"><font color="#000000">boolean isAfter(Range<? extends T>
                other)</font></code></h3>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Description</strong>:<br style="box-sizing:border-box">
                Returns <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">true</code> if
                the current range is strictly after another range (i.e.,
                starts after the other range ends).</font></span></p>
          <ul dir="auto" style="box-sizing:border-box;padding:0px;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
            <li style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Similar
                    Methods</strong>:</font></span>
              <ul dir="auto" style="box-sizing:border-box;padding:0px;margin-top:0px;margin-bottom:0px">
                <li style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000">Similar to <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">isBefore()</code>,
                      manual comparisons are used in <strong style="box-sizing:border-box">NodaTime</strong>, <strong style="box-sizing:border-box">Joda-Time</strong>,
                      and <strong style="box-sizing:border-box">Luxon</strong> an
                      others.</font></span></li>
              </ul>
            </li>
          </ul>
          <hr style="box-sizing:content-box;height:0.25em;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;border:0px;padding:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
          <h3 dir="auto" style="box-sizing:border-box;font-size:1.25em;line-height:1.25;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji""><code style="box-sizing:border-box;font-size:inherit;padding:0px 0.2em;margin:0px;border-radius:6px;background-color:rgb(255,255,255)"><font color="#000000">boolean isBefore(T point)</font></code></h3>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Description:</strong><br style="box-sizing:border-box">
                Determines if the span ends before the given point. This
                is useful when you need to check whether a time span
                occurs entirely before a specific point.</font></span></p>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Alternatives</strong>:</font></span></p>
          <ul dir="auto" style="box-sizing:border-box;padding:0px;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
            <li style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000">Method could be removed from APi at
                  all, if Range is desired to be skewed towards being
                  data structure.</font></span></li>
          </ul>
          <hr style="box-sizing:content-box;height:0.25em;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;border:0px;padding:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
          <h3 dir="auto" style="box-sizing:border-box;font-size:1.25em;line-height:1.25;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji""><code style="box-sizing:border-box;font-size:inherit;padding:0px 0.2em;margin:0px;border-radius:6px;background-color:rgb(255,255,255)"><font color="#000000">boolean isAfter(T point)</font></code></h3>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Description:</strong><br style="box-sizing:border-box">
                Determines if the span starts after the given point.
                This is useful when you need to check whether a time
                span occurs entirely after a specific point.</font></span></p>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Alternatives</strong>:</font></span></p>
          <ul dir="auto" style="box-sizing:border-box;padding:0px;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
            <li style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000">Similarly to <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">boolean
                    isBefore(T point)</code>, method could be removed
                  from APi at all, if Range is desired to be skewed
                  towards being data structure.</font></span></li>
          </ul>
          <hr style="box-sizing:content-box;height:0.25em;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;border:0px;padding:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
          <h3 dir="auto" style="box-sizing:border-box;font-size:1.25em;line-height:1.25;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji""><code style="box-sizing:border-box;font-size:inherit;padding:0px 0.2em;margin:0px;border-radius:6px;background-color:rgb(255,255,255)"><font color="#000000">boolean isNegative()</font></code></h3>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Description</strong>:<br style="box-sizing:border-box">
                Returns <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">true</code> if
                the start of the range is after the end, indicating a
                "negative" range.</font></span></p>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><strong style="box-sizing:border-box;background-color:rgb(255,255,255)"><font color="#000000">Alternatives:</font></strong></p>
          <ul dir="auto" style="box-sizing:border-box;padding:0px;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
            <li style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000">if concidered too niche, negatie
                  timespans could be removed from model.</font></span></li>
          </ul>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Note:</strong> this
                one is most questionable for me. Do we really need
                negative ranges? This is most entirely required in
                numeric ranges and diagrams, while introdcues huge
                complexity overhead for majority that doesnt need this
                feature. Negativity might be confusing for users. Would
                love to hear thoughs on this matter</font></span></p>
          <hr style="box-sizing:content-box;height:0.25em;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;border:0px;padding:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
          <h2 dir="auto" style="box-sizing:border-box;line-height:1.25;padding-bottom:0.3em;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji""><span style="background-color:rgb(255,255,255)"><font color="#000000">Section: Range arithmetics</font></span></h2>
          <h3 dir="auto" style="box-sizing:border-box;font-size:1.25em;line-height:1.25;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji""><code style="box-sizing:border-box;font-size:inherit;padding:0px 0.2em;margin:0px;border-radius:6px;background-color:rgb(255,255,255)"><font color="#000000">Optional<Range<T>>
                intersection(Range<? extends T> other)</font></code></h3>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Description</strong>:<br style="box-sizing:border-box">
                Returns the intersection of the current range with
                another range. If the ranges do not overlap, the result
                is an empty <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">Optional</code>.
                If they overlap, the intersection is returned.</font></span></p>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Similar
                  Methods</strong>:</font></span></p>
          <ul dir="auto" style="box-sizing:border-box;padding:0px;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
            <li style="box-sizing:border-box"><strong style="box-sizing:border-box;background-color:rgb(255,255,255)"><font color="#000000">NodaTime (<code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">Interval.Intersection()</code>)</font></strong></li>
            <li style="box-sizing:border-box;margin-top:0.25em"><strong style="box-sizing:border-box;background-color:rgb(255,255,255)"><font color="#000000">Moment.js (via <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">moment-range</code>, <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">range.intersect()</code>)</font></strong></li>
            <li style="box-sizing:border-box;margin-top:0.25em"><strong style="box-sizing:border-box;background-color:rgb(255,255,255)"><font color="#000000">Joda-Time (<code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">Interval.overlap()</code>)</font></strong></li>
            <li style="box-sizing:border-box;margin-top:0.25em"><span style="background-color:rgb(255,255,255)"><font color="#000000">And many others...</font></span></li>
          </ul>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Differences
                  with existing APIs</strong>:</font></span></p>
          <ul dir="auto" style="box-sizing:border-box;padding:0px;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
            <li style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Boost
                    Date_Time</strong> returns an empty <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">time_period</code> if
                  no overlap exists, instead of an <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">Optional</code>.
                  Some libraries return <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">null</code> (e.g., <strong style="box-sizing:border-box">NodaTime</strong>).</font></span></li>
            <li style="box-sizing:border-box;margin-top:0.25em"><span style="background-color:rgb(255,255,255)"><font color="#000000">Other libraries return null if
                  intervals arent overlapping. This is undesrable, so
                  optional returned instead.</font></span></li>
          </ul>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Note</strong>:
                this method is present in most interval implementations.
                Terefore, I concider as basic and unremovable from the
                API.</font></span></p>
          <hr style="box-sizing:content-box;height:0.25em;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;border:0px;padding:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
          <h3 dir="auto" style="box-sizing:border-box;font-size:1.25em;line-height:1.25;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji""><code style="box-sizing:border-box;font-size:inherit;padding:0px 0.2em;margin:0px;border-radius:6px;background-color:rgb(255,255,255)"><font color="#000000">Range<T>[] union(Range<?
                extends T> other)</font></code></h3>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Description</strong>:<br style="box-sizing:border-box">
                Returns the union of two ranges. If the ranges overlap,
                the result is a single combined range. If they do not
                overlap, the result is an array of two separate ranges.</font></span></p>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Differences
                  with existing APIs</strong>:</font></span></p>
          <ul dir="auto" style="box-sizing:border-box;padding:0px;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
            <li style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">NodaTime</strong> and <strong style="box-sizing:border-box">Joda-Time</strong> support
                  similar logic using custom union handling.</font></span></li>
            <li style="box-sizing:border-box;margin-top:0.25em"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Boost
                    Date_Time</strong> has no built-in <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">union()</code> function
                  but you can write custom logic to combine or separate
                  intervals.</font></span></li>
          </ul>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Note</strong>:
                Behaviour of this method is up to change. Currently, it
                returns array for maximal performance, but it can (and
                most likely should) be wrapped in some monadic class. As
                an alternative, there may be support for non-continuous
                ranges (ones with gaps inside them), then this method
                should return thise kind of range.</font></span></p>
          <hr style="box-sizing:content-box;height:0.25em;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;border:0px;padding:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
          <h3 dir="auto" style="box-sizing:border-box;font-size:1.25em;line-height:1.25;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji""><code style="box-sizing:border-box;font-size:inherit;padding:0px 0.2em;margin:0px;border-radius:6px;background-color:rgb(255,255,255)"><font color="#000000">Optional<Range<T>>
                gap(Range<? extends T> other)</font></code></h3>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Description</strong>:<br style="box-sizing:border-box">
                Returns the gap between two ranges, if they do not
                overlap. If they overlap, the result is an empty <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">Optional</code>.</font></span></p>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Differences
                  with existing APIs</strong>:</font></span></p>
          <ul dir="auto" style="box-sizing:border-box;padding:0px;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
            <li style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">NodaTime</strong> and <strong style="box-sizing:border-box">Joda-Time</strong> support
                  custom logic to calculate the gap using <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">isBefore()</code>, <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">isAfter()</code>,
                  and manual calculations of the gap.</font></span></li>
            <li style="box-sizing:border-box;margin-top:0.25em"><span style="background-color:rgb(255,255,255)"><font color="#000000">Other libraries return null if
                  intervals are overlapping. This is undesrable, so
                  optional returned instead.</font></span></li>
          </ul>
          <hr style="box-sizing:content-box;height:0.25em;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;border:0px;padding:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
          <h2 dir="auto" style="box-sizing:border-box;line-height:1.25;padding-bottom:0.3em;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji""><span style="background-color:rgb(255,255,255)"><font color="#000000">Section: potential methods</font></span></h2>
          <h3 dir="auto" style="box-sizing:border-box;font-size:1.25em;line-height:1.25;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji""><code style="box-sizing:border-box;font-size:inherit;padding:0px 0.2em;margin:0px;border-radius:6px;background-color:rgb(255,255,255)"><font color="#000000">boolean isEmpty()</font></code></h3>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Description:</strong><br style="box-sizing:border-box">
                Determines if the range is "empty,"</font></span></p>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000">Empty range is its own, separate type of
                range (basically opposite of unbounded range). There are
                many questions regrading this type of range. Is it
                bounded at start or end? If so, what should <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">start()</code> or <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">end()</code> return.
                Them throwing an exception would violate current
                contract between <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">IsBoundedAtX()</code> and
                'x()` methods.</font></span></p>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><strong style="box-sizing:border-box;background-color:rgb(255,255,255)"><font color="#000000">Advantages</font></strong></p>
          <ul dir="auto" style="box-sizing:border-box;padding:0px;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
            <li style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000">Returning empty range instead of
                  Optional might be more user-friendly</font></span></li>
          </ul>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><strong style="box-sizing:border-box;background-color:rgb(255,255,255)"><font color="#000000">Disadvantages</font></strong></p>
          <ul dir="auto" style="box-sizing:border-box;padding:0px;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
            <li style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000">One more concept in the API model</font></span></li>
            <li style="box-sizing:border-box;margin-top:0.25em"><span style="background-color:rgb(255,255,255)"><font color="#000000">Corner case in <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">IsBoundedAtX()</code> and
                  'x()` contract.</font></span></li>
          </ul>
          <h3 dir="auto" style="box-sizing:border-box;font-size:1.25em;line-height:1.25;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji""><span style="background-color:rgb(255,255,255)"><font color="#000000">Potential Methods for API Enhancement</font></span></h3>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000">In this section, we explore methods that
                could be added to the API, comparing them with similar
                functionality in popular time-related libraries. These
                methods enhance the versatility and clarity of the <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">Range<T></code> implementation,
                especially in the context of temporal, numeric, and
                other domain-specific ranges. Some of these methods are
                inspired by well-established libraries, while others are
                novel suggestions.</font></span></p>
          <hr style="box-sizing:content-box;height:0.25em;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;border:0px;padding:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
          <h3 dir="auto" style="box-sizing:border-box;font-size:1.25em;line-height:1.25;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji""><code style="box-sizing:border-box;font-size:inherit;padding:0px 0.2em;margin:0px;border-radius:6px;background-color:rgb(255,255,255)"><font color="#000000">boolean encloses(Range<? extends
                T> other)</font></code></h3>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Description</strong>:<br style="box-sizing:border-box">
                Checks whether the current range completely encloses
                another range, i.e., the other range starts after or at
                the start of the current range and ends before or at the
                end of the current range.</font></span></p>
          <ul dir="auto" style="box-sizing:border-box;padding:0px;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
            <li style="box-sizing:border-box">
              <p dir="auto" style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Similar Methods in
                      Other Libraries</strong>:</font></span></p>
              <ul dir="auto" style="box-sizing:border-box;padding:0px;margin-top:0px;margin-bottom:0px">
                <li style="box-sizing:border-box"><strong style="box-sizing:border-box;background-color:rgb(255,255,255)"><font color="#000000">NodaTime (<code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">Interval.ContainedBy</code>)</font></strong></li>
                <li style="box-sizing:border-box;margin-top:0.25em"><strong style="box-sizing:border-box;background-color:rgb(255,255,255)"><font color="#000000">Joda-Time (<code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">Interval.contains</code>)</font></strong></li>
                <li style="box-sizing:border-box;margin-top:0.25em"><strong style="box-sizing:border-box;background-color:rgb(255,255,255)"><font color="#000000">Luxon (<code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">Interval.contains</code>)</font></strong></li>
                <li style="box-sizing:border-box;margin-top:0.25em"><strong style="box-sizing:border-box;background-color:rgb(255,255,255)"><font color="#000000">Boost Date_Time (<code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">time_period.contains()</code>)</font></strong></li>
              </ul>
            </li>
            <li style="box-sizing:border-box;margin-top:0.25em">
              <p dir="auto" style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Differences with
                      Existing APIs</strong>:</font></span></p>
              <ul dir="auto" style="box-sizing:border-box;padding:0px;margin-top:0px;margin-bottom:0px">
                <li style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000">Some libraries handle <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">encloses()</code> and <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">contains()</code> in
                      the same method. For clarity, this API can
                      separate the two, where <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">contains()</code> is
                      used for checking individual points and <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">encloses()</code> is
                      for range-level comparison.</font></span></li>
              </ul>
            </li>
          </ul>
          <hr style="box-sizing:content-box;height:0.25em;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;border:0px;padding:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
          <h3 dir="auto" style="box-sizing:border-box;font-size:1.25em;line-height:1.25;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji""><code style="box-sizing:border-box;font-size:inherit;padding:0px 0.2em;margin:0px;border-radius:6px;background-color:rgb(255,255,255)"><font color="#000000">boolean abuts(Range<? extends T>
                other)</font></code></h3>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Description</strong>:<br style="box-sizing:border-box">
                Returns <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">true</code> if
                the current range abuts (i.e., touches but does not
                overlap) with another range. This method is useful when
                determining whether two ranges are adjacent but do not
                overlap.</font></span></p>
          <ul dir="auto" style="box-sizing:border-box;padding:0px;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
            <li style="box-sizing:border-box">
              <p dir="auto" style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Similar Methods in
                      Other Libraries</strong>:</font></span></p>
              <ul dir="auto" style="box-sizing:border-box;padding:0px;margin-top:0px;margin-bottom:0px">
                <li style="box-sizing:border-box"><strong style="box-sizing:border-box;background-color:rgb(255,255,255)"><font color="#000000">NodaTime (<code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">Interval.Abuts</code>)</font></strong></li>
              </ul>
            </li>
            <li style="box-sizing:border-box;margin-top:0.25em">
              <p dir="auto" style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Alternatives</strong>:</font></span></p>
              <ul dir="auto" style="box-sizing:border-box;padding:0px;margin-top:0px;margin-bottom:0px">
                <li style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000">Instead of this method, users
                      could manually compare the <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">end</code> of
                      one range and the <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">start</code> of
                      another, but including <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">abuts()</code> in
                      the API simplifies the logic and reduces
                      error-prone comparisons.</font></span></li>
              </ul>
            </li>
          </ul>
          <hr style="box-sizing:content-box;height:0.25em;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;border:0px;padding:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
          <h3 dir="auto" style="box-sizing:border-box;font-size:1.25em;line-height:1.25;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji""><code style="box-sizing:border-box;font-size:inherit;padding:0px 0.2em;margin:0px;border-radius:6px;background-color:rgb(255,255,255)"><font color="#000000">Range<T> extendTo(T point)</font></code></h3>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Description</strong>:<br style="box-sizing:border-box">
                Returns a new range that extends the current range to
                include the given point. If the point is already within
                the range, it returns the current range. Otherwise, it
                extends either the start or end, depending on the
                point's position relative to the range.</font></span></p>
          <ul dir="auto" style="box-sizing:border-box;padding:0px;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
            <li style="box-sizing:border-box">
              <p dir="auto" style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Similar Methods in
                      Other Libraries</strong>:</font></span></p>
              <ul dir="auto" style="box-sizing:border-box;padding:0px;margin-top:0px;margin-bottom:0px">
                <li style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">NodaTime</strong> and <strong style="box-sizing:border-box">Joda-Time</strong> do
                      not have explicit methods for this, but users can
                      manipulate intervals manually.</font></span></li>
                <li style="box-sizing:border-box;margin-top:0.25em"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Moment.js</strong>:
                      The <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">moment-range</code> plugin
                      offers similar logic via manual adjustments to the
                      range.</font></span></li>
              </ul>
            </li>
            <li style="box-sizing:border-box;margin-top:0.25em">
              <p dir="auto" style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Advantages</strong>:</font></span></p>
              <ul dir="auto" style="box-sizing:border-box;padding:0px;margin-top:0px;margin-bottom:0px">
                <li style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000">In contrast to manual adjustment,
                      this method automates the process of extending
                      ranges, which can be useful in situations where
                      ranges need to be dynamically modified over time
                      (e.g., expanding time intervals in streaming
                      data).</font></span></li>
              </ul>
            </li>
          </ul>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Alternatives</strong>:</font></span></p>
          <ul dir="auto" style="box-sizing:border-box;padding:0px;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
            <li style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000">Users could manually adjust the range
                  using <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">start()</code> and <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">end()</code> "withers",
                  but an explicit <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">extendTo()</code> method
                  offers a more intuitive, built-in approach</font></span></li>
          </ul>
          <hr style="box-sizing:content-box;height:0.25em;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;border:0px;padding:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
          <h3 dir="auto" style="box-sizing:border-box;font-size:1.25em;line-height:1.25;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji""><code style="box-sizing:border-box;font-size:inherit;padding:0px 0.2em;margin:0px;border-radius:6px;background-color:rgb(255,255,255)"><font color="#000000">Range<T> shrinkTo(T point)</font></code></h3>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Description</strong>:<br style="box-sizing:border-box">
                Returns a new range that shrinks the current range to
                exclude the given point, if possible. If the point is
                within the range, the range is modified so that it no
                longer includes the point. This is useful for splitting
                ranges or excluding unwanted time periods or values.</font></span></p>
          <ul dir="auto" style="box-sizing:border-box;padding:0px;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
            <li style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Similar
                    Methods in Other Libraries</strong>:<br style="box-sizing:border-box">
                  No major time libraries provide a direct equivalent to
                  this functionality, although similar operations can be
                  manually performed by manipulating <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">start</code> and <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">end</code>.</font></span></li>
          </ul>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Alternatives</strong>:</font></span></p>
          <ul dir="auto" style="box-sizing:border-box;padding:0px;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
            <li style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000">Similarly to <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">extendTo</code>,
                  users could manually adjust the range using <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">start()</code> and <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">end()</code> "withers",
                  but an explicit <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">shrinkTo()</code> method
                  offers a more intuitive, built-in approach.</font></span></li>
          </ul>
          <hr style="box-sizing:content-box;height:0.25em;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;border:0px;padding:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
          <h3 dir="auto" style="box-sizing:border-box;font-size:1.25em;line-height:1.25;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji""><code style="box-sizing:border-box;font-size:inherit;padding:0px 0.2em;margin:0px;border-radius:6px;background-color:rgb(255,255,255)"><font color="#000000">Range<T>[] difference(Range<?
                extends T> other)</font></code></h3>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Description</strong>:<br style="box-sizing:border-box">
                Returns the difference between the current range and
                another range (XOR operations). If the ranges overlap,
                the result is a new range or two ranges representing the
                non-overlapping portions. If the ranges do not overlap,
                the result is the current range.</font></span></p>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Adavntages</strong>:</font></span></p>
          <ul dir="auto" style="box-sizing:border-box;padding:0px;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
            <li style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000">This method simplifies computing the
                  difference between two ranges, reducing the need for
                  manual boundary comparisons.</font></span></li>
            <li style="box-sizing:border-box;margin-top:0.25em"><span style="background-color:rgb(255,255,255)"><font color="#000000">Completes set of methods required for
                  ranges arithmetics</font></span></li>
          </ul>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Disdavntages</strong>:</font></span></p>
          <ul dir="auto" style="box-sizing:border-box;padding:0px;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
            <li style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000">THis method is inverse of <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">union(Range<?
                    extends T> other)</code>, so it has same design
                  problems as union.</font></span></li>
          </ul>
          <hr style="box-sizing:content-box;height:0.25em;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;border:0px;padding:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
          <h3 dir="auto" style="box-sizing:border-box;font-size:1.25em;line-height:1.25;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji""><code style="box-sizing:border-box;font-size:inherit;padding:0px 0.2em;margin:0px;border-radius:6px;background-color:rgb(255,255,255)"><font color="#000000">Range<T> clamp(Range<? extends
                T> bounds)</font></code></h3>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Description</strong>:<br style="box-sizing:border-box">
                Clamps the current range to fit within the specified
                bounds. If the current range extends outside of the
                bounds, it is shortened to fit within the bounds. If the
                range already fits within the bounds, it is returned
                unchanged.</font></span></p>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Advantages</strong>:</font></span></p>
          <ul dir="auto" style="box-sizing:border-box;padding:0px;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
            <li style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000">This method streamlines the process of
                  adjusting a range to a set of bounds, which is
                  especially useful in time-based operations where
                  ranges must be constrained within specific periods
                  (e.g., scheduling).</font></span></li>
          </ul>
          <hr style="box-sizing:content-box;height:0.25em;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;border:0px;padding:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
          <h3 dir="auto" style="box-sizing:border-box;font-size:1.25em;line-height:1.25;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji""><code style="box-sizing:border-box;font-size:inherit;padding:0px 0.2em;margin:0px;border-radius:6px;background-color:rgb(255,255,255)"><font color="#000000">boolean isContiguousWith(Range<?
                extends T> other)</font></code></h3>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Description</strong>:<br style="box-sizing:border-box">
                Determines if the current range is contiguous with
                another range, meaning that the two ranges touch or
                overlap without leaving any gaps. This is particularly
                useful when combining ranges or ensuring that a sequence
                of ranges forms a continuous block.</font></span></p>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Alternatives</strong>:</font></span></p>
          <ul dir="auto" style="box-sizing:border-box;padding:0px;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
            <li style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000">Users could manually compare the <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">end</code> and <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">start</code> of
                  ranges to check contiguity, but this method offers a
                  more explicit and efficient way to perform the check.</font></span></li>
          </ul>
          <hr style="box-sizing:content-box;height:0.25em;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;border:0px;padding:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
          <h3 dir="auto" style="box-sizing:border-box;font-size:1.25em;line-height:1.25;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji""><code style="box-sizing:border-box;font-size:inherit;padding:0px 0.2em;margin:0px;border-radius:6px;background-color:rgb(255,255,255)"><font color="#000000">Optional<Range<T>>
                asBounded()</font></code></h3>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Description</strong>:<br style="box-sizing:border-box">
                Returns the bounded version of the current range, if one
                exists. If the range is already bounded, it returns the
                range unchanged. If the range is unbounded, the result
                is an empty <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">Optional</code>.
                Could be used as a monade for handling errors if range
                that is expected to be bounded, but unbounded one has
                been recieved.</font></span></p>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><strong style="box-sizing:border-box;background-color:rgb(255,255,255)"><font color="#000000">Alternatives:</font></strong></p>
          <ul dir="auto" style="box-sizing:border-box;padding:0px;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px">
            <li style="box-sizing:border-box"><span style="background-color:rgb(255,255,255)"><font color="#000000">API could explicitly expose
                  BoundedRange marker (or not marker) interface to
                  verify range that is recieved is bounded at compile
                  time. Interface could provide some adapter methods for
                  converting unknown-boundness ranges to bounded, and
                  have specific behaviour for error cases.</font></span></li>
          </ul>
          <h3 dir="auto" style="box-sizing:border-box;font-size:1.25em;line-height:1.25;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji""><code style="box-sizing:border-box;font-size:inherit;padding:0px 0.2em;margin:0px;border-radius:6px;background-color:rgb(255,255,255)"><font color="#000000">Range<T>[] splitAt(T point)</font></code></h3>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Description</strong>:
                Splits the current range into two sub-ranges at the
                specified point. If the point lies outside the range, it
                returns an array of length 1 with initial range. If
                rang <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">contains()</code> point,
                than array of length 2 is returned, whith two ranges
                splitted accross given point.</font></span></p>
          <h3 dir="auto" style="box-sizing:border-box;font-size:1.25em;line-height:1.25;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji""><code style="box-sizing:border-box;font-size:inherit;padding:0px 0.2em;margin:0px;border-radius:6px;background-color:rgb(255,255,255)"><font color="#000000">List<Range<T>> splitInto(int
                n)</font></code></h3>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Description</strong>:<br style="box-sizing:border-box">
                Splits the current range into <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">n</code> equal
                sub-ranges. If the range cannot be evenly divided, the
                last range may be slightly larger to accommodate the
                remaining span. Throws <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">UnsupportedOperationException</code> if
                range is at least half-unbounded.</font></span></p>
          <h3 dir="auto" style="box-sizing:border-box;font-size:1.25em;line-height:1.25;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji""><code style="box-sizing:border-box;font-size:inherit;padding:0px 0.2em;margin:0px;border-radius:6px;background-color:rgb(255,255,255)"><font color="#000000">Stream<T> pointsFromStartToEnd(???
                step)</font></code></h3>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Description</strong>:
                Returns a list of points that are evenly spaced from the
                start to the end of the range, using the specified step
                size. Throws <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">UnsupportedOperationException</code> if
                range is <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">isBoundedAtStart()</code> returns
                false.</font></span></p>
          <p dir="auto" style="box-sizing:border-box;margin-top:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-size:14px"><span style="background-color:rgb(255,255,255)"><font color="#000000"><strong style="box-sizing:border-box">Note:</strong> while
                this method could have various use cases, It is not
                clear how step could be provided. One of the options is
                to pass <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">Function<T,
                  T></code> that is invoked on each value until value
                is <code style="box-sizing:border-box;font-size:11.9px;padding:0.2em 0.4em;margin:0px;border-radius:6px">>
                  end(</code>) instrad of constant step.</font></span></p>
        </div>
      </div>
    </blockquote>
    <br>
  </div>

</blockquote></div>