/*
 *  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
 *
 *  Use of this source code is governed by a BSD-style license
 *  that can be found in the LICENSE file in the root of the source
 *  tree. An additional intellectual property rights grant can be found
 *  in the file PATENTS.  All contributing project authors may
 *  be found in the AUTHORS file in the root of the source tree.
 */


/*
 * This file contains implementations of the randomization functions
 * WebRtcSpl_RandU()
 * WebRtcSpl_RandN()
 * WebRtcSpl_RandUArray()
 *
 * The description header can be found in signal_processing_library.h
 *
 */

#include "webrtc/common_audio/signal_processing/include/signal_processing_library.h"

static const uint32_t kMaxSeedUsed = 0x80000000;

static const int16_t kRandNTable[] = {
    9178,    -7260,       40,    10189,     4894,    -3531,   -13779,    14764,
   -4008,    -8884,    -8990,     1008,     7368,     5184,     3251,    -5817,
   -9786,     5963,     1770,     8066,    -7135,    10772,    -2298,     1361,
    6484,     2241,    -8633,      792,      199,    -3344,     6553,   -10079,
  -15040,       95,    11608,   -12469,    14161,    -4176,     2476,     6403,
   13685,   -16005,     6646,     2239,    10916,    -3004,     -602,    -3141,
    2142,    14144,    -5829,     5305,     8209,     4713,     2697,    -5112,
   16092,    -1210,    -2891,    -6631,    -5360,   -11878,    -6781,    -2739,
   -6392,      536,    10923,    10872,     5059,    -4748,    -7770,     5477,
      38,    -1025,    -2892,     1638,     6304,    14375,   -11028,     1553,
   -1565,    10762,     -393,     4040,     5257,    12310,     6554,    -4799,
    4899,    -6354,     1603,    -1048,    -2220,     8247,     -186,    -8944,
  -12004,     2332,     4801,    -4933,     6371,      131,     8614,    -5927,
   -8287,   -22760,     4033,   -15162,     3385,     3246,     3153,    -5250,
    3766,      784,     6494,      -62,     3531,    -1582,    15572,      662,
   -3952,     -330,    -3196,      669,     7236,    -2678,    -6569,    23319,
   -8645,     -741,    14830,   -15976,     4903,      315,   -11342,    10311,
    1858,    -7777,     2145,     5436,     5677,     -113,   -10033,      826,
   -1353,    17210,     7768,      986,    -1471,     8291,    -4982,     8207,
  -14911,    -6255,    -2449,   -11881,    -7059,   -11703,    -4338,     8025,
    7538,    -2823,   -12490,     9470,    -1613,    -2529,   -10092,    -7807,
    9480,     6970,   -12844,     5123,     3532,     4816,     4803,    -8455,
   -5045,    14032,    -4378,    -1643,     5756,   -11041,    -2732,   -16618,
   -6430,   -18375,    -3320,     6098,     5131,    -4269,    -8840,     2482,
   -7048,     1547,   -21890,    -6505,    -7414,     -424,   -11722,     7955,
    1653,   -17299,     1823,      473,    -9232,     3337,     1111,      873,
    4018,    -8982,     9889,     3531,   -11763,    -3799,     7373,    -4539,
    3231,     7054,    -8537,     7616,     6244,    16635,      447,    -2915,
   13967,      705,    -2669,    -1520,    -1771,   -16188,     5956,     5117,
    6371,    -9936,    -1448,     2480,     5128,     7550,    -8130,     5236,
    8213,    -6443,     7707,    -1950,   -13811,     7218,     7031,    -3883,
      67,     5731,    -2874,    13480,    -3743,     9298,    -3280,     3552,
   -4425,      -18,    -3785,    -9988,    -5357,     5477,   -11794,     2117,
    1416,    -9935,     3376,      802,    -5079,    -8243,    12652,       66,
    3653,    -2368,     6781,   -21895,    -7227,     2487,     7839,     -385,
    6646,    -7016,    -4658,     5531,    -1705,      834,      129,     3694,
   -1343,     2238,   -22640,    -6417,   -11139,    11301,    -2945,    -3494,
   -5626,      185,    -3615,    -2041,    -7972,    -3106,      -60,   -23497,
   -1566,    17064,     3519,     2518,      304,    -6805,   -10269,     2105,
    1936,     -426,     -736,    -8122,    -1467,     4238,    -6939,   -13309,
     360,     7402,    -7970,    12576,     3287,    12194,    -6289,   -16006,
    9171,     4042,    -9193,     9123,    -2512,     6388,    -4734,    -8739,
    1028,    -5406,    -1696,     5889,     -666,    -4736,     4971,     3565,
    9362,    -6292,     3876,    -3652,   -19666,     7523,    -4061,      391,
  -11773,     7502,    -3763,     4929,    -9478,    13278,     2805,     4496,
    7814,    16419,    12455,   -14773,     2127,    -2746,     3763,     4847,
    3698,     6978,     4751,    -6957,    -3581,      -45,     6252,     1513,
   -4797,    -7925,    11270,    16188,    -2359,    -5269,     9376,   -10777,
    7262,    20031,    -6515,    -2208,    -5353,     8085,    -1341,    -1303,
    7333,     5576,     3625,     5763,    -7931,     9833,    -3371,   -10305,
    6534,   -13539,    -9971,      997,     8464,    -4064,    -1495,     1857,
   13624,     5458,     9490,   -11086,    -4524,    12022,     -550,     -198,
     408,    -8455,    -7068,    10289,     9712,    -3366,     9028,    -7621,
   -5243,     2362,     6909,     4672,    -4933,    -1799,     4709,    -4563,
     -62,     -566,     1624,    -7010,    14730,   -17791,    -3697,    -2344,
   -1741,     7099,    -9509,    -6855,    -1989,     3495,    -2289,     2031,
   12784,      891,    14189,    -3963,    -5683,      421,   -12575,     1724,
  -12682,    -5970,    -8169,     3143,    -1824,    -5488,    -5130,     8536,
   12799,      794,     5738,     3459,   -11689,     -258,    -3738,    -3775,
   -8742,     2333,     8312,    -9383,    10331,    13119,     8398,    10644,
  -19433,    -6446,   -16277,   -11793,    16284,     9345,    15222,    15834,
    2009,    -7349,      130,   -14547,      338,    -5998,     3337,    21492,
    2406,     7703,     -951,    11196,     -564,     3406,     2217,     4806,
    2374,    -5797,    11839,     8940,   -11874,    18213,     2855,    10492
};

static uint32_t IncreaseSeed(uint32_t* seed) {
  seed[0] = (seed[0] * ((int32_t)69069) + 1) & (kMaxSeedUsed - 1);
  return seed[0];
}

int16_t WebRtcSpl_RandU(uint32_t* seed) {
  return (int16_t)(IncreaseSeed(seed) >> 16);
}

int16_t WebRtcSpl_RandN(uint32_t* seed) {
  return kRandNTable[IncreaseSeed(seed) >> 23];
}

// Creates an array of uniformly distributed variables.
int16_t WebRtcSpl_RandUArray(int16_t* vector,
                             int16_t vector_length,
                             uint32_t* seed) {
  int i;
  for (i = 0; i < vector_length; i++) {
    vector[i] = WebRtcSpl_RandU(seed);
  }
  return vector_length;
}
