@@ -925,81 +925,9 @@ module internal List =
925925module internal Array =
926926
927927open System
928- open System.Collections .Generic
929-
930- #if FX_ NO_ ARRAY_ KEY_ SORT
931- // Mimic behavior of BCL QSort routine, used under the hood by various array sorting APIs
932- let qsort < 'Key , 'Value >( keys : 'Key [], values : 'Value [], start : int , last : int , comparer : IComparer < 'Key >) =
933- let valuesExist =
934- match valueswith
935- | null -> false
936- | _ -> true
937-
938- let swap ( p1 , p2 ) =
939- let tk = keys.[ p1]
940- keys.[ p1] <- keys.[ p2]
941- keys.[ p2] <- tk
942- if valuesExistthen
943- let tv = values.[ p1]
944- values.[ p1] <- values.[ p2]
945- values.[ p2] <- tv
946-
947- let partition ( left , right , pivot ) =
948- let value = keys.[ pivot]
949- swap( pivot, right)
950- let mutable store = left
951-
952- for iin left..( right- 1 ) do
953- if comparer.Compare( keys.[ i], value) < 0 then
954- swap( i, store)
955- store<- store+ 1
956-
957- swap( store, right)
958- store
959-
960- let rec qs ( left , right ) =
961- if left< rightthen
962- let pivot = left+ ( right- left)/ 2
963- let newpivot = partition( left, right, pivot)
964- qs( left, newpivot- 1 )
965- qs( newpivot+ 1 , right)
966-
967- qs( start, last)
968-
969- type System.Array with
970- static member Sort < 'Key , 'Value >( keys : 'Key [], values : 'Value [], comparer : IComparer < 'Key >) =
971- let valuesExist =
972- match valueswith
973- | null -> false
974- | _ -> true
975- match keys, valueswith
976- | null ,_ -> raise( ArgumentNullException())
977- | _,_ when valuesExist&& ( keys.Length<> values.Length) -> raise( ArgumentException())
978- | _,_ -> qsort( keys, values, 0 , keys.Length-1 , comparer)
979-
980- static member Sort < 'Key , 'Value when 'Key : comparison >( keys : 'Key [], values : 'Value []) =
981- let valuesExist =
982- match valueswith
983- | null -> false
984- | _ -> true
985- match keys, valueswith
986- | null ,_ -> raise( ArgumentNullException())
987- | _,_ when valuesExist&& ( keys.Length<> values.Length) -> raise( ArgumentException())
988- | _,_ -> qsort( keys, values, 0 , keys.Length-1 , LanguagePrimitives.FastGenericComparer< 'Key>)
989-
990- static member Sort < 'Key , 'Value >( keys : 'Key [], values : 'Value [], start : int , length : int , comparer : IComparer < 'Key >) =
991- match keyswith
992- | null -> raise( ArgumentNullException())
993- | _ -> qsort( keys, values, start, start+ length-1 , comparer)
994- #else
995- #endif
996928
997929let inline fastComparerForArraySort < 't when 't : comparison > () =
998- #if FX_ NO_ ARRAY_ KEY_ SORT
999- LanguagePrimitives.FastGenericComparer< 't>
1000- #else
1001930 LanguagePrimitives.FastGenericComparerCanBeNull< 't>
1002- #endif
1003931
1004932// The input parameter should be checked by callers if necessary
1005933let inline zeroCreateUnchecked ( count : int ) =