npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

bikeshed.c

v1.0.0

Published

Lock free hierarchical work scheduler; Dan Engelbrecht (2019).

Readme

|Branch | OSX / Linux / Windows | |------------|-----------------------| |master | Build Status | |master | Codacy Badge |

bikeshed

Lock free hierarchical work scheduler, by Dan Engelbrecht. Builds with MSVC, Clang and GCC, header only, C99 compliant, MIT license.

See github for latest version: https://github.com/DanEngelbrecht/bikeshed

See design blogs at: https://danengelbrecht.github.io

Installation

Run:

$ npm i bikeshed.c

And then include bikeshed.h as follows:

#include "node_modules/bikeshed.c/src/bikeshed.h"

Version history

Version v1.0 29/5 2019

Release 1.0

Fixes

  • Use explicit int32_t for instead of long to ensure 32-bit values on GCC/Clang x64-builds
  • Corrected URL to blog in README.md
  • Added sample code for performance tests (in examples folder)

Version v0.4 18/5 2019

Pre-release 4

API changes

  • Bikeshed_AddDependencies to take array of parent task task_ids
  • Bikeshed_ReadyCallback now gets called per channel range

API additions

  • Bikeshed_FreeTasks
  • BIKESHED_L1CACHE_SIZE to control ready head alignement - no padding/alignement added by default
  • BIKESHED_CPU_YIELD to control yielding in high-contention scenarios

Fixes

  • Added default (non-atomic) implementations for helper for unsupported platforms/compilers
  • Codacy analisys and badge
  • More input validation on public apis when BIKESHED_ASSERTS is enabled
  • Batch allocation of task indexes
  • Batch allocation of dependency indexes
  • Batch free of task indexes
  • Batch free of dependency indexes
  • Fixed broken channel range detection when resolving dependencies

Version v0.3 1/5 2019

Pre-release 3

Fixes

  • Ready callback is now called when a task is readied via dependency resolve
  • Tasks are readied in batch when possible

Version v0.2 29/4 2019

Pre-release 2

Fixes

  • Internal cleanups
  • Fixed warnings and removed clang warning suppressions
    • -Wno-sign-conversion
    • -Wno-unused-macros
    • -Wno-c++98-compat
    • -Wno-implicit-fallthrough
  • Made it compile cleanly with clang++ on Windows

Version v0.1 26/4 2019

Pre-release 1

Features

  • Generic tasks scheduling with dependecies between tasks
    • Each task has zero or many dependecies (as defined by user)
    • User should Ready any tasks that can execute (has zero dependencies)
    • Automatic ready of tasks that reaches zero dependecies
    • Automatic free of tasks that has completed
  • A task can have many parents and many child dependecies
  • Task channels - execute tasks based on task channel
  • No memory allocations once shed is created
  • Minimal dependencies
  • Memory allocation and threading are users responsability
  • Lifetime of data associated with tasks is users responsability
  • Configurable and optional assert (fatal error) behavior
  • Configurable platform dependant functions with default implementation provided
  • Header only - define BIKESHED_IMPLEMENTATION in one compilation unit and include bikeshed.h

Non-features

  • Cyclic dependency detection and resolving
    • API is designed to help user avoid cyclic dependecies but does not do any analisys
  • Built in threading or syncronization code - API to add it is available
  • Unlimited number of active tasks - currently limited to 8 388 607 active tasks
  • Cancelling of tasks
  • Tagging of tasks

Dependencies

Minimal dependecies with default overridable method for atomic operations.

  • <stdint.h>
  • <string.h>
  • The default (optional) MSVC implementation depends on <Windows.h>.

Optional default methods

The default implementations for the atomic and CPU yield functions can be overridden with your own implementation by overriding the macros:

  • BIKESHED_ATOMICADD Atomically adds a 32-bit signed integer to another 32-bit signed integer and returns the result
  • BIKESHED_ATOMICCAS Atomically exchange a 32-bit signed integer with another 32-bit signed integer if the value to be swapped matches the provided compare value, returns the old value.
  • BIKESHED_CPU_YIELD Yield CPU (mm_pause() / YieldProcessor()).

Test code dependecies

Test code has dependencies added as drop-in headers from

  • https://github.com/JCash/jctest for unit test validation

Test code has dependencies added as git sub-modules from

  • https://github.com/DanEngelbrecht/nadir for threading and syncronization

ORG