helper_base.c
上传用户:wstnjxml
上传日期:2014-04-03
资源大小:7248k
文件大小:2k
源码类别:

Windows CE

开发平台:

C/C++

  1. /*****************************************************************************
  2.  *
  3.  * This program is free software ; you can redistribute it and/or modify
  4.  * it under the terms of the GNU General Public License as published by
  5.  * the Free Software Foundation; either version 2 of the License, or
  6.  * (at your option) any later version.
  7.  *
  8.  * This program is distributed in the hope that it will be useful,
  9.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11.  * GNU General Public License for more details.
  12.  *
  13.  * You should have received a copy of the GNU General Public License
  14.  * along with this program; if not, write to the Free Software
  15.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  16.  *
  17.  * $Id: helper_base.c 548 2006-01-08 22:41:57Z picard $
  18.  *
  19.  * The Core Pocket Media Player
  20.  * Copyright (c) 2004-2005 Gabor Kovacs
  21.  *
  22.  ****************************************************************************/
  23. #include "common.h"
  24. #include "../splitter/asf.h"
  25. int GCD(int a,int b)
  26. {
  27. int c;
  28. while (b)
  29. {
  30. c = b;
  31. b = a % b;
  32. a = c;
  33. }
  34. return a;
  35. }
  36. void Simplify(fraction* f, int MaxNum, int MaxDen)
  37. {
  38. int Den = abs(f->Den);
  39. int Num = abs(f->Num);
  40. if ((int64_t)Num*MaxDen < (int64_t)Den*MaxNum)
  41. {
  42. if (Den > MaxDen)
  43. {
  44. f->Num = Scale(f->Num,MaxDen,Den);
  45. f->Den = Scale(f->Den,MaxDen,Den);
  46. }
  47. }
  48. else
  49. {
  50. if (Num > MaxNum)
  51. {
  52. f->Num = Scale(f->Num,MaxNum,Num);
  53. f->Den = Scale(f->Den,MaxNum,Num);
  54. }
  55. }
  56. }
  57. void SwapPByte(uint8_t** a, uint8_t** b)
  58. {
  59. uint8_t* t = *a;
  60. *a = *b;
  61. *b = t;
  62. }
  63. void SwapPChar(tchar_t** a, tchar_t** b)
  64. {
  65. tchar_t* t = *a;
  66. *a = *b;
  67. *b = t;
  68. }
  69. void SwapInt(int* a, int* b)
  70. {
  71. int t = *a;
  72. *a = *b;
  73. *b = t;
  74. }
  75. void SwapLong(long* a, long* b)
  76. {
  77. long t = *a;
  78. *a = *b;
  79. *b = t;
  80. }
  81. void SwapBool(bool_t* a, bool_t* b)
  82. {
  83. bool_t t = *a;
  84. *a = *b;
  85. *b = t;
  86. }
  87. void SwapPoint(point* p)
  88. {
  89. int t = p->x;
  90. p->x = p->y;
  91. p->y = t;
  92. }
  93. void SwapRect(rect* r)
  94. {
  95. int t1 = r->x;
  96. int t2 = r->Width;
  97. r->x = r->y;
  98. r->Width = r->Height;
  99. r->y = t1;
  100. r->Height = t2;
  101. }
  102. void* Alloc16(size_t n)
  103. {
  104. char* p = (char*) malloc(n+sizeof(void*)+16);
  105. if (p)
  106. {
  107. uintptr_t i;
  108. char* p0 = p;
  109. p += sizeof(void*);
  110. i = (uintptr_t)p & 15;
  111. if (i) p += 16-i;
  112. ((void**)p)[-1] = p0;
  113. }
  114. return p;
  115. }
  116. void Free16(void* p)
  117. {
  118. if (p)
  119. free(((void**)p)[-1]);
  120. }