From dca63110f706685527a34708312e396bd69defd5 Mon Sep 17 00:00:00 2001 From: Stefan Koch Date: Thu, 1 Mar 2018 09:34:37 +0100 Subject: [PATCH] Optionally return position in canFindIndex --- src/dfmt/formatter.d | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/src/dfmt/formatter.d b/src/dfmt/formatter.d index d2579e9..5d8c361 100644 --- a/src/dfmt/formatter.d +++ b/src/dfmt/formatter.d @@ -1849,9 +1849,28 @@ const pure @safe @nogc: } } -bool canFindIndex(const size_t[] items, size_t index) pure @safe @nogc +bool canFindIndex(const size_t[] items, size_t index, size_t* pos = null) pure @safe @nogc { import std.range : assumeSorted; - - return !assumeSorted(items).equalRange(index).empty; -} + if (!pos) + { + return !assumeSorted(items).equalRange(index).empty; + } + else + { + auto trisection_result = assumeSorted(items).trisect(index); + if (trisection_result[1].length == 1) + { + *pos = trisection_result[0].length; + return true; + } + else if (trisection_result[1].length == 0) + { + return false; + } + else + { + assert(0, "the constraint of having unique locations has been violated"); + } + } +} \ No newline at end of file