84 lines
2.1 KiB
PHP
84 lines
2.1 KiB
PHP
<?php
|
|
|
|
class Util
|
|
{
|
|
public static function assertEqual($expected, $actual)
|
|
{
|
|
$debug = debug_backtrace();
|
|
$info = "\n- File:" . basename($debug[1]["file"]) . ", Func:" . $debug[1]["function"] . ", Line:" . $debug[1]["line"];
|
|
if ($expected != $actual) {
|
|
echo $info . "\n Assert failed" . "\n Expected :" . $expected . "\n Actual :" . $actual;
|
|
} else {
|
|
echo $info . "\n Assert ok";
|
|
}
|
|
}
|
|
|
|
public static function packUint16($x)
|
|
{
|
|
return pack("v", $x);
|
|
}
|
|
|
|
public static function unpackUint16(&$data)
|
|
{
|
|
$up = unpack("v", substr($data, 0, 2));
|
|
$data = substr($data, 2);
|
|
return $up[1];
|
|
}
|
|
|
|
public static function packUint32($x)
|
|
{
|
|
return pack("V", $x);
|
|
}
|
|
|
|
public static function unpackUint32(&$data)
|
|
{
|
|
$up = unpack("V", substr($data, 0, 4));
|
|
$data = substr($data, 4);
|
|
return $up[1];
|
|
}
|
|
|
|
public static function packInt16($x)
|
|
{
|
|
return pack("s", $x);
|
|
}
|
|
|
|
public static function unpackInt16(&$data)
|
|
{
|
|
$up = unpack("s", substr($data, 0, 2));
|
|
$data = substr($data, 2);
|
|
return $up[1];
|
|
}
|
|
|
|
public static function packString($str)
|
|
{
|
|
return self::packUint16(strlen($str)) . $str;
|
|
}
|
|
|
|
public static function unpackString(&$data)
|
|
{
|
|
$len = self::unpackUint16($data);
|
|
$up = unpack("C*", substr($data, 0, $len));
|
|
$data = substr($data, $len);
|
|
return implode(array_map("chr", $up));
|
|
}
|
|
|
|
public static function packMapUint32($arr)
|
|
{
|
|
ksort($arr);
|
|
$kv = "";
|
|
foreach ($arr as $key => $val) {
|
|
$kv .= self::packUint16($key) . self::packUint32($val);
|
|
}
|
|
return self::packUint16(count($arr)) . $kv;
|
|
}
|
|
|
|
public static function unpackMapUint32(&$data)
|
|
{
|
|
$len = self::unpackUint16($data);
|
|
$arr = [];
|
|
for ($i = 0; $i < $len; $i++) {
|
|
$arr[self::unpackUint16($data)] = self::unpackUint32($data);
|
|
}
|
|
return $arr;
|
|
}
|
|
} |