<?php
/**
 * Zend Framework
 *
 * LICENSE
 *
 * This source file is subject to the new BSD license that is bundled
 * with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://framework.zend.com/license/new-bsd
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@zend.com so we can send you a copy immediately.
 *
 * @category   Zend
 * @package    Zend_Measure
 * @copyright  Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
 * @version    $Id: Binary.php 8064 2008-02-16 10:58:39Z thomas $
 * @license    http://framework.zend.com/license/new-bsd     New BSD License
 */


/**
 * Implement needed classes
 */
require_once 'Zend/Measure/Exception.php';
require_once 'Zend/Measure/Abstract.php';
require_once 'Zend/Locale.php';


/**
 * @category   Zend
 * @package    Zend_Measure
 * @subpackage Zend_Measure_Binary
 * @copyright  Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
 * @license    http://framework.zend.com/license/new-bsd     New BSD License
 *
 */
class Zend_Measure_Binary extends Zend_Measure_Abstract
{
    // Binary definitions
    const STANDARD = 'BYTE';

    const BIT              = 'BIT';
    const CRUMB            = 'CRUMB';
    const NIBBLE           = 'NIBBLE';
    const BYTE             = 'BYTE';
    const KILOBYTE         = 'KILOBYTE';
    const KIBIBYTE         = 'KIBIBYTE';
    const KILO_BINARY_BYTE = 'KILO_BINARY_BYTE';
    const KILOBYTE_SI      = 'KILOBYTE_SI';
    const MEGABYTE         = 'MEGABYTE';
    const MEBIBYTE         = 'MEBIBYTE';
    const MEGA_BINARY_BYTE = 'MEGA_BINARY_BYTE';
    const MEGABYTE_SI      = 'MEGABYTE_SI';
    const GIGABYTE         = 'GIGABYTE';
    const GIBIBYTE         = 'GIBIBYTE';
    const GIGA_BINARY_BYTE = 'GIGA_BINARY_BYTE';
    const GIGABYTE_SI      = 'GIGABYTE_SI';
    const TERABYTE         = 'TERABYTE';
    const TEBIBYTE         = 'TEBIBYTE';
    const TERA_BINARY_BYTE = 'TERA_BINARY_BYTE';
    const TERABYTE_SI      = 'TERABYTE_SI';
    const PETABYTE         = 'PETABYTE';
    const PEBIBYTE         = 'PEBIBYTE';
    const PETA_BINARY_BYTE = 'PETA_BINARY_BYTE';
    const PETABYTE_SI      = 'PETABYTE_SI';
    const EXABYTE          = 'EXABYTE';
    const EXBIBYTE         = 'EXBIBYTE';
    const EXA_BINARY_BYTE  = 'EXA_BINARY_BYTE';
    const EXABYTE_SI       = 'EXABYTE_SI';
    const ZETTABYTE        = 'ZETTABYTE';
    const ZEBIBYTE         = 'ZEBIBYTE';
    const ZETTA_BINARY_BYTE= 'ZETTA_BINARY_BYTE';
    const ZETTABYTE_SI     = 'ZETTABYTE_SI';
    const YOTTABYTE        = 'YOTTABYTE';
    const YOBIBYTE         = 'YOBIBYTE';
    const YOTTA_BINARY_BYTE= 'YOTTA_BINARY_BYTE';
    const YOTTABYTE_SI     = 'YOTTABYTE_SI';

    protected $_UNITS = array(
        'BIT'              => array('0.125',                     'b'),
        'CRUMB'            => array('0.25',                      'crumb'),
        'NIBBLE'           => array('0.5',                       'nibble'),
        'BYTE'             => array('1',                         'B'),
        'KILOBYTE'         => array('1024',                      'kB'),
        'KIBIBYTE'         => array('1024',                      'KiB'),
        'KILO_BINARY_BYTE' => array('1024',                      'KiB'),
        'KILOBYTE_SI'      => array('1000',                      'kB.'),
        'MEGABYTE'         => array('1048576',                   'MB'),
        'MEBIBYTE'         => array('1048576',                   'MiB'),
        'MEGA_BINARY_BYTE' => array('1048576',                   'MiB'),
        'MEGABYTE_SI'      => array('1000000',                   'MB.'),
        'GIGABYTE'         => array('1073741824',                'GB'),
        'GIBIBYTE'         => array('1073741824',                'GiB'),
        'GIGA_BINARY_BYTE' => array('1073741824',                'GiB'),
        'GIGABYTE_SI'      => array('1000000000',                'GB.'),
        'TERABYTE'         => array('1099511627776',             'TB'),
        'TEBIBYTE'         => array('1099511627776',             'TiB'),
        'TERA_BINARY_BYTE' => array('1099511627776',             'TiB'),
        'TERABYTE_SI'      => array('1000000000000',             'TB.'),
        'PETABYTE'         => array('1125899906842624',          'PB'),
        'PEBIBYTE'         => array('1125899906842624',          'PiB'),
        'PETA_BINARY_BYTE' => array('1125899906842624',          'PiB'),
        'PETABYTE_SI'      => array('1000000000000000',          'PB.'),
        'EXABYTE'          => array('1152921504606846976',       'EB'),
        'EXBIBYTE'         => array('1152921504606846976',       'EiB'),
        'EXA_BINARY_BYTE'  => array('1152921504606846976',       'EiB'),
        'EXABYTE_SI'       => array('1000000000000000000',       'EB.'),
        'ZETTABYTE'        => array('1180591620717411303424',    'ZB'),
        'ZEBIBYTE'         => array('1180591620717411303424',    'ZiB'),
        'ZETTA_BINARY_BYTE'=> array('1180591620717411303424',    'ZiB'),
        'ZETTABYTE_SI'     => array('1000000000000000000000',    'ZB.'),
        'YOTTABYTE'        => array('1208925819614629174706176', 'YB'),
        'YOBIBYTE'         => array('1208925819614629174706176', 'YiB'),
        'YOTTA_BINARY_BYTE'=> array('1208925819614629174706176', 'YiB'),
        'YOTTABYTE_SI'     => array('1000000000000000000000000', 'YB.'),
        'STANDARD'         => 'BYTE'
    );
}
