Revision: 51093
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at September 14, 2011 03:43 by cures
Initial Code
#include <stdio.h> #include <unistd.h> #include <string.h> #include <assert.h> #include <inttypes.h> typedef unsigned int uint_t; class RawReader { static const uint_t RBUF_SIZE = 8192; char rbuf[RBUF_SIZE]; char *rlim, *rpos; int rrlen, reof; char* read_more(char *rpos) { int l, s, t; char *p; if (reof) return rpos; l = rrlen - (rpos - rbuf); if (rpos != rbuf) memmove(rbuf, rpos, l); rpos = rbuf; p = rbuf + l; t = sizeof(rbuf) - l; s = read(0, p, t); if (s < 0) s = 0; rrlen = l + s; rlim = rpos + rrlen; if (s <= 0) { reof = 1; } return rpos; } public: void init(void) { rrlen = 0; reof = 0; rlim = rbuf; rpos = rbuf; } inline int rnextf() { return *rpos++; } inline int rnext() { if (rlim - rpos <= 0) rpos = read_more(rpos); return (rlim - rpos > 0) ? rnextf() : -1; } inline uint32_t getu32() { if (rlim - rpos < 12) rpos = read_more(rpos); uint32_t v; do { v = rnextf() - '0'; } while (v >= 10); uint32_t res = v; for (;;) { v = rnextf() - '0'; if (v >= 10) break; res = res * 10 + v; } return res; } };
Initial URL
Initial Description
Initial Title
Raw Reader with uint32_t parsing
Initial Tags
Initial Language
C++