#include #include #include #include #include #include #include "err/posix.h" #include #ifndef _NO_MMAP #include #include #endif #include "util/rw/MmapReader.h" int includedwords=0; void processfile(const std::string& filename) { MmapReader file(filename, MmapReader::readonly); typedef std::vector IntVector; IntVector b(256); IntVector b2[2]; b2[0].resize(256); b2[1].resize(256); IntVector b4[4]; b4[0].resize(256); b4[1].resize(256); b4[2].resize(256); b4[3].resize(256); IntVector w(65536); IntVector w2[2]; w2[0].resize(65536); w2[1].resize(65536); typedef std::map IntMap; IntMap d; int i= 0; for (uint8_t*p= file.begin(), *e= file.end() ; p!=e ; p++) { uint8_t bval= *p; b[bval]++; b2[i&1][bval]++; b4[i&3][bval]++; if (p+1 < e) { uint16_t wval= *(uint16_t*)p; w[wval]++; w2[(i&2)/2][wval]++; } if (includedwords && p+3 < e) { uint32_t dval= *(uint32_t*)p; std::pair ins= d.insert(IntMap::value_type(dval, 1)); if (!ins.second) ins.first->second++; } i++; } // todo: print deviation from average // todo: calc stddev printf("b. "); for (int i=0 ; i<256 ; i++) printf(" %8d", b[i]); printf("\n"); for (int j=0 ; j<2 ; j++) { printf("b%d ", j); for (int i=0 ; i<256 ; i++) printf(" %8d", b2[j][i]); printf("\n"); } for (int j=0 ; j<4 ; j++) { printf("B%d ", j); for (int i=0 ; i<256 ; i++) printf(" %8d", b4[j][i]); printf("\n"); } printf("w. "); for (int i=0 ; i<65536 ; i++) printf(" %8d", w[i]); printf("\n"); for (int j=0 ; j<2 ; j++) { printf("w%d ", j); for (int i=0 ; i<65536 ; i++) printf(" %8d", w2[j][i]); printf("\n"); } if (includedwords) { printf("d. "); for (IntMap::iterator i= d.begin() ; i!=d.end() ; ++i) { printf("%08x %9d\n", i->first, i->second); } } } int main(int argc, char**argv) { for (int i=1 ; i