/* ------------------------------------------------------------------
 * Copyright (C) 2008 PacketVideo
 *
 * Licensed 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.
 * -------------------------------------------------------------------
 */
/*

 Pathname: ./src/digit_reversal_tables.c
 Funtions:

     Date: 9/04/2002

------------------------------------------------------------------------------
 REVISION HISTORY

 Description:

  ------------------------------------------------------------------------------
 MODULE DESCRIPTION

  Tables for digit reverse operation

------------------------------------------------------------------------------
*/


/*----------------------------------------------------------------------------
; INCLUDES
----------------------------------------------------------------------------*/

#include "digit_reversal_tables.h"
#include "imdct_fxp.h"

/*----------------------------------------------------------------------------
; MACROS
; Define module specific macros here
----------------------------------------------------------------------------*/

/*----------------------------------------------------------------------------
; DEFINES
; Include all pre-processor statements here. Include conditional
; compile variables also.
----------------------------------------------------------------------------*/

/*----------------------------------------------------------------------------
; LOCAL FUNCTION DEFINITIONS
; Function Prototype declaration
----------------------------------------------------------------------------*/

/*----------------------------------------------------------------------------
; LOCAL VARIABLE DEFINITIONS
; Variable declaration - defined here and used outside this module
----------------------------------------------------------------------------*/


/*----------------------------------------------------------------------------
; EXTERNAL FUNCTION REFERENCES
; Declare functions defined elsewhere and referenced in this module
----------------------------------------------------------------------------*/

/*----------------------------------------------------------------------------
; EXTERNAL VARIABLES REFERENCES
; Declare variables used in this module but defined elsewhere
----------------------------------------------------------------------------*/

/*
------------------------------------------------------------------------------
 Digit Reverse tables
------------------------------------------------------------------------------
*/

const Int16 digit_reverse_64[ 64] =
{
    + 0,  + 32,  + 64,  + 96,
    + 8,  + 40,  + 72, + 104,
    + 16,  + 48,  + 80, + 112,
    + 24,  + 56,  + 88, + 120,
    + 2,  + 34,  + 66,  + 98,
    + 10,  + 42,  + 74, + 106,
    + 18,  + 50,  + 82, + 114,
    + 26,  + 58,  + 90, + 122,
    + 4,  + 36,  + 68, + 100,
    + 12,  + 44,  + 76, + 108,
    + 20,  + 52,  + 84, + 116,
    + 28,  + 60,  + 92, + 124,
    + 6,  + 38,  + 70, + 102,
    + 14,  + 46,  + 78, + 110,
    + 22,  + 54,  + 86, + 118,
    + 30,  + 62,  + 94, + 126
};


const Int16 digit_reverse_256[ 256] =
{
    + 0, + 128, + 256, + 384,
    + 32, + 160, + 288, + 416,
    + 64, + 192, + 320, + 448,
    + 96, + 224, + 352, + 480,
    + 8, + 136, + 264, + 392,
    + 40, + 168, + 296, + 424,
    + 72, + 200, + 328, + 456,
    + 104, + 232, + 360, + 488,
    + 16, + 144, + 272, + 400,
    + 48, + 176, + 304, + 432,
    + 80, + 208, + 336, + 464,
    + 112, + 240, + 368, + 496,
    + 24, + 152, + 280, + 408,
    + 56, + 184, + 312, + 440,
    + 88, + 216, + 344, + 472,
    + 120, + 248, + 376, + 504,
    + 2, + 130, + 258, + 386,
    + 34, + 162, + 290, + 418,
    + 66, + 194, + 322, + 450,
    + 98, + 226, + 354, + 482,
    + 10, + 138, + 266, + 394,
    + 42, + 170, + 298, + 426,
    + 74, + 202, + 330, + 458,
    + 106, + 234, + 362, + 490,
    + 18, + 146, + 274, + 402,
    + 50, + 178, + 306, + 434,
    + 82, + 210, + 338, + 466,
    + 114, + 242, + 370, + 498,
    + 26, + 154, + 282, + 410,
    + 58, + 186, + 314, + 442,
    + 90, + 218, + 346, + 474,
    + 122, + 250, + 378, + 506,
    + 4, + 132, + 260, + 388,
    + 36, + 164, + 292, + 420,
    + 68, + 196, + 324, + 452,
    + 100, + 228, + 356, + 484,
    + 12, + 140, + 268, + 396,
    + 44, + 172, + 300, + 428,
    + 76, + 204, + 332, + 460,
    + 108, + 236, + 364, + 492,
    + 20, + 148, + 276, + 404,
    + 52, + 180, + 308, + 436,
    + 84, + 212, + 340, + 468,
    + 116, + 244, + 372, + 500,
    + 28, + 156, + 284, + 412,
    + 60, + 188, + 316, + 444,
    + 92, + 220, + 348, + 476,
    + 124, + 252, + 380, + 508,
    + 6, + 134, + 262, + 390,
    + 38, + 166, + 294, + 422,
    + 70, + 198, + 326, + 454,
    + 102, + 230, + 358, + 486,
    + 14, + 142, + 270, + 398,
    + 46, + 174, + 302, + 430,
    + 78, + 206, + 334, + 462,
    + 110, + 238, + 366, + 494,
    + 22, + 150, + 278, + 406,
    + 54, + 182, + 310, + 438,
    + 86, + 214, + 342, + 470,
    + 118, + 246, + 374, + 502,
    + 30, + 158, + 286, + 414,
    + 62, + 190, + 318, + 446,
    + 94, + 222, + 350, + 478,
    + 126, + 254, + 382, + 510
};




