Here is what I use (although I there are very probably more efficient implementations):
bitarray.fsi
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
#light namespace Common //--------------------------------------------------------------- // LIBRARIES //--------------------------------------------------------------- open System //--------------------------------------------------------------- // BITARRAY //--------------------------------------------------------------- [<Sealed>] type Bitarray = //The fields are not private in the implementation file so that //only the functions from this module can access them. with static member ( ~~~ ) : ba:Bitarray -> Bitarray static member ( ^^^ ) : ba:Bitarray * ba':Bitarray -> Bitarray static member ( ||| ) : ba:Bitarray * ba':Bitarray -> Bitarray static member ( &&& ) : ba:Bitarray * ba':Bitarray -> Bitarray static member ( + ) : ba:Bitarray * ba':Bitarray -> Bitarray static member ( - ) : ba:Bitarray * ba':Bitarray -> Bitarray [<CompilationRepresentation(CompilationRepresentationFlags.ModuleSuffix)>] module Bitarray = ///[Create n] returns a [Bitarray] of [n] bits. val Create : int -> Bitarray ///[Copy barr] returns a fresh copy of [barr]. val Copy : Bitarray -> Bitarray ///[Length barr] returns the number of bits of [barr]. val Length : Bitarray -> int ///[IsSet nth barr] returns true if the [nth] bit of [barr] is set. val IsSet : pos:int -> Bitarray -> bool ///[Put nth flag barr] puts [flag] at the [nth] bit of [barr]. val Put : int -> bool -> Bitarray -> unit ///[Init n f] returns a new [Bitarray] of [n] bits where the ///[n]th bit is computed as [f i]. val Init : n:int -> f:(int -> bool) -> Bitarray ///[Set nth barr] puts [true] at the [nth] bit of [barr]. val Set : int -> Bitarray -> unit ///[SetAll barr] puts [true] at all bits of [barr]. val SetAll : Bitarray -> unit ///[Unset nth barr] puts [false] at the [nth] bit of [barr]. val Unset : int -> Bitarray -> unit ///[UnsetAll barr] puts [false] at all bits of [barr]. val UnsetAll : Bitarray -> unit ///[Inter a b] returns a [Bitarray] where the bits are set at the positions where ///they are set both in [a] and [b]. val Inter : Bitarray -> Bitarray -> Bitarray ///[Inter a b] returns a [Bitarray] where the bits are set at the positions where ///they are set in [a] and / or in [b]. val Union : Bitarray -> Bitarray -> Bitarray ///[Diff negged base] returns a [Bitarray] where the bits are set at the positions where ///they are set in [base] but not in [negged]. val Diff : negged:Bitarray -> baseBitarray:Bitarray -> Bitarray ///[Iter f barr] applies [f bit] to every bit of [barr] where each bit is represented by a boolean value. val Iter : (bool -> unit) -> Bitarray -> unit ///[Iteri f barr] applies [f n bit] to every bit of [barr] where each bit is represented by a boolean value. ///[f] varies with the position of the bit. That is, [f i] is applied to the [ n ]th bit. val Iteri : (int -> bool -> unit) -> Bitarray -> unit ///[Map f barr] returns a new [Bitarray] by applying [f] to every bit of [barr] ///where each bit is represented by a boolean value. val Map : (bool -> bool) -> Bitarray -> Bitarray ///[Mapi f barr] returns a new [Bitarray] by applying [f i] to the [ n ]th bit of [barr] ///for [ n ] in [0 .. Length barr]. Each bit is represented by a boolean value. val Mapi : (int -> bool -> bool) -> Bitarray -> Bitarray ///[SetBits barr] returns the indexes of the set bits of [barr]. val SetBits : Bitarray -> list<int> ///[UnsetBits barr] returns the indexes of the set bits of [barr]. val UnsetBits : Bitarray -> list<int> ///[ToBool barr] returns an array of boolean values where the [ n ]th value is true ///if the [ n ]th bit of [barr] is set. val ToBool : Bitarray -> bool[] ///[FromBool boolarr] returns a [Bitarray] where the [ n ]th bit is set ///if the [ n ]th boolean of [boolarr] is true. val FromBool : bool array -> Bitarray ///[ToBytes barr] returns a byte[] where [true; false; ... false] translates to [1uy]. val ToBytes : Bitarray -> byte[] ///[FromBytes barr] returns a [Bitarray] where [1uy] translates to [true; false; ... false]. val FromBytes : byte [] -> Bitarray ///[AreAllSet barr] returns true if all bits of [barr] are unset. val AreAllUnset : Bitarray -> bool ///[AreAllSet barr] returns true if all bits of [barr] are set. val AreAllSet : Bitarray -> bool
and in bitarray.fs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180
#light //reminder : bits_per_byte = 8 namespace Common //--------------------------------------------------------------- // LIBRARIES //--------------------------------------------------------------- open System //--------------------------------------------------------------- // IMPLEMENTATION //--------------------------------------------------------------- (** Notes 8 bits per byte 4 bytes to represent a signed integer 0xf = 15 * (2. ** 4.) = 16 ^- 1 0xff = 15 * (2. ** 4.) + 15 = 16 ^ 2 - 1 ... 0xffff = 16 ^ 4 - 1 ... 0xffffffff = 16 ^ 8 - 1 n <<< i = b * (2 ^ i) n >>> i = b / (2 ^ i) as an integer division, i.e. 17 / 2 = 8 n &&& -b returns the value of the first bit Set to 1 in n, i.e. [2 ^ pos] where [pos] is the index of the minimum Set bit. b &&& i = 0 if the ith bit is not Set in n, ith's value otherwise *) type Bitarray = { Data : byte[] Length : int } with static member (~~~) ba = { ba with Data = Array.map (fun e -> ~~~e) ba.Data } static member (^^^) (ba, ba') = if ba.Length <> ba'.Length then invalid_arg "Bitarray (^^^) operator" { ba with Data = Array.map2 (fun e e' -> e ^^^ e') ba.Data ba'.Data } static member (|||) (ba, ba') = if ba.Length <> ba'.Length then invalid_arg "Bitarray (|||) operator" { ba with Data = Array.map2 (fun e e' -> e ||| e') ba.Data ba'.Data } static member (&&&) (ba, ba') = if ba.Length <> ba'.Length then invalid_arg "Bitarray (&&&) operator" { ba with Data = Array.map2 (fun e e' -> e &&& e') ba.Data ba'.Data } static member (+) (b:Bitarray, b') = b ||| b' static member (-) (b:Bitarray, b') = b &&& ~~~b' [<CompilationRepresentation(CompilationRepresentationFlags.ModuleSuffix)>] module Bitarray = let private bitToByteShift nbits = nbits >>> 3 let private staticBits = [|for i in 0 .. 7 -> 1 <<< i |> byte|] let bits ba = ba.Data let Length ba = ba.Length let Create nbits = if nbits < 0 then invalid_arg "Cannot Create a Bitarray with less than 0 element" { Data = (nbits + 7) |> bitToByteShift |> Array.zero_create Length = nbits } let Copy ba = {ba with Data = Array.copy ba.Data} let IsSet pos ba = if pos < 0 || pos >= ba.Length then raise <| IndexOutOfRangeException() ba.Data.[bitToByteShift pos] &&& staticBits.[pos &&& 7] <> 0uy let Put pos flag ba = if IsSet pos ba <> flag then if flag then ba.Data.[bitToByteShift pos] <- ba.Data.[bitToByteShift pos] ||| staticBits.[pos &&& 7] else ba.Data.[bitToByteShift pos] <- ba.Data.[bitToByteShift pos] ^^^ staticBits.[pos &&& 7] let Init nbits f = let res = Create nbits for i in 0 .. nbits - 1 do Put i (f i) res res let Set pos ba = Put pos true ba let SetAll ba = ba.Data |> Array.iteri (fun n _ -> ba.Data.[ n ] <- 255uy) let Unset pos ba = Put pos false ba let UnsetAll ba = ba.Data |> Array.iteri (fun n _ -> ba.Data.[ n ] <- 0uy) let Inter (b:Bitarray) b' = b &&& b' let Union (b:Bitarray) b' = b ||| b' let Diff (negged:Bitarray) baseBitarray = baseBitarray ^^^ negged let Iter f ba = let res = Create (Length ba) for n in 0 .. (Length ba) - 1 do f <| IsSet n ba let Iteri f ba = let res = Create (Length ba) for n in 0 .. (Length ba) - 1 do f n <| IsSet n ba let Mapi f ba = let res = Create (Length ba) for n in 0 .. Length ba - 1 do Put n (f n (IsSet n ba)) res res let Map f ba = let res = Create (Length ba) for n in 0 .. Length ba - 1 do Put n (f (IsSet n ba)) res res let SetBits ba = [ for n in 0 .. Length ba - 1 do if IsSet n ba then yield n ] let UnsetBits ba = [ for n in 0 .. Length ba - 1 do if not <| IsSet n ba then yield n ] let ToBool ba = [|for n in 0 .. Length ba - 1 -> IsSet n ba |] let FromBool xs = Init (Array.length xs) (fun n -> xs.[ n ]) let ToBytes ba = Array.copy ba.Data let FromBytes xs = { Data = Array.copy xs Length = Array.length xs * 8 } let areAll n ba = let nFull = ba.Length / 8 let n = ref 0 let ok = ref true while !i < nFull && !ok do if ba.Data.[!i] <> n then ok := false incr i if !ok then n := nFull * 8 while !i < ba.Length && !ok do if not <| IsSet !i ba then ok := false incr n !ok let AreAllSet ba = areAll 255uy ba let AreAllUnset ba = areAll 0uy ba
Hope this helps...
Also, it looks like BitArray implements only
1
System.Collections.IEnumerable
and not
1
System.Collections.Generic.IEnumerable<T>
.
[edit]
Use
1
System.Linq.Enumerable.Cast<T>
to convert.[/edit]
Topic tags
- f# × 3705
- websharper × 1897
- compiler × 286
- functional × 201
- ui next × 139
- c# × 121
- classes × 97
- web × 97
- .net × 84
- book × 84
- async × 76
- ui.next × 67
- bug × 54
- core × 49
- website × 49
- server × 45
- parallel × 43
- ui × 43
- enhancement × 41
- parsing × 41
- testing × 41
- trywebsharper × 41
- typescript × 37
- html × 35
- javascript × 35
- owin × 35
- asynchronous × 30
- monad × 28
- ocaml × 28
- tutorial × 27
- warp × 27
- haskell × 26
- sitelet × 25
- linq × 22
- workflows × 22
- wpf × 20
- fpish × 19
- introduction × 19
- silverlight × 19
- sitelets × 19
- monodevelop × 17
- rpc × 17
- suave × 17
- piglets × 16
- collections × 15
- feature request × 15
- jquery × 15
- templates × 15
- getting started × 14
- pipeline × 14
- kendoui × 13
- reactive × 12
- 4.1.0.171 × 11
- monads × 11
- opinion × 10
- 4.0.190.100-rc × 9
- deployment × 9
- fixed × 9
- formlets × 9
- in × 9
- json × 9
- plugin × 9
- proposal × 9
- scheme × 9
- solid × 9
- basics × 8
- concurrent × 8
- highcharts × 8
- how-to × 8
- python × 8
- 4.1.1.175 × 7
- complexity × 7
- documentation × 7
- visual studio × 7
- 4.1.2.178 × 6
- lisp × 6
- real-world × 6
- released in 4.0.192.103-rc × 6
- remoting × 6
- resources × 6
- scala × 6
- websharper ui.next × 6
- workshop × 6
- xaml × 6
- 4.0.193.110 × 5
- 4.2.3.236 × 5
- aspnetmvc × 5
- authentication × 5
- azure × 5
- bootstrap × 5
- conference × 5
- dsl × 5
- formlet × 5
- java × 5
- list × 5
- metaprogramming × 5
- ml × 5
- released in Zafir.4.0.188.91-beta10 × 5
- sql × 5
- visualstudio × 5
- websharper.forms × 5
- zafir × 5
- 4.0.192.106 × 4
- 4.0.195.127 × 4
- 4.1.0.38 × 4
- 4.2.1.86 × 4
- 4.2.6.118 × 4
- css × 4
- example × 4
- extensions × 4
- fsi × 4
- fsx × 4
- html5 × 4
- jqueryui × 4
- lift × 4
- reflection × 4
- remote × 4
- rest × 4
- spa × 4
- teaching × 4
- template × 4
- websocket × 4
- wontfix × 4
- 4.0.196.147 × 3
- 4.1.0.34 × 3
- 4.1.6.207 × 3
- 4.2.1.223-beta × 3
- 4.2.11.258 × 3
- 4.2.4.114 × 3
- 4.2.4.247 × 3
- 4.2.5.115 × 3
- 4.2.6.253 × 3
- 4.2.9.256 × 3
- ajax × 3
- alt.net × 3
- aml × 3
- asp.net mvc × 3
- canvas × 3
- cloudsharper × 3
- compilation × 3
- database × 3
- erlang × 3
- events × 3
- extension × 3
- file upload × 3
- forums × 3
- inline × 3
- issue × 3
- kendo × 3
- macro × 3
- mono × 3
- msbuild × 3
- mvc × 3
- pattern × 3
- piglet × 3
- released in Zafir.4.0.187.90-beta10 × 3
- svg × 3
- type provider × 3
- view × 3
- 4.1.1.64 × 2
- 4.1.5.203 × 2
- 4.1.7.232 × 2
- 4.2.10.257 × 2
- 4.2.3.111 × 2
- 4.2.5.249 × 2
- android × 2
- asp.net × 2
- beginner × 2
- blog × 2
- chart × 2
- client × 2
- client server app × 2
- clojure × 2
- computation expressions × 2
- constructor × 2
- corporate × 2
- courses × 2
- cufp × 2
- d3 × 2
- debugging × 2
- direct × 2
- discriminated union × 2
- docs × 2
- elm × 2
- endpoint × 2
- endpoints × 2
- enterprise × 2
- entity framework × 2
- event × 2
- f# interactive × 2
- fable × 2
- flowlet × 2
- formdata × 2
- forms × 2
- fsc × 2
- google maps × 2
- hosting × 2
- http × 2
- https × 2
- iis 8.0 × 2
- install × 2
- interactive × 2
- interface × 2
- iphone × 2
- iteratee × 2
- jobs × 2
- jquery mobile × 2
- keynote × 2
- lens × 2
- lenses × 2
- linux × 2
- listmodel × 2
- mac × 2
- numeric × 2
- oauth × 2
- obfuscation × 2
- offline × 2
- oop × 2
- osx × 2
- packaging × 2
- pattern matching × 2
- performance × 2
- pipelines × 2
- q&a × 2
- quotation × 2
- reference × 2
- released in Zafir.4.0.185.88-beta10 × 2
- rx × 2
- script × 2
- security × 2
- self host × 2
- seq × 2
- sockets × 2
- stm × 2
- tcp × 2
- trie × 2
- tutorials × 2
- type × 2
- url × 2
- var × 2
- websharper.charting × 2
- websharper4 × 2
- websockets × 2
- wig × 2
- xna × 2
- zh × 2
- .net interop × 1
- 2012 × 1
- 4.0.194.126 × 1
- 4.1.3.184 × 1
- 4.1.4.189 × 1
- 4.2.0.214-beta × 1
- 4.2.12.259 × 1
- 4.2.2.231-beta × 1
- 4.2.8.255 × 1
- Canvas Sample Example × 1
- DynamicStyle Animated Style × 1
- Fixed in 4.0.190.100-rc × 1
- Released in Zafir.UI.Next.4.0.169.79-beta10 × 1
- SvgDynamicAttribute × 1
- WebComponent × 1
- abstract class × 1
- accumulator × 1
- active pattern × 1
- actor × 1
- addin × 1
- agents × 1
- aggregation × 1
- agile × 1
- alter session × 1
- animation × 1
- anonymous object × 1
- apache × 1
- api × 1
- appcelerator × 1
- architecture × 1
- array × 1
- arrays × 1
- asp.net 4.5 × 1
- asp.net core × 1
- asp.net integration × 1
- asp.net mvc 4 × 1
- asp.net web api × 1
- aspnet × 1
- ast × 1
- attributes × 1
- authorization × 1
- b-tree × 1
- back button × 1
- badimageformatexception × 1
- bash script × 1
- batching × 1
- binding-vars × 1
- bistro × 1
- body × 1
- bundle × 1
- camtasia studio × 1
- cas protocol × 1
- charts × 1
- clarity × 1
- class × 1
- cli × 1
- clipboard × 1
- clojurescript × 1
- closures × 1
- cloud × 1
- cms × 1
- coding diacritics × 1
- color highlighting × 1
- color zones × 1
- combinator × 1
- combinators × 1
- compile × 1
- compile code on server × 1
- config × 1
- confirm × 1
- content × 1
- context × 1
- context.usersession × 1
- continuation-passing style × 1
- coords × 1
- cordova × 1
- cors × 1
- coursera × 1
- cross-domain × 1
- csla × 1
- current_schema × 1
- custom content × 1
- data × 1
- data grid × 1
- datetime × 1
- debug × 1
- declarative × 1
- delete × 1
- devexpress × 1
- dhtmlx × 1
- dictionary × 1
- directattribute × 1
- disqus × 1
- distance × 1
- do binding × 1
- doc elt ui.next upgrade × 1
- docker × 1
- dojo × 1
- dol × 1
- dom × 1
- domain × 1
- du × 1
- duf-101 × 1
- dynamic × 1
- eastern language × 1
- eclipse × 1
- edsl × 1
- em algorithm × 1
- emacs × 1
- emotion × 1
- enums × 1
- error × 1
- etw × 1
- euclidean × 1
- eventhandlerlist × 1
- examples × 1
- ext js × 1
- extension methods × 1
- extra × 1
- facet pattern × 1
- failed to translate × 1
- fake × 1
- fantomas × 1
- fear × 1
- float × 1
- form × 1
- form-data × 1
- forum × 1
- fp × 1
- frank × 1
- fsdoc × 1
- fsharp × 1
- fsharp.core × 1
- fsharp.powerpack × 1
- fsharpx × 1
- fsunit × 1
- function × 1
- functional style × 1
- game × 1
- games × 1
- gc × 1
- generic × 1
- geometry × 1
- getlastwin32error × 1
- getting-started × 1
- google × 1
- google.maps × 1
- grid × 1
- group × 1
- guide × 1
- hash × 1
- headers × 1
- hello world example × 1
- heroku × 1
- highchart × 1
- history × 1
- how to × 1
- html-templating × 1
- http405 × 1
- httpcontext × 1
- hubfs × 1
- i18n × 1
- ie 8 × 1
- if-doc × 1
- iis × 1
- image × 1
- images × 1
- inheritance × 1
- initialize × 1
- input × 1
- install "visual studio" × 1
- installer × 1
- int64 × 1
- interfaces × 1
- internet explorer × 1
- interop × 1
- interpreter × 1
- io × 1
- iobservable × 1
- ios × 1
- iot × 1
- ipad × 1
- isomorphic × 1
- javascript optimization × 1
- javascript semanticui resources × 1
- jquery-plugin × 1
- jquery-ui × 1
- jquery-ui-datepicker × 1
- js × 1
- kendo datasource × 1
- kendochart × 1
- kendoui compiler × 1
- knockout × 1
- l10n × 1
- learning × 1
- library × 1
- libs × 1
- license × 1
- licensing × 1
- lineserieszonescfg × 1
- local setting × 1
- localization × 1
- logging × 1
- loop × 1
- macros × 1
- mailboxprocessor × 1
- mapping × 1
- maps × 1
- markerclusterer × 1
- markup × 1
- marshal × 1
- math × 1
- mathjax × 1
- message × 1
- message passing × 1
- message-passing × 1
- meta × 1
- metro style × 1
- micro orm × 1
- minimum-requirements × 1
- mix × 1
- mobile installation × 1
- mod_mono × 1
- modal × 1
- module × 1
- mouseevent × 1
- mouseposition × 1
- multidimensional × 1
- multiline × 1
- multithreading × 1
- mysql × 1
- mysqlclient × 1
- nancy × 1
- native × 1
- nested × 1
- nested loops × 1
- node × 1
- nunit × 1
- object relation mapper × 1
- object-oriented × 1
- om × 1
- onboarding × 1
- onclick × 1
- optimization × 1
- option × 1
- orm × 1
- os x × 1
- output-path × 1
- override × 1
- paper × 1
- parameter × 1
- persistence × 1
- persistent data structure × 1
- phonegap × 1
- pola × 1
- post × 1
- powerpack × 1
- prefix tree × 1
- principle of least authority × 1
- privacy × 1
- private × 1
- profile × 1
- programming × 1
- project × 1
- project euler × 1
- projekt_feladat × 1
- protected × 1
- provider × 1
- proxy × 1
- ptvs × 1
- public × 1
- pure f# × 1
- purescript × 1
- qna × 1
- quant × 1
- query sitelet × 1
- question × 1
- quotations × 1
- range × 1
- raphael × 1
- razor × 1
- rc × 1
- reactjs × 1
- real-time × 1
- ref × 1
- region × 1
- released in 4.0.190.100-rc × 1
- reporting × 1
- responsive design × 1
- rest api × 1
- rest sitelet × 1
- restful × 1
- round table × 1
- router × 1
- routing × 1
- rpc reverseproxy × 1
- runtime × 1
- sales × 1
- sample × 1
- sampleapp × 1
- scriptcs × 1
- scripting × 1
- search × 1
- self hosted × 1
- semanticui × 1
- sequence × 1
- serialisation × 1
- service × 1
- session-state × 1
- sharepoint × 1
- signals × 1
- sitelet website × 1
- sitelet.protect × 1
- sitlets × 1
- slickgrid × 1
- source code × 1
- sqlentityconnection × 1
- ssl × 1
- standards × 1
- static content × 1
- stickynotes × 1
- streamreader × 1
- stress × 1
- strong name × 1
- structures × 1
- submitbutton × 1
- subscribe × 1
- svg example html5 websharper.ui.next × 1
- sweetalert × 1
- system.datetime × 1
- system.reflection.targetinvocationexception × 1
- table storage × 1
- targets × 1
- tdd × 1
- templates ui.next × 1
- templating × 1
- text parsing × 1
- three.js × 1
- time travel × 1
- tls × 1
- tooltip × 1
- tracing × 1
- tsunamiide × 1
- turkish × 1
- twitter-bootstrap × 1
- type erasure × 1
- type inference × 1
- type providers × 1
- type-providers × 1
- typeprovider × 1
- ui next forms × 1
- ui-next × 1
- ui.next jqueryui × 1
- ui.next charting × 1
- ui.next formlets × 1
- ui.next forms × 1
- ui.next suave visualstudio × 1
- ui.next templating × 1
- unicode × 1
- unittest client × 1
- upload × 1
- usersession × 1
- validation × 1
- vb × 1
- vb.net × 1
- vector × 1
- view.map × 1
- visal studio × 1
- visual f# × 1
- visual studio 11 × 1
- visual studio 2012 × 1
- visual studio shell × 1
- vs2017 compiler zafir × 1
- vsix × 1
- web api × 1
- web-scraping × 1
- webapi × 1
- webcomponents × 1
- webforms × 1
- webgl × 1
- webrtc × 1
- webshaper × 1
- websharper async × 1
- websharper codemirror × 1
- websharper f# google × 1
- websharper forms × 1
- websharper reactive × 1
- websharper rpc × 1
- websharper sitelets routing × 1
- websharper warp × 1
- websharper-interface-generator × 1
- websharper.chartsjs × 1
- websharper.com × 1
- websharper.exe × 1
- websharper.owin × 1
- websharper.ui.next × 1
- websharper.ui.next jquery × 1
- websockets iis × 1
- why-websharper × 1
- windows 7 × 1
- windows 8 × 1
- windows-phone × 1
- winrt × 1
- www.grabbitmedia.com × 1
- xamarin × 1
- xml × 1
- yeoman × 1
- yield × 1
- zafir beta × 1
- zafir websharper4 × 1
- zarovizsga × 1
![]() |
Copyright (c) 2011-2012 IntelliFactory. All rights reserved. Home | Products | Consulting | Trainings | Blogs | Jobs | Contact Us | Terms of Use | Privacy Policy | Cookie Policy |
Built with WebSharper |
Right now, I use a bool[] to represent an array of bits that makes up the gene representation in a genetic algorithm. This has two drawbacks that I'd like to eliminate.
First, when I map a bit representation to a ``real'' representation, I have a lot of:
which basically takes a chunk of bools and maps it to a range of decimal values with a certain precision.
The problem with this is that it results in a lot of small wasted array allocations. I've tried lists. But, the performance overall is less.
Second, my guess is that bool[] is not the most size efficient representation of bits available. I've considered BitArray. But, that forces the sub array problem above to also have uglier syntax.
I could write a module to manage bit arrays. but, this wheel has surely been built many times.
Thanks.
(Also, if anyone can let me know how to get the indention to work in the bbcode code blocks, that would be awesome.)