ExPopcount
Popcount, or population count, is a function that determines the number of set bits (bits with a value of 1) in a binary representation of an integer.
ExPopcount is an Erlang NIF library that exposes a popcount/1 operation over arbitrary integers and binaries/bitstrings.
The performance of the underlying operation relies mostly on the performance of the Rust stdlib u64::count_ones operation.
Installation
The package can be installed by adding ex_popcount to your list of dependencies in mix.exs:
def deps do
[
{:ex_popcount, "~> 0.1.0"}
]
endForce compilation
This library includes pre-compiled binaries for the native Rust code. If you want to force-compile the Rust code, you can add the following configuration to your application:
config :rustler_precompiled, :force_build, ex_popcount: trueYou also need to add Rustler to your dependencies:
def deps do
[
{:ex_popcount, "~> 0.1.0"},
{:rustler, ">= 0.0.0", optional: true}
]
endUsage
To calculate a popcount for an arbitrary value, use ExPopcount.popcount/1 function:
4 = ExPopcount.popcount(0b1111)
4 = ExPopcount.popcount(<<0b1111>>)
4 = ExPopcount.popcount(<<0::32, 0b1111::4>>)popcount/1 returns ArgumentError if the provided data is not an integer or bitstring, or if the provided data is a negative integer.
Contributing
- Fork it!
-
Create your feature branch (
git checkout -b my-new-feature) -
Commit your changes (
git commit -am 'Add some feature') -
Push to the branch (
git push origin my-new-feature) - Create new Pull Request
License
ExPopcount is released under the MIT License.