use Org\Mxchange\CoreFramework\Stream\Input\InputStream;
use Org\Mxchange\CoreFramework\Stream\Output\OutputStreamer;
use Org\Mxchange\CoreFramework\Stream\Output\OutputStream;
-use Org\Mxchange\CoreFramework\String\Utils\StringUtils;
use Org\Mxchange\CoreFramework\Template\CompileableTemplate;
use Org\Mxchange\CoreFramework\User\ManageableAccount;
+use Org\Mxchange\CoreFramework\Utils\String\StringUtils;
use Org\Mxchange\CoreFramework\Visitor\Visitor;
// Import SPL stuff
*/
private $callbackInstance = NULL;
- /**
- * Thousands separator
- */
- private $thousands = '.'; // German
-
- /**
- * Decimal separator
- */
- private $decimals = ','; // German
-
/**
* Generic array
*/
private $genericArray = array();
- /**
- * Array with bitmasks and such for pack/unpack methods to support both
- * 32-bit and 64-bit systems
- */
- private $packingData = array(
- 32 => array(
- 'step' => 3,
- 'left' => 0xffff0000,
- 'right' => 0x0000ffff,
- 'factor' => 16,
- 'format' => 'II',
- ),
- 64 => array(
- 'step' => 7,
- 'left' => 0xffffffff00000000,
- 'right' => 0x00000000ffffffff,
- 'factor' => 32,
- 'format' => 'NN'
- )
- );
-
- /**
- * Simple 64-bit check, thanks to "Salman A" from stackoverflow.com:
- *
- * The integer size is 4 bytes on 32-bit and 8 bytes on a 64-bit system.
- */
- private $archArrayElement = false;
-
/***********************
* Exception codes.... *
***********************/
// Then set it
self::$startupTime = microtime(true);
} // END - if
-
- // Set array element
- $this->archArrayElement = (PHP_INT_SIZE === 8 ? 64 : 32);
}
/**
return crc32($this->__toString());
}
- /**
- * Formats computer generated price values into human-understandable formats
- * with thousand and decimal separators.
- *
- * @param $value The in computer format value for a price
- * @param $currency The currency symbol (use HTML-valid characters!)
- * @param $decNum Number of decimals after commata
- * @return $price The for the current language formated price string
- * @throws MissingDecimalsThousandsSeparatorException If decimals or
- * thousands separator
- * is missing
- */
- public function formatCurrency ($value, $currency = '€', $decNum = 2) {
- // Are all required attriutes set?
- if ((!isset($this->decimals)) || (!isset($this->thousands))) {
- // Throw an exception
- throw new MissingDecimalsThousandsSeparatorException($this, self::EXCEPTION_ATTRIBUTES_ARE_MISSING);
- } // END - if
-
- // Cast the number
- $value = (float) $value;
-
- // Reformat the US number
- $price = number_format($value, $decNum, $this->decimals, $this->thousands) . $currency;
-
- // Return as string...
- return $price;
- }
-
/**
* Appends a trailing slash to a string
*
}
}
- /**
- * Converts e.g. a command from URL to a valid class by keeping out bad characters
- *
- * @param $str The string, what ever it is needs to be converted
- * @return $className Generated class name
- */
- public static final function convertToClassName ($str) {
- // Init class name
- $className = '';
-
- // Convert all dashes in underscores
- $str = StringUtils::convertDashesToUnderscores($str);
-
- // Now use that underscores to get classname parts for hungarian style
- foreach (explode('_', $str) as $strPart) {
- // Make the class name part lower case and first upper case
- $className .= ucfirst(strtolower($strPart));
- } // END - foreach
-
- // Return class name
- return $className;
- }
-
/**
* Marks up the code by adding e.g. line numbers
*
* @return $fieldValue Field value from the user
* @throws NullPointerException If the result instance is null
*/
- public final function getField ($fieldName) {
+ public final function getField (string $fieldName) {
// Default field value
$fieldValue = NULL;
* @return $isSet Whether the given field name is set
* @throws NullPointerException If the result instance is null
*/
- public function isFieldSet ($fieldName) {
+ public function isFieldSet (string $fieldName) {
// Get result instance
$resultInstance = $this->getResultInstance();
* @param $boolean Boolean value
* @return $translated Translated boolean value
*/
- public static final function translateBooleanToYesNo ($boolean) {
+ public static final function translateBooleanToYesNo (bool $boolean) {
// Make sure it is really boolean
assert(is_bool($boolean));
return $translated;
}
- /**
- * Encodes raw data (almost any type) by "serializing" it and then pack it
- * into a "binary format".
- *
- * @param $rawData Raw data (almost any type)
- * @return $encoded Encoded data
- */
- protected function encodeData ($rawData) {
- // Make sure no objects or resources pass through
- assert(!is_object($rawData));
- assert(!is_resource($rawData));
-
- // First "serialize" it (json_encode() is faster than serialize())
- $encoded = $this->packString(json_encode($rawData));
-
- // And return it
- return $encoded;
- }
-
- /**
- * Pack a string into a "binary format". Please execuse me that this is
- * widely undocumented. :-(
- *
- * @param $str Unpacked string
- * @return $packed Packed string
- * @todo Improve documentation
- */
- protected function packString ($str) {
- // Debug message
- //* NOISY-DEBUG */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('str=' . $str . ' - CALLED!');
-
- // First compress the string (gzcompress is okay)
- $str = gzcompress($str);
-
- // Init variable
- $packed = '';
-
- // And start the "encoding" loop
- for ($idx = 0; $idx < strlen($str); $idx += $this->packingData[$this->archArrayElement]['step']) {
- $big = 0;
- for ($i = 0; $i < $this->packingData[$this->archArrayElement]['step']; $i++) {
- $factor = ($this->packingData[$this->archArrayElement]['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 & $this->packingData[$this->archArrayElement]['left']) >>$this->packingData[$this->archArrayElement]['factor'];
- $r = $big & $this->packingData[$this->archArrayElement]['right'];
-
- $chunk = str_pad(pack($this->packingData[$this->archArrayElement]['format'], $l, $r), 8, '0', STR_PAD_LEFT);
- //* NOISY-DEBUG */ print 'big=' . $big . ',chunk('.strlen($chunk) . ')='.md5($chunk).PHP_EOL;
-
- $packed .= $chunk;
- } // END - for
-
- // Return it
- //* NOISY-DEBUG */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('packed=' . $packed . ' - EXIT!');
- return $packed;
- }
-
/**
* Creates a full-qualified file name (FQFN) for given file name by adding
* a configured temporary file path to it.