[Assorted-commits] SF.net SVN: assorted: [676] sandbox/trunk/src/c/blocks.c
Brought to you by:
yangzhang
From: <yan...@us...> - 2008-04-23 20:40:51
|
Revision: 676 http://assorted.svn.sourceforge.net/assorted/?rev=676&view=rev Author: yangzhang Date: 2008-04-23 13:40:48 -0700 (Wed, 23 Apr 2008) Log Message: ----------- small sample code for performing block-segmented operations Added Paths: ----------- sandbox/trunk/src/c/blocks.c Added: sandbox/trunk/src/c/blocks.c =================================================================== --- sandbox/trunk/src/c/blocks.c (rev 0) +++ sandbox/trunk/src/c/blocks.c 2008-04-23 20:40:48 UTC (rev 676) @@ -0,0 +1,36 @@ +#include <stdio.h> +#include <stdint.h> + +#define min(X,Y) ((X) < (Y) ? (X) : (Y)) + +enum { blk = 10 }; +enum { datlen = 2 * blk }; + +void +f(uint32_t off, uint32_t len) +{ + uint32_t end = off + len; + uint32_t fstblk = off / blk, lstblk = (end + blk - 1) / blk; + printf("f(off %4d, len %4d), fstblk %2d, lstblk %2d\n", off, len, fstblk, lstblk); + char *p = 0; + for (uint32_t i = fstblk; i < lstblk; i++) { + uint32_t blkoff = i == fstblk ? off % blk : 0; + uint32_t blklen = min(end - i * blk, blk) - blkoff; + printf(" i %2d | blkoff %4d | blklen %4d | p %04p\n", i, blkoff, blklen, p); + p += blklen; + } + printf("\n"); +} + +int +main() +{ + uint32_t starts[] = {0, 1, blk - 1, blk, blk + 1, 2 * blk}; + uint32_t ends[] = {0, 1, blk - 1, blk, blk + 1, 2 * blk}; + for (int i = 0; i < sizeof starts / sizeof(*starts); i++) { + for (int j = 0; j < sizeof ends / sizeof(*starts); j++) { + f(starts[i], ends[j]); + } + } + return 0; +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |