private void PromptViewCards() { if (File.Exists(folder + tempFile)) { File.Delete(folder + tempFolder + tempFile); } PC.FormatWriteLine("Insert the codes to {0}", "view"); PC.WriteLine( "To create a range, use \"-\" between codes, use a \".\" at the end of codes to force not going down, and seperate groupings with a \",\""); List <CodeRange> codeRanges = CodeRange.Parse(ReadAnswer()); List <CatalogCode> cards = CardsInRange(codeRanges); if (cards.Count != 0) { foreach (CatalogCode catalogCode in cards) { PC.FormatWriteLine("{0}", catalog.Get(catalogCode).FileName); } Console.WriteLine(); GenerateCardView(cards); OpenFileProcess(folder + tempFolder + tempFile); } else { PC.WriteLine("No card exists."); } }
private void MoveAndSave(CodeRange a, CodeRange b) { if (a.Equals(b)) { return; } while (true) { if (a.Span == 1) { MoveAndSave(a.fromCode, b.fromCode); } else { if (a.fromCode.Youngest() < b.fromCode.Youngest()) { MoveAndSave(a.toCode, b.toCode); a = new CodeRange(a.fromCode, a.toCode + -1); b = new CodeRange(b.fromCode, b.toCode + -1); continue; } MoveAndSave(a.fromCode, b.fromCode); a = new CodeRange(a.fromCode + 1, a.toCode); b = new CodeRange(b.fromCode + 1, b.toCode); continue; } break; } }
private void PromptShift() { PC.WriteLine("Please insert the range to shift along:"); CodeRange orig = new CodeRange(ReadAnswer()); if (orig.fromCode.Equals(CatalogCode.current)) { throw new CatalogError("Cannot shift the root"); } PC.WriteLine("Please insert by how much?"); int dist = int.Parse(ReadAnswer()); if (dist == 0) { return; } CodeRange shifted = orig + dist; if (catalog.Contains(shifted - orig, orig, (shifted - orig).fromCode.Youngest() - shifted.fromCode.Youngest())) { throw new CatalogError($"Cannot shift {orig} by {dist}"); } MoveAndSave(orig, shifted); }
public bool Contains(CodeRange range) { if (range == null) { return(false); } CatalogCode counter = range.fromCode; while (counter.Youngest() <= range.toCode.Youngest()) { if (Get(counter) != null) { return(true); } counter = counter.Increment(); } return(false); }
public bool Contains(CodeRange range, CodeRange usingCodeRange, int offset) { if (range == null) { return(false); } CatalogCode counter1 = range.fromCode; CatalogCode counter2 = usingCodeRange.fromCode + offset; while (counter1.Youngest() <= range.toCode.Youngest()) { if (Contains(counter2) && Contains(counter1)) { return(true); } counter1 = counter1.Increment(); counter2 = counter2.Increment(); } return(false); }