Skip to content

Commit 7ba798b

Browse files
fendormpickering
authored andcommitted
Add sort by number
Allow sorting the legend by interpreting the labels as numbers if possible. This is helpful when viewing era profiles, as these only have a number label.
1 parent 9ce6241 commit 7ba798b

File tree

2 files changed

+13
-3
lines changed

2 files changed

+13
-3
lines changed

src/Eventlog/Args.hs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ data Option
2121
= ShowVersion
2222
| Run Args
2323

24-
data Sort = Size | StdDev | Name | Gradient
24+
data Sort = Size | StdDev | Name | Gradient | Number
2525

2626
data Args = Args
2727
{
@@ -47,7 +47,7 @@ argParser :: Parser Option
4747
argParser = Run <$> (Args
4848
<$> option parseSort
4949
( long "sort"
50-
<> help "How to sort the bands. One of: size (default), stddev, name, gradient."
50+
<> help "How to sort the bands. One of: size (default), stddev, name, number, gradient."
5151
<> value Size
5252
<> metavar "FIELD" )
5353
<*> switch
@@ -118,8 +118,9 @@ parseSort = eitherReader $ \s -> case s of
118118
"size" -> Right Size
119119
"stddev" -> Right StdDev
120120
"name" -> Right Name
121+
"number" -> Right Number
121122
"gradient" -> Right Gradient
122-
_ -> Left "expected one of: size, stddev, name"
123+
_ -> Left "expected one of: size, stddev, name, number"
123124

124125
args :: IO Option
125126
args = execParser argsInfo

src/Eventlog/Prune.hs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
{-# LANGUAGE OverloadedStrings #-}
22
{-# LANGUAGE ViewPatterns #-}
3+
{-# LANGUAGE TypeApplications #-}
34
module Eventlog.Prune
45
( pruneBands, pruneDetailed
56
) where
@@ -11,6 +12,9 @@ import Data.Map (Map, fromList, (!), toList)
1112

1213
import Eventlog.Args (Args(..), Sort(..))
1314
import Data.Maybe
15+
import Data.Word (Word64)
16+
import Text.Read (readMaybe)
17+
import qualified Data.Text as T
1418

1519
type Compare a = a -> a -> Ordering
1620

@@ -21,15 +25,20 @@ getComparison Args { sorting = StdDev, reversing = False } = cmpStdDevDescendin
2125
getComparison Args { sorting = StdDev, reversing = True } = cmpStdDevAscending
2226
getComparison Args { sorting = Name, reversing = True } = cmpNameDescending
2327
getComparison Args { sorting = Name, reversing = False } = cmpNameAscending
28+
getComparison Args { sorting = Number, reversing = True } = cmpNumberDescending
29+
getComparison Args { sorting = Number, reversing = False } = cmpNumberAscending
2430
getComparison Args { sorting = Gradient, reversing = True } = cmpGradientAscending
2531
getComparison Args { sorting = Gradient, reversing = False } = cmpGradientDescending
2632

2733
cmpNameAscending, cmpNameDescending,
34+
cmpNumberAscending, cmpNumberDescending,
2835
cmpStdDevAscending, cmpStdDevDescending,
2936
cmpSizeAscending, cmpSizeDescending,
3037
cmpGradientAscending, cmpGradientDescending :: Compare (Bucket, BucketInfo)
3138
cmpNameAscending = comparing fst
3239
cmpNameDescending = flip cmpNameAscending
40+
cmpNumberAscending (Bucket a, _) (Bucket b, _) = comparing (readMaybe @Word64 . T.unpack) a b <> compare a b
41+
cmpNumberDescending = flip cmpNumberAscending
3342
cmpStdDevAscending = comparing (bucketStddev . snd)
3443
cmpStdDevDescending = flip cmpStdDevAscending
3544
cmpSizeAscending = comparing (bucketTotal . snd)

0 commit comments

Comments
 (0)