Skip to content

Conversation

@PeterCDMcLean
Copy link

Summary of major changes:

Algorithms:

  • to_from_string
  • division, multiplication, addition by scalar
  • accumulate, accumulate_while, accumulate_backward, accumulate_backward_while

Misc:

  • mdspan accessors
  • user defined literal
  • bitsof
  • several template/type utilities in bit_details
  • general clean-up

Iterators:

  • iterator word adapter
  • consolidation of bit_pointer and bit_iterator
  • bit_reference holds a true reference or a proxy reference

Containers:

  • bit_array compile-time
  • bit_array construction-time
  • bit_array_ref
  • bit_span

Compilers:

  • MSVC support
  • clang-cl
…er / mask are only set in constructor. The end-value of the pointer can change
PeterCDMcLean and others added 30 commits May 3, 2025 18:15
…varying coverage results (#2) * Break up bitlib_utils. Seed tests from the test case name to prevent varying coverage results * Build benchmark during Release configuration * Fix up coverage exclusions * Scope the build to specific target * cmake --build must come first * Backwards logic
* Make github action for benchmark * Combine github workflows with condition postprocessing * action file syntax * Post process benchmark json * json will be in subdirectory * shell bash in action.yml * require GitHub secret token * pass secrets to coverage epilogue * composite action cannot access secrets must use inputs * pass secret as input * properly reference inputs
* compiler problem matchers * Fix GTest discovery * Encode more metadata for cache * Archive benchmark json * Archive first because runners are eager to nuke the workflow * Remove stray link options in bitlib-tests * compose Artifact name
* Stab at creating useful base class for bit_array and bit_array_dynamic_extent * more churn * Move literal to its own file * Inline class functions * Common operator U() * bit_array_ref class * Move more functionality to CRTP base * Test slice modification * Proper slice syntax for vector * Bit Literal test * from range constructors (need std::from_range?) * range assignment operator= * Refine and improve coverage * Consolidate literal tests * Try to resolve ambiguous operator== * swap_ranges can throw, apparently * Close more coverage
* Generate baseline coverage before running tests * Hunt and peck failing gcc inline flag * ignore mismatch on baseline * Move build so it's easier to generate baseline without * Clean checkout * Clean any cmake probing files that create coverage * Try both gcna gcno clean before build * Post configure clean up build dir too * Typo * set build dir to absolute
* WError cmake option * Add a build-only workflow for warnings * Add clang warnings build target * Try enabling coverage w/ clang * Refactor presets * composite actions are apparently syntax strict * Try to symlink llvm/clang tools * Use absolute path for coverage.profraw * ctest interferes with llvm coverage, likely due to parallel. try a cleaner approach * Codecov only supports lcov/gcov * Prevent artifact conflicts * missing github token * Different artifact names
* Add support for signed word types. Use logical shift right and avoid signed multiplication. Someone builtin_popcount is also sensitive to sign * Use common mask function to avoid signed word underflows * Allow _mask to optimize by default
* Bitwise operators in bit_array_base * Sketching out bit_integer class * No subborrowx exists * addcarry Pointer out type is sensitive for clang * clang seems more sensitive for constructor inheritance * Remove defunct comment * Fix rebase * Remove incomplete bit_integer class
* Remove alignment. Expose algorithm issues with differing types * Add iterator adapter class (big to small) * Use new iterator adapter. Set more default words to uintptr_t * Add dispatch to workflow trigger options * Dummy change * Try rerranging * Remove distinct iterator adapter test target * Try GLIBCXX_RELEASE macro * Fix type for test * bit_reference now templated on ref type to allow for it to wrap proxy references * Now with proxy reference and proxy pointer * Fix some ops * Remove wider_t narrower_t * Small buffer optimized dynamic bit array * Clean up more of bit_details * small improvement to bitsof * Don't measure coverage on tests (too error prone) * Adapter prelude wip * Add test for mixed type equals * Adapted copy * Test adapted copy * Fix conversion from adapter back to iterator * Remove unnecessary return type template parameter
* Add draft policies for integer conversion * Add allocator to Policy. Use policy to construct from integral * Add convenience conversion pathway for literal -> bit_value * Add algorithm accumulate and utility to_string * template keyword only necessary if actually passing template args * Better UX for accumulate policy * small tweaks to to_string * Add static_assert error to bit_literal. * Consolidate from_integral code * Fix accumulate, get_word doesn't mask
* Make bit::bit_array an alias of bit::array * Missing cstdint include * Refactor includes w.r.t bit_span
* Pipecleaning policy and casting issues * Fix policy/conversion issues * mdspan_accessor was templated incorrectly. bad constructor for bit_reference causes unexpected behavior * More missing policy templating * Correct static assert target class * Disable from_string temporarily as include DAG is misordered with it * Fix to_integral * compile-time array_ref extent. word accessor * Warnings cleanup * Fix exact integral type * Squash more warnings * Prevent some aliasing in the test code which clutters warnings * Avoid unused variable --------- Co-authored-by: Peter McLean <peter.cd.mclean@gmail.com>
* First couple sections of new doc * Small tweaks/improvements to CMake constraint/requirements * Add documentation on bit_array and mdspan * Add a small section about policy * Add a note about licensing * Update license file to include libpopcnt license * Try harder to remove undesired paths from clang coverage
* Necessary changes to work with clang cl cross compile toolchain * Move is an alias of copy. Fill in the doc --------- Co-authored-by: Peter McLean <peter.cd.mclean@gmail.com>
* Fix size-copy construction for bitwise ops * Primitive from_string * Add iterator-argument flavors of typical policy * Allow copy to take native iterators and auto-convert * Use a single type / value to template string conversion * Rebase cleanup * Replace auto and fix namespace issues in to_from_string.hpp * Use proper aggregate initialization for array * clang being naughty * Fix to string length calculation * Some scalar Addition and Multiplication algorithms * transform must mask operands to functor * Don't try to convert before bitsof * Fix carry out for sub words * Division by scalar * Add define for checking undefined behavior * Basic from_string working * Base 10 to string * Non-templated to/from string functions * to_string can be bounded by string iterators * Reorder to_string arguments for in->out order * Add streaming operator to array_base * Fix error C2361 case variable initialization * Add step to download and extract clang compiler rt libs for windows * Replace instrinsic with std * Give up on directory flag to tar * Simplify cache step * Add new line to license. seems reasonable * Don't use the iterator below begin() * Allow examples to be built as if they were the root. Add a dynamic bit-aggregate type example * Optimize to string by change zero check to reduce computation size
* Add clang-format workflow * Check clang-format of diff/patch instead of everything
* Use upload / download action instead of cache * Try without single quotes * Rerun base_ref build if possible
* bit_range args must accept rvalue temporary * Reorder from_integral to be consistent * Remove old style casts * Remove some more warnings * More efficient bit_iterator increment * Must use another download action to access other branch's workflows * Only download base ref build artifact for benchmark * Check outcome. clang-format * Missing python requirements * Must upgrade setuptools * setup python step * Use ref as baseline * Get rid of a few conversion warnings * Fix pointer adapter math for negative increments * Explicit cast * clang format * Give the matrix job a name
* Explicitly cast inside _mask * Name clang format workflow job * Default is detail::uninitialized. Fix from_string * Manually promote short or char types * Remove some other pedantic conversion warnings * Simplify the types into bitblend * Remove unnecessary casts in bitblend calls * Improve correctness when using unsigned size_type * clang format * size_type back to size_t * clang format * More conversion warning reduction * No floats allowed * Squash more conversion warnings * Even more warnings * Annoying that promotion happens even for bitwise of same type * Narrowing in on double digit warnings * More warnings * Turn on Werror * Fix clang warnings * Add a single status check for all matrix jobs * Filter C/C++ sources for clang format check
* Add additional from_string variants * clang format
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

2 participants