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 }