Moved for merge preparation.
[core.git] / contrib / lfdb2 / write.php
diff --git a/contrib/lfdb2/write.php b/contrib/lfdb2/write.php
new file mode 100644 (file)
index 0000000..25cdbbd
--- /dev/null
@@ -0,0 +1,69 @@
+<?php
+error_reporting(E_ALL | E_STRICT);
+
+define('__STEP_32'  , 3);
+define('__LEFT_32'  , 0xffff0000);
+define('__RIGHT_32' , 0x0000ffff);
+define('__FACTOR_32', 16);
+define('__FORMAT_WRITE_32', 'II');
+
+define('__STEP_64'  , 7);
+define('__LEFT_64'  , 0xffffffff00000000);
+define('__RIGHT_64' , 0x00000000ffffffff);
+define('__FACTOR_64', 32);
+define('__FORMAT_WRITE_64', 'NN');
+
+// Default is 32-bit
+$__factor = constant('__FACTOR_32');
+$__left   = constant('__LEFT_32');
+$__right  = constant('__RIGHT_32');
+$__format = constant('__FORMAT_WRITE_32');
+$__step   = constant('__STEP_32');
+
+if ((isset($_SERVER['argv'][1])) && ($_SERVER['argv'][1] == '-64')) {
+       // Use 64-bit
+       $__factor = constant('__FACTOR_64');
+       $__left   = constant('__LEFT_64');
+       $__right  = constant('__RIGHT_64');
+       $__format = constant('__FORMAT_WRITE_64');
+       $__step   = constant('__STEP_64');
+} // END - if
+
+$str = gzcompress(file_get_contents('test.data'), 9);
+
+$encoded = '';
+
+for ($idx = 0; $idx < strlen($str); $idx += $__step) {
+       $big = 0;
+       for ($i = 0; $i < $__step; $i++) {
+               $factor = ($__step - 1 - $i);
+
+               if (($idx + $i) <= strlen($str)) {
+                       $ord = ord(substr($str, ($idx + $i), 1));
+
+                       $add = $ord * pow(256, $factor);
+
+                       $big += $add;
+
+                       //print 'idx=' . $idx . ',i=' . $i . ',ord=' . $ord . ',factor=' . $factor . ',add=' . $add . ',big=' . $big . PHP_EOL;
+               } // END - if
+       } // END - for
+
+       $l = ($big & $__left) >>$__factor;
+       $r = $big & $__right;
+
+       $unpacked = str_pad(pack($__format, $l, $r), 8, '0', STR_PAD_LEFT);
+       //print 'big=' . $big . ',unpacked('.strlen($unpacked) . ')='.md5($unpacked).PHP_EOL;
+
+       $encoded .= $unpacked;
+} // END - for
+
+print 'Hash(' . strlen($encoded) . ')=' . md5($encoded) . PHP_EOL;
+print 'Encoded ' . strlen($str) . ' bytes into ' . strlen($encoded) . ' bytes ...' . PHP_EOL;
+
+file_put_contents('test.data.bin' . ($__factor * 2), $encoded);
+
+print 'File size is: ' . filesize('test.data.bin' . ($__factor * 2)) . ' bytes.' . PHP_EOL;
+
+// [EOF]
+?>