Skip to content
Snippets Groups Projects
  • Marek Vavruša's avatar
    contrib: created 'contrib' directory with ccan/isaac as csprng · dbca2316
    Marek Vavruša authored
    previously cryptolib random function was used to generate message id,
    this works well but it is slow especially when the entropy is low,
    replaced with cryptographically safe prng ISAAC
    
    the ccan directory is going to be used in the future, as it's include
    structure makes it easy to embed C snippets instead of reimplementing
    them
    dbca2316
_info 1.41 KiB
/**
 * ilog - Integer logarithm.
 *
 * ilog_32() and ilog_64() compute the minimum number of bits required to store
 * an unsigned 32-bit or 64-bit value without any leading zero bits.
 *
 * This can also be thought of as the location of the highest set bit, with
 * counting starting from one (so that 0 returns 0, 1 returns 1, and 2**31
 * returns 32).
 *
 * When the value is known to be non-zero ilog32_nz() and ilog64_nz() can
 * compile into as few as two instructions, one of which may get optimized out
 * later.
 *
 * STATIC_ILOG_32 and STATIC_ILOG_64 allow computation on compile-time
 * constants, so other compile-time constants can be derived from them.
 *
 * Example:
 *  #include <stdio.h>
 *  #include <limits.h>
 *  #include <ccan/ilog/ilog.h>
 *
 *  int main(void){
 *    int i;
 *    printf("ilog32(0x%08X)=%i\n",0,ilog32(0));
 *    for(i=1;i<=STATIC_ILOG_32(USHRT_MAX);i++){
 *      uint32_t v;
 *      v=(uint32_t)1U<<(i-1);
 *      //Here we know v is non-zero, so we can use ilog32_nz().
 *      printf("ilog32(0x%08X)=%i\n",v,ilog32_nz(v));
 *    }
 *    return 0;
 *  }
 *
 * License: CC0 (Public domain)
 * Author: Timothy B. Terriberry <tterribe@xiph.org>
 */
#include "config.h"
#include <string.h>
#include <stdio.h>

int main(int _argc,const char *_argv[]){
  /*Expect exactly one argument.*/
  if(_argc!=2)return 1;
  if(strcmp(_argv[1],"depends")==0){
    printf("ccan/compiler\n");
    return 0;
  }
  return 1;
}