]> scripts.mit.edu Git - autoinstallsdev/mediawiki.git/blobdiff - vendor/wikimedia/avro/lib/avro/debug.php
MediaWiki 1.30.2
[autoinstallsdev/mediawiki.git] / vendor / wikimedia / avro / lib / avro / debug.php
diff --git a/vendor/wikimedia/avro/lib/avro/debug.php b/vendor/wikimedia/avro/lib/avro/debug.php
new file mode 100644 (file)
index 0000000..2278f19
--- /dev/null
@@ -0,0 +1,194 @@
+<?php
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @package Avro
+ */
+
+/**
+ * Avro library code debugging functions
+ * @package Avro
+ */
+class AvroDebug
+{
+
+  /**
+   * @var int high debug level
+   */
+  const DEBUG5 = 5;
+  /**
+   * @var int low debug level
+   */
+  const DEBUG1 = 1;
+  /**
+   * @var int current debug level
+   */
+  const DEBUG_LEVEL = self::DEBUG1;
+
+  /**
+   * @var int $debug_level
+   * @returns boolean true if the given $debug_level is equivalent
+   *                  or more verbose than than the current debug level
+   *                  and false otherwise.
+   */
+  static function is_debug($debug_level=self::DEBUG1)
+  {
+    return (self::DEBUG_LEVEL >= $debug_level);
+  }
+
+  /**
+   * @param string $format format string for the given arguments. Passed as is
+   *                     to <code>vprintf</code>.
+   * @param array  $args   array of arguments to pass to vsprinf.
+   * @param int    $debug_level debug level at which to print this statement
+   * @returns boolean true
+   */
+  static function debug($format, $args, $debug_level=self::DEBUG1)
+  {
+    if (self::is_debug($debug_level))
+      vprintf($format . "\n", $args);
+    return true;
+  }
+
+  /**
+   * @param string $str
+   * @returns string[] array of hex representation of each byte of $str
+   */
+  static function hex_array($str) { return self::bytes_array($str); }
+
+  /**
+   * @param string $str
+   * @param string $joiner string used to join
+   * @returns string hex-represented bytes of each byte of $str
+                     joined by $joiner
+   */
+  static function hex_string($str, $joiner=' ')
+  {
+    return join($joiner, self::hex_array($str));
+  }
+
+  /**
+   * @param string $str
+   * @param string $format format to represent bytes
+   * @returns string[] array of each byte of $str formatted using $format
+   */
+  static function bytes_array($str, $format='x%02x')
+  {
+    $x = array();
+    foreach (str_split($str) as $b)
+      $x []= sprintf($format, ord($b));
+    return $x;
+  }
+
+  /**
+   * @param string $str
+   * @returns string[] array of bytes of $str represented in decimal format ('%3d')
+   */
+  static function dec_array($str) { return self::bytes_array($str, '%3d'); }
+
+  /**
+   * @param string $str
+   * @param string $joiner string to join bytes of $str
+   * @returns string of bytes of $str represented in decimal format
+   * @uses dec_array()
+   */
+  static function dec_string($str, $joiner = ' ')
+  {
+    return join($joiner, self::dec_array($str));
+  }
+
+  /**
+   * @param string $str
+   * @param string $format one of 'ctrl', 'hex', or 'dec' for control,
+                           hexadecimal, or decimal format for bytes.
+                           - ctrl: ASCII control characters represented as text.
+                             For example, the null byte is represented as 'NUL'.
+                             Visible ASCII characters represent themselves, and
+                             others are represented as a decimal ('%03d')
+                           - hex: bytes represented in hexadecimal ('%02X')
+                           - dec: bytes represented in decimal ('%03d')
+   * @returns string[] array of bytes represented in the given format.
+   */
+  static function ascii_array($str, $format='ctrl')
+  {
+    if (!in_array($format, array('ctrl', 'hex', 'dec')))
+      throw new AvroException('Unrecognized format specifier');
+
+    $ctrl_chars = array('NUL', 'SOH', 'STX', 'ETX', 'EOT', 'ENQ', 'ACK', 'BEL',
+                        'BS',  'HT',  'LF',  'VT',  'FF',  'CR',  'SO',  'SI',
+                        'DLE', 'DC1', 'DC2', 'DC3', 'DC4', 'NAK', 'SYN', 'ETB',
+                        'CAN', 'EM',  'SUB', 'ESC', 'FS',  'GS',  'RS',  'US');
+    $x = array();
+    foreach (str_split($str) as $b)
+    {
+      $db = ord($b);
+      if ($db < 32)
+      {
+        switch ($format)
+        {
+          case 'ctrl':
+            $x []= str_pad($ctrl_chars[$db], 3, ' ', STR_PAD_LEFT);
+            break;
+          case 'hex':
+            $x []= sprintf("x%02X", $db);
+            break;
+          case 'dec':
+            $x []= str_pad($db, 3, '0', STR_PAD_LEFT);
+            break;
+        }
+      }
+      else if ($db < 127)
+        $x []= "  $b";
+      else if ($db == 127)
+      {
+        switch ($format)
+        {
+          case 'ctrl':
+            $x []= 'DEL';
+            break;
+          case 'hex':
+            $x []= sprintf("x%02X", $db);
+            break;
+          case 'dec':
+            $x []= str_pad($db, 3, '0', STR_PAD_LEFT);
+            break;
+        }
+      }
+      else
+        if ('hex' == $format)
+          $x []= sprintf("x%02X", $db);
+        else
+          $x []= str_pad($db, 3, '0', STR_PAD_LEFT);
+    }
+    return $x;
+  }
+
+  /**
+   * @param string $str
+   * @param string $format one of 'ctrl', 'hex', or 'dec'.
+   *                       See {@link self::ascii_array()} for more description
+   * @param string $joiner
+   * @returns string of bytes joined by $joiner
+   * @uses ascii_array()
+   */
+  static function ascii_string($str, $format='ctrl', $joiner = ' ')
+  {
+    return join($joiner, self::ascii_array($str, $format));
+  }
+}