Ejemplo n.º 1
0
 public KMIF_LOGTABLE LogTableAddRef()
 {
     lock (log_tables_mutex)
     {
         //while (log_tables_mutex != 1)
         //{
         //    XSLEEP(0);
         //}
         if (log_tables_refcount == 0)
         {
             //log_tables = XMALLOC(sizeof(KMIF_LOGTABLE));
             log_tables = new KMIF_LOGTABLE();
             if (log_tables != null)
             {
                 //XMEMSET(log_tables, 0, sizeof(KMIF_LOGTABLE));
                 log_tables.ctx     = log_tables;
                 log_tables.release = LogTableRelease;
                 LogTableCalc(log_tables);
             }
         }
         if (log_tables != null)
         {
             log_tables_refcount++;
         }
     }
     return(log_tables);
 }
Ejemplo n.º 2
0
        public Int32 LogToLin(KMIF_LOGTABLE kmif_lt, Int32 l, UInt32 sft)
        {
            Int32  ret;
            UInt32 ofs;

            ofs = (UInt32)(l + (sft << (LOG_BITS + 1)));
            sft = ofs >> (LOG_BITS + 1);
            if (sft >= LOG_LIN_BITS)
            {
                return(0);
            }
            ofs = (ofs >> 1) & ((1 << LOG_BITS) - 1);
            ret = (Int32)(kmif_lt.logtbl[ofs] >> (Int32)sft);
            return((l & 1) != 0 ? -ret : ret);
        }
Ejemplo n.º 3
0
 public void LogTableRelease(object ctx)
 {
     lock (log_tables_mutex)
     {
         //while (log_tables_mutex != 1)
         //{
         //XSLEEP(0);
         //}
         log_tables_refcount--;
         if (log_tables_refcount == 0)
         {
             //XFREE(ctx);
             log_tables = null;
         }
     }
 }
Ejemplo n.º 4
0
        private void LogTableCalc(KMIF_LOGTABLE kmif_lt)
        {
            UInt32 i;
            double a;

            for (i = 0; i < (1 << LOG_BITS); i++)
            {
                a = (1 << LOG_LIN_BITS) / Math.Pow(2, i / (double)(1 << LOG_BITS));
                kmif_lt.logtbl[i] = (UInt32)a;
            }
            kmif_lt.lineartbl[0] = LOG_LIN_BITS << LOG_BITS;
            for (i = 1; i < (1 << LIN_BITS) + 1; i++)
            {
                UInt32 ua;
                a  = i << (LOG_LIN_BITS - LIN_BITS);
                ua = (UInt32)((LOG_LIN_BITS - (Math.Log(a) / Math.Log(2))) * (1 << LOG_BITS));
                kmif_lt.lineartbl[i] = ua << 1;
            }
        }