Utils_1.h
上传用户:speoil
上传日期:2021-10-06
资源大小:100k
文件大小:4k
源码类别:

3G开发

开发平台:

C/C++

  1. #ifndef UTILS_1
  2. #define UTILS_1
  3. #include <math.h>
  4. #include <iostream.h>
  5. #include <string.h>
  6. /************************************************************************
  7.  *
  8.  * Cout
  9.  *
  10.  ************************************************************************/
  11. class reportbuf : public streambuf
  12. {
  13. public:
  14.    int IsDirectedToErr;  // BOOLEAN has not yet been defined at this stage of compilation
  15.    FILE *fp;
  16. public:
  17.    reportbuf(): IsDirectedToErr(/*FALSE*/ 0), fp(NULL)
  18.    { }
  19.    void OpenFile(char *FileName)
  20.    {
  21.       // Make lowercase copy of FileName
  22.       char buffer[1000];
  23.       int i;
  24.       for (i = 0; FileName[i] != ''; i++) buffer[i] = tolower(FileName[i]);
  25.       buffer[i] = '';
  26.       // If Filename is "err"
  27.       if (strcmp(buffer, "err") == 0)
  28.          IsDirectedToErr = /*TRUE*/ 1;
  29.       else
  30.          fp = fopen(FileName, "w");
  31.    }
  32.    virtual int overflow( int nCh ) 
  33.    {
  34.       if (!IsDirectedToErr)
  35.       {
  36.          if (fp == NULL)
  37.          {
  38.             printf("Reportbuf::overflow:  file not openedn");
  39.             exit(1);
  40.          }
  41.          putchar(nCh);
  42.          fputc(nCh, fp);
  43.          fflush(fp);
  44.       }
  45.       else
  46.       {
  47.          fputc(nCh, stderr);
  48.       }
  49.       return 0;
  50.    }
  51.    virtual int underflow()
  52.    {
  53.       if (!IsDirectedToErr)
  54.          fflush(fp);
  55.       return 0;
  56.    }
  57.    ~reportbuf()
  58.    {
  59.       if (!IsDirectedToErr)
  60.          fclose(fp);
  61.    }
  62. } ;
  63. extern ostream ReportOut;
  64. extern reportbuf ReportBuf;
  65. #define cout ReportOut
  66. /************************************************************************
  67.  *
  68.  * Definitions
  69.  *
  70.  ************************************************************************/
  71. #define INF             1e10
  72. #define EPSILON         1e-10
  73. #define TRUE   1
  74. #define FALSE  0
  75. typedef unsigned char BYTE;
  76. typedef unsigned char BOOLEAN;
  77. #define MAX_Q  64  // Maximum allowed Q   (to be freely modified)
  78. /************************************************************************
  79.  *
  80.  * Functions
  81.  *
  82.  ************************************************************************/
  83. ifstream &operator>>(ifstream &file, double &d);
  84. ifstream &operator>>(ifstream &file, int &num);
  85. int uniform_random(int p_max);
  86. inline double LLR(double x)
  87. {
  88.    return log((1-x)/x);
  89. }
  90. inline int max(int x, int y)
  91. {
  92.    return (x > y) ? x : y;
  93. }
  94. inline double max(double x, double y)
  95. {
  96.    return (x > y) ? x : y;
  97. }
  98. inline double mylog(double x)
  99. {
  100.    return (x != 0) ? log(x) : -INF;
  101. }
  102. inline int SumBits(BYTE b)
  103. {
  104.    int sum = 0;
  105.    for(; b != 0; b >>= 1)
  106.       sum += b & 1;
  107.    return sum;
  108. }
  109. inline int XORBits(BYTE b)
  110. {
  111.    int sum = 0;
  112.    for(; b != 0; b >>= 1)
  113.       sum ^= b & 1;
  114.    return sum;
  115. }
  116. inline int SumBitsLong(long l)
  117. {
  118.    int sum = 0;
  119.    for(; l != 0; l >>= 1)
  120.       sum += l & 1;
  121.    return sum;
  122. }
  123. inline double log2(double x)
  124. {
  125.    if (x > 0)
  126.       return log(x)/log(2.);
  127.    else
  128.       return -INF;
  129. }
  130. inline int Intlog2(int x)
  131. {
  132.    int acc = 0;
  133.    while (x > 1)
  134.    {
  135.       x >>= 1;
  136.       acc += 1;
  137.    }
  138.    return acc;
  139. }
  140. inline BOOLEAN IsPowerOfTwo(int num)
  141. {
  142.    BOOLEAN Reply = TRUE;
  143.    for (int i = num; i > 2; i = i / 2)
  144.    {
  145.       if ((i % 2) != 0)
  146.       {
  147.          Reply = FALSE;
  148.          break;
  149.       }
  150.    }
  151.    return Reply;
  152. }
  153. inline BOOLEAN isnumber(char c)
  154. {
  155.    return (('0' <= c) && (c <= '9'));
  156. }
  157. inline double mod(double x, double y)
  158. {
  159.    return x - floor(x / y) * y;
  160. }
  161. inline double min_double(double x, double y)
  162. {
  163.    return (x < y) ? x : y;
  164. }
  165. /************************************************************************
  166.  *
  167.  * Portability include file
  168.  *
  169.  ************************************************************************/
  170. #include "Portability.h"
  171. #endif