ultimatepp/uppdev/NibblePtr/Entropy.h
cxl 76ab5fd5e9 .uppdev
git-svn-id: svn://ultimatepp.org/upp/trunk@7813 f0d560ea-af0d-0410-9eb7-867de7ffcac7
2014-10-23 04:45:34 +00:00

39 lines
619 B
C++

#ifndef _NibblePtr_Entropy_h_
#define _NibblePtr_Entropy_h_
#include <Core/Core.h>
using namespace Upp;
struct NibblePtr {
byte *ptr;
byte nibble;
force_inline byte Get() {
byte b = *ptr & nibble;
byte r = (b | (b >> 4)) & 0xf;
ptr += nibble & 1;
nibble = ~nibble;
return r;
}
force_inline void Put(byte c) {
if(nibble) {
*ptr |= c;
ptr++;
nibble = false;
}
else {
*ptr = c << 4;
nibble = true;
}
}
void Set(byte *p) { ptr = p; nibble = true; }
};
String FChar(int c);
String Compress(const char *data, const char *end);
#endif