Skip to content

Instantly share code, notes, and snippets.

View catid's full-sized avatar

Chris Taylor catid

View GitHub Profile
// Get the next bit to flip to produce the 8-bit Gray code at the provided index
// Precondition: index > 0 and index < 256
static int GetBitFlipForGrayCode8(int index)
{
if (index & 1)
return 0;
if (index & 15)
return (0x6764 >> (index & 14)) & 3;
// Get the next bit to flip to produce the 8-bit Gray code at the provided index
// Precondition: index > 0 and index < 256
static int GetBitFlipForGrayCode8(int index)
{
if (index & 1)
return 0;
if (index & 15)
return (0x6764 >> (index & 14)) & 3;
Bitslice(7) 2122196 us; cnt = 15730702
Bitslice(24) 1957533 us; cnt = 15730702
Lauradoux 878497 us; cnt = 15730702
Skipping SSE2 timings; not compiled for that architecture
Skipping SSSE3 timing; not compiled for that architecture.
16-bit LUT 1558676 us; cnt = 15730702
8-bit LUT 2762595 us; cnt = 15730702
popcount 1215033 us; cnt = 15730702
popcountll 427195 us; cnt = 15730702
FreeBSD version 1 4423153 us; cnt = 15730702
PLR FEC PPS ELossMin ELossAvg ELossMax
0.01 0.05 333 0.9976 0.999607 1
0.01 0.07 333 0.9985 0.999913 1
0.01 0.06 333 0.998199 0.999829 1
0.01 0.02 333 0.990996 0.994607 0.997599
0.01 0.18 333 0.9994 0.999994 1
0.01 0.12 333 0.9997 0.999997 1
0.01 0.08 333 0.9985 0.999943 1
0.01 0.19 333 1 1 1
0.01 0.04 333 0.9952 0.998767 1
PLR FEC PPS ELossMin ELossAvg ELossMax
0.01 0.05 333 0.9976 0.999607 1
0.01 0.07 333 0.9985 0.999913 1
0.01 0.06 333 0.998199 0.999829 1
0.01 0.02 333 0.990996 0.994607 0.997599
0.01 0.18 333 0.9994 0.999994 1
0.01 0.12 333 0.9997 0.999997 1
0.01 0.08 333 0.9985 0.999943 1
0.01 0.19 333 1 1 1
0.01 0.04 333 0.9952 0.998767 1
@catid
catid / RoughStrCompare
Created May 27, 2018 03:51
RoughStrCompare
/**
RoughStrCompare()
This does a rough ASCII case-insensitive string comparison. Mainly for fun.
All of the a-z and A-Z ASCII codes are between 0x41 - 0x5A and 0x61 - 0x7A.
The idea here is to mask out 0x20 to make these equivalent (case-insensitive)
but the problem with this idea is that it aliases these characters:
@ with ` [ with { \ with | ] with } ^ with ~
*/
#pragma once
#include "xxxxxxxxxProtocol.h"
#include "xxxxxxxxxTools.h"
#define ZSTD_STATIC_LINKING_ONLY /* Enable advanced API */
#include "thirdparty/zstd/zstd.h" // Zstd
#include "thirdparty/zstd/zstd_errors.h"
namespace xxx {
@catid
catid / gist:1e8e993e1581e92d96515a07c5ce4804
Last active June 19, 2018 04:23
Extra huf_compress heuristic to speed up already-compressed or random data
/* Scan input and build symbol stats */
{ CHECK_V_F(largest, FSE_count_wksp (table->count, &maxSymbolValue, (const BYTE*)src, srcSize, table->count) );
if (largest == srcSize) { *ostart = ((const BYTE*)src)[0]; return 1; } /* single symbol, rle */
if (largest <= (srcSize >> 7) + 1) {
return 0; /* heuristic : probably not compressible enough */
}
/* Added this more accurate heuristic to handle high entropy data properly -catid */
U64 total = 0;
U64 sum_clogc = 0;
{d-Connection} [127.0.0.1:1] Connection::OnTimeSync(ReceivedBPS=105088, LossRate=0)
{d-Connection} [127.0.0.1:1] Connection::OnTimeSync(ReceivedBPS=129088, LossRate=0)
{d-Connection} [127.0.0.1:1] Connection::OnTimeSync(ReceivedBPS=129088, LossRate=0)
{d-Connection} [127.0.0.1:1] Connection::OnTimeSync(ReceivedBPS=113088, LossRate=0.125)
{d-Connection} [127.0.0.1:1] Connection::OnTimeSync(ReceivedBPS=113088, LossRate=0.125)
{d-Connection} [127.0.0.1:1] Connection::OnTimeSync(ReceivedBPS=98944, LossRate=0.230469)
Got router queue filling up simulation working
My crappy current CC increases the send rate to 129KB/S until the queue fills up (filling 1 MB buffer) and data starts dropping off the back
Then CC detects loss and sets send rate lower
@catid
catid / int_compress.cpp
Created July 2, 2018 00:12
Lossy integer compression 32 => 16 bits, 16 => 8 bits
//------------------------------------------------------------------------------
// Intrinsics
/// Returns first position with set bit (LSB = 0)
/// Precondition: x != 0
TONK_FORCE_INLINE unsigned NonzeroLowestBitIndex(uint32_t x)
{
#ifdef _MSC_VER
unsigned long index;
// Note: Ignoring result because x != 0