Files
addr2line
adler
aho_corasick
arrayvec
atty
backtrace
backtrace
symbolize
bitflags
camino
cargo_metadata
cargo_nextest
cargo_platform
cfg_expr
cfg_if
chrono
format
naive
offset
sys
clap
build
app
arg
output
parse
util
clap_derive
derives
utils
color_eyre
config
crossbeam_channel
crossbeam_deque
crossbeam_epoch
crossbeam_utils
ctrlc
datatest_stable
debug_ignore
duct
either
enable_ansi_support
env_logger
filter
fmt
eyre
fixedbitset
gimli
read
guppy
graph
cargo
feature
petgraph_support
platform
guppy_workspace_hack
hashbrown
humantime
humantime_serde
indent_write
indenter
indexmap
is_ci
itertools
combinations.rscombinations_with_replacement.rsconcat_impl.rscons_tuples_impl.rsdiff.rsduplicates_impl.rseither_or_both.rsexactly_one_err.rsflatten_ok.rsformat.rsfree.rsgroup_map.rsgroupbylazy.rsgrouping_map.rsimpl_macros.rsintersperse.rsk_smallest.rskmerge_impl.rslazy_buffer.rslib.rsmerge_join.rsminmax.rsmultipeek_impl.rspad_tail.rspeek_nth.rspeeking_take_while.rspermutations.rspowerset.rsprocess_results_impl.rsput_back_n_impl.rsrciter_impl.rsrepeatn.rssize_hint.rssources.rstee.rstuple_impl.rsunique_impl.rsunziptuple.rswith_position.rszip_eq_impl.rszip_longest.rsziptuple.rs
itoa
lazy_static
lexical_core
atof
algorithm
atoi
float
ftoa
itoa
util
libc
unix
log
memchr
memchr
memmem
memoffset
miniz_oxide
nested
nextest_metadata
nextest_runner
nix
mount
net
sys
nom
bits
branch
bytes
character
combinator
multi
number
sequence
num_cpus
num_integer
num_traits
object
read
coff
elf
macho
pe
once_cell
os_pipe
os_str_bytes
owo_colors
pathdiff
petgraph
algo
graph_impl
visit
proc_macro2
proc_macro_error
proc_macro_error_attr
quick_junit
quick_xml
quote
rayon
collections
compile_fail
iter
chain.rschunks.rscloned.rscopied.rsempty.rsenumerate.rsextend.rsfilter.rsfilter_map.rsfind.rsflat_map.rsflat_map_iter.rsflatten.rsflatten_iter.rsfold.rsfor_each.rsfrom_par_iter.rsinspect.rsinterleave.rsinterleave_shortest.rsintersperse.rslen.rsmap.rsmap_with.rsmod.rsmultizip.rsnoop.rsonce.rspanic_fuse.rspar_bridge.rspositions.rsproduct.rsreduce.rsrepeat.rsrev.rsskip.rssplitter.rsstep_by.rssum.rstake.rstry_fold.rstry_reduce.rstry_reduce_with.rsunzip.rsupdate.rswhile_some.rszip.rszip_eq.rs
slice
rayon_core
compile_fail
join
scope
sleep
spawn
thread_pool
regex
regex_syntax
ast
hir
unicode_tables
rustc_demangle
ryu
same_file
scopeguard
semver
serde
de
private
ser
serde_derive
serde_json
shared_child
shellwords
smallvec
static_assertions
strip_ansi_escapes
strsim
structopt
structopt_derive
supports_color
syn
attr.rsawait.rsbigint.rsbuffer.rscustom_keyword.rscustom_punctuation.rsdata.rsderive.rsdiscouraged.rserror.rsexport.rsexpr.rsext.rsfile.rsgenerics.rsgroup.rsident.rsitem.rslib.rslifetime.rslit.rslookahead.rsmac.rsmacros.rsop.rsparse.rsparse_macro_input.rsparse_quote.rspat.rspath.rsprint.rspunctuated.rsreserved.rssealed.rsspan.rsspanned.rsstmt.rsthread.rstoken.rsty.rsverbatim.rswhitespace.rs
target_lexicon
target_spec
termcolor
textwrap
time
toml
twox_hash
unicode_xid
utf8parse
vte
vte_generate_state_changes
walkdir
>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
use std::cmp::Ordering;
/// `MinScored<K, T>` holds a score `K` and a scored object `T` in
/// a pair for use with a `BinaryHeap`.
///
/// `MinScored` compares in reverse order by the score, so that we can
/// use `BinaryHeap` as a min-heap to extract the score-value pair with the
/// least score.
///
/// **Note:** `MinScored` implements a total order (`Ord`), so that it is
/// possible to use float types as scores.
#[derive(Copy, Clone, Debug)]
pub struct MinScored<K, T>(pub K, pub T);
impl<K: PartialOrd, T> PartialEq for MinScored<K, T> {
#[inline]
fn eq(&self, other: &MinScored<K, T>) -> bool {
self.cmp(other) == Ordering::Equal
}
}
impl<K: PartialOrd, T> Eq for MinScored<K, T> {}
impl<K: PartialOrd, T> PartialOrd for MinScored<K, T> {
#[inline]
fn partial_cmp(&self, other: &MinScored<K, T>) -> Option<Ordering> {
Some(self.cmp(other))
}
}
impl<K: PartialOrd, T> Ord for MinScored<K, T> {
#[inline]
fn cmp(&self, other: &MinScored<K, T>) -> Ordering {
let a = &self.0;
let b = &other.0;
if a == b {
Ordering::Equal
} else if a < b {
Ordering::Greater
} else if a > b {
Ordering::Less
} else if a.ne(a) && b.ne(b) {
// these are the NaN cases
Ordering::Equal
} else if a.ne(a) {
// Order NaN less, so that it is last in the MinScore order
Ordering::Less
} else {
Ordering::Greater
}
}
}