1 /******************************************************************************* 2 * Access 3 * Access is a library for finding information about arrays out. 4 * This library uses and introduces only completely pure functions. 5 */ 6 7 module cookbook.ingredients.arrays.access; 8 9 import cookbook.essential.common; 10 import cookbook.ingredients.functional.fbreak; 11 12 pure bool elem(T)(T[] data, T item){ 13 foreach(it; data) 14 if(it == item) 15 return true; 16 return false; 17 } 18 19 pure bool contains(T)(T[] data, T[] item){ 20 for(int i = 0; i < data.length-1; i++){ 21 if(i+item.length > item.length) return false; 22 if(data[i..i+item.length] == item) 23 return true; 24 } 25 return false; 26 } 27 28 pure T[] qsort(T)(T[] data){ 29 if(data.length == 0) return []; 30 T[] lesser = qsort!T(filter!(((y) {return y <= data[0];}),T)(data[1..$].dup)); 31 T[] greater = qsort!T(filter!(((y) {return y > data[0];}),T)(data[1..$].dup)); 32 return append!T(lesser,data[0]) ~ greater; 33 } 34 35 pure bool areAll(T)(T[] data, T item){ 36 imbreak!(((y) {return y != item;}),T)(data); 37 } 38 39 40 pure bool surrounds(T)(T[] list, T head, T tail){ 41 return [list[0],list[$]] == [head,tail]; 42 } 43 44 pure bool isPrefixOf(T)(T[] list, T[] test){ 45 if(test.length > list.length) return false; 46 return list[0..test.length] == test; 47 }