const Int16 digit_reverse_swap_256[ 241] =
{
    + 2, + 128,   + 4, + 256,
    + 6, + 384,   + 8,  + 32,
    + 10, + 160,  + 12, + 288,
    + 14, + 416,  + 16,  + 64,
    + 18, + 192,  + 20, + 320,
    + 22, + 448,  + 24,  + 96,
    + 26, + 224,  + 28, + 352,
    + 30, + 480,  + 34, + 136,
    + 36, + 264,  + 38, + 392,
    + 42, + 168,  + 44, + 296,
    + 46, + 424,  + 48,  + 72,
    + 50, + 200,  + 52, + 328,
    + 54, + 456,  + 56, + 104,
    + 58, + 232,  + 60, + 360,
    + 62, + 488,  + 66, + 144,
    + 68, + 272,  + 70, + 400,
    + 74, + 176,  + 76, + 304,
    + 78, + 432,  + 82, + 208,
    + 84, + 336,  + 86, + 464,
    + 88, + 112,  + 90, + 240,
    + 92, + 368,  + 94, + 496,
    + 98, + 152, + 100, + 280,
    + 102, + 408, + 106, + 184,
    + 108, + 312, + 110, + 440,
    + 114, + 216, + 116, + 344,
    + 118, + 472, + 122, + 248,
    + 124, + 376, + 126, + 504,
    + 132, + 258, + 134, + 386,
    + 138, + 162, + 140, + 290,
    + 142, + 418, + 146, + 194,
    + 148, + 322, + 150, + 450,
    + 154, + 226, + 156, + 354,
    + 158, + 482, + 164, + 266,
    + 166, + 394, + 172, + 298,
    + 174, + 426, + 178, + 202,
    + 180, + 330, + 182, + 458,
    + 186, + 234, + 188, + 362,
    + 190, + 490, + 196, + 274,
    + 198, + 402, + 204, + 306,
    + 206, + 434, + 212, + 338,
    + 214, + 466, + 218, + 242,
    + 220, + 370, + 222, + 498,
    + 228, + 282, + 230, + 410,
    + 236, + 314, + 238, + 442,
    + 244, + 346, + 246, + 474,
    + 252, + 378, + 254, + 506,
    + 262, + 388, + 268, + 292,
    + 270, + 420, + 276, + 324,
    + 278, + 452, + 284, + 356,
    + 286, + 484, + 294, + 396,
    + 302, + 428, + 308, + 332,
    + 310, + 460, + 316, + 364,
    + 318, + 492, + 326, + 404,
    + 334, + 436, + 342, + 468,
    + 348, + 372, + 350, + 500,
    + 358, + 412, + 366, + 444,
    + 374, + 476, + 382, + 508,
    + 398, + 422, + 406, + 454,
    + 414, + 486, + 438, + 462,
    + 446, + 494, + 478, + 502
};


#ifdef __cplusplus
extern "C"
{
#endif

    void digit_reversal_swapping(Int32 *y, Int32 *x);

#ifdef __cplusplus
}
#endif

void digit_reversal_swapping(Int32 *y, Int32 *x)
{
    Int16 i, j;
    Int32 tmp[2];
    const Int16 *pTable;

    pTable = digit_reverse_swap_256;

    for (Int k = 120; k != 0; k--)
    {
        i = *pTable++;
        j = *pTable++;
        tmp[0] = y[i];
        tmp[1] = y[i+1];
        y[i]   = y[j];
        y[i+1] = y[j+1];
        y[j]   = tmp[0];
        y[j+1] = tmp[1];

        tmp[0] = x[j];
        tmp[1] = x[j+1];
        x[j]   = x[i];
        x[j+1] = x[i+1];
        x[i]   = tmp[0];
        x[i+1] = tmp[1];

    }

}
