package com.adobe.utils {
    
    import flash.utils.Endian;
    
    /**
     * Contains reusable methods for operations pertaining 
     * to int values.
     */
    public class IntUtil {
        
        /**
         * Rotates x left n bits
         *
         * @langversion ActionScript 3.0
         * @playerversion Flash 9.0
         * @tiptext
         */
        public static function rol ( x:int, n:int ):int {
            return ( x << n ) | ( x >>> ( 32 - n ) );
        }
        
        /**
         * Rotates x right n bits
         *
         * @langversion ActionScript 3.0
         * @playerversion Flash 9.0
         * @tiptext
         */
        public static function ror ( x:int, n:int ):uint {
            var nn:int = 32 - n;
            return ( x << nn ) | ( x >>> ( 32 - nn ) );
        }
        
        /** String for quick lookup of a hex character based on index */
        private static var hexChars:String = "0123456789abcdef";
        
        /**
         * Outputs the hex value of a int, allowing the developer to specify
         * the endinaness in the process.  Hex output is lowercase.
         *
         * @param n The int value to output as hex
         * @param bigEndian Flag to output the int as big or little endian
         * @return A string of length 8 corresponding to the 
         *        hex representation of n ( minus the leading "0x" )
         * @langversion ActionScript 3.0
         * @playerversion Flash 9.0
         * @tiptext
         */
        public static function toHex( n:int, bigEndian:Boolean = false ):String {
            var s:String = "";
            
            if ( bigEndian ) {
                for ( var i:int = 0; i < 4; i++ ) {
                    s += hexChars.charAt( ( n >> ( ( 3 - i ) * 8 + 4 ) ) & 0xF ) 
                        + hexChars.charAt( ( n >> ( ( 3 - i ) * 8 ) ) & 0xF );
                }
            } else {
                for ( var x:int = 0; x < 4; x++ ) {
                    s += hexChars.charAt( ( n >> ( x * 8 + 4 ) ) & 0xF )
                        + hexChars.charAt( ( n >> ( x * 8 ) ) & 0xF );
                }
            }
            
            return s;
        }
    }
        
}