diff options
author | Adrien Hopkins <ahopk127@my.yorku.ca> | 2022-04-19 16:35:43 -0500 |
---|---|---|
committer | Adrien Hopkins <ahopk127@my.yorku.ca> | 2022-04-19 16:35:43 -0500 |
commit | 8cc60583134a4d01e9967424e5a51332de6cc38b (patch) | |
tree | af3bb8662dd4203fcfbd071f005e0619096f61ee /src/main/java/sevenUnits/converterGUI/DefaultPrefixRepetitionRule.java | |
parent | 0aacba9fc8a9140fdf331172ad66afe280d09b5e (diff) |
Finalized version 0.4.0-alpha.1
Diffstat (limited to 'src/main/java/sevenUnits/converterGUI/DefaultPrefixRepetitionRule.java')
-rw-r--r-- | src/main/java/sevenUnits/converterGUI/DefaultPrefixRepetitionRule.java | 95 |
1 files changed, 0 insertions, 95 deletions
diff --git a/src/main/java/sevenUnits/converterGUI/DefaultPrefixRepetitionRule.java b/src/main/java/sevenUnits/converterGUI/DefaultPrefixRepetitionRule.java deleted file mode 100644 index 6b6abf0..0000000 --- a/src/main/java/sevenUnits/converterGUI/DefaultPrefixRepetitionRule.java +++ /dev/null @@ -1,95 +0,0 @@ -/** - * @since 2020-08-26 - */ -package sevenUnits.converterGUI; - -import java.util.List; -import java.util.function.Predicate; - -import sevenUnits.unit.Metric; -import sevenUnits.unit.UnitPrefix; - -/** - * A rule that specifies whether prefix repetition is allowed - * - * @since 2020-08-26 - */ -enum DefaultPrefixRepetitionRule implements Predicate<List<UnitPrefix>> { - NO_REPETITION { - @Override - public boolean test(List<UnitPrefix> prefixes) { - return prefixes.size() <= 1; - } - }, - NO_RESTRICTION { - @Override - public boolean test(List<UnitPrefix> prefixes) { - return true; - } - }, - /** - * You are allowed to have any number of Yotta/Yocto followed by possibly one - * Kilo-Zetta/Milli-Zepto followed by possibly one Deca/Hecto. Same for - * reducing prefixes, don't mix magnifying and reducing. Non-metric - * (including binary) prefixes can't be repeated. - */ - COMPLEX_REPETITION { - @Override - public boolean test(List<UnitPrefix> prefixes) { - // determine whether we are magnifying or reducing - final boolean magnifying; - if (prefixes.isEmpty()) - return true; - else if (prefixes.get(0).getMultiplier() > 1) { - magnifying = true; - } else { - magnifying = false; - } - - // if the first prefix is non-metric (including binary prefixes), - // assume we are using non-metric prefixes - // non-metric prefixes are allowed, but can't be repeated. - if (!Metric.DECIMAL_PREFIXES.contains(prefixes.get(0))) - return NO_REPETITION.test(prefixes); - - int part = 0; // 0=yotta/yoctos, 1=kilo-zetta/milli-zepto, - // 2=deka,hecto,deci,centi - - for (final UnitPrefix prefix : prefixes) { - // check that the current prefix is metric and appropriately - // magnifying/reducing - if (!Metric.DECIMAL_PREFIXES.contains(prefix)) - return false; - if (magnifying != prefix.getMultiplier() > 1) - return false; - - // check if the current prefix is correct - // since part is set *after* this check, part designates the state - // of the *previous* prefix - switch (part) { - case 0: - // do nothing, any prefix is valid after a yotta - break; - case 1: - // after a kilo-zetta, only deka/hecto are valid - if (Metric.THOUSAND_PREFIXES.contains(prefix)) - return false; - break; - case 2: - // deka/hecto must be the last prefix, so this is always invalid - return false; - } - - // set part - if (Metric.YOTTA.equals(prefix) || Metric.YOCTO.equals(prefix)) { - part = 0; - } else if (Metric.THOUSAND_PREFIXES.contains(prefix)) { - part = 1; - } else { - part = 2; - } - } - return true; - } - }; -} |