home *** CD-ROM | disk | FTP | other *** search
/ Xentax forum attachments archive / xentax.7z / 5036 / source.7z / x_data.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2012-01-01  |  8.0 KB  |  387 lines

  1. #include "xentax.h"
  2.  
  3. float32 float_16_to_32(uint16 value)
  4. {
  5.  // sign/exponent/mantissa
  6.  const uint16 s = (value & 0x8000);
  7.  const uint16 e = (value & 0x7C00) >> 10;
  8.  const uint16 m = (value & 0x03FF);
  9.  
  10.  // ok
  11.  const float32 sgn = (s ? -1.0f : 1.0f);
  12.  if(e == 0) return sgn*(m == 0 ? 0.0f : std::pow(2.0f, -14.0f)*((float32)m/1024.0f));
  13.  if(e < 32) return sgn*std::pow(2.0f, (float32)e - 15.0f)*(1.0f + ((float32)m/1024.0f));
  14.  
  15.  // not ok!
  16.  if(m == 0) return std::numeric_limits<float32>::quiet_NaN();
  17.  return std::numeric_limits<float32>::quiet_NaN();
  18. }
  19.  
  20. sint08 LE_read_sint08(std::istream& ifile)
  21. {
  22.  sint08 temp;
  23.  ifile.read((char*)&temp, sizeof(temp));
  24.  return temp;
  25. }
  26.  
  27. uint08 LE_read_uint08(std::istream& ifile)
  28. {
  29.  uint08 temp;
  30.  ifile.read((char*)&temp, sizeof(temp));
  31.  return temp;
  32. }
  33.  
  34. sint16 LE_read_sint16(std::istream& ifile)
  35. {
  36.  sint16 temp;
  37.  ifile.read((char*)&temp, sizeof(temp));
  38.  return temp;
  39. }
  40.  
  41. uint16 LE_read_uint16(std::istream& ifile)
  42. {
  43.  uint16 temp;
  44.  ifile.read((char*)&temp, sizeof(temp));
  45.  return temp;
  46. }
  47.  
  48. sint32 LE_read_sint32(std::istream& ifile)
  49. {
  50.  sint32 temp;
  51.  ifile.read((char*)&temp, sizeof(temp));
  52.  return temp;
  53. }
  54.  
  55. uint32 LE_read_uint32(std::istream& ifile)
  56. {
  57.  uint32 temp;
  58.  ifile.read((char*)&temp, sizeof(temp));
  59.  return temp;
  60. }
  61.  
  62. sint64 LE_read_sint64(std::istream& ifile)
  63. {
  64.  sint64 temp;
  65.  ifile.read((char*)&temp, sizeof(temp));
  66.  return temp;
  67. }
  68.  
  69. uint64 LE_read_uint64(std::istream& ifile)
  70. {
  71.  uint64 temp;
  72.  ifile.read((char*)&temp, sizeof(temp));
  73.  return temp;
  74. }
  75.  
  76. sint08 LE_read_sint08(std::istream& ifile, unsigned int offset)
  77. {
  78.  ifile.seekg(offset);
  79.  sint08 temp;
  80.  ifile.read((char*)&temp, sizeof(temp));
  81.  return temp;
  82. }
  83.  
  84. uint08 LE_read_uint08(std::istream& ifile, unsigned int offset)
  85. {
  86.  ifile.seekg(offset);
  87.  uint08 temp;
  88.  ifile.read((char*)&temp, sizeof(temp));
  89.  return temp;
  90. }
  91.  
  92. sint16 LE_read_sint16(std::istream& ifile, unsigned int offset)
  93. {
  94.  ifile.seekg(offset);
  95.  sint16 temp;
  96.  ifile.read((char*)&temp, sizeof(temp));
  97.  return temp;
  98. }
  99.  
  100. uint16 LE_read_uint16(std::istream& ifile, unsigned int offset)
  101. {
  102.  ifile.seekg(offset);
  103.  uint16 temp;
  104.  ifile.read((char*)&temp, sizeof(temp));
  105.  return temp;
  106. }
  107.  
  108. sint32 LE_read_sint32(std::istream& ifile, unsigned int offset)
  109. {
  110.  ifile.seekg(offset);
  111.  sint32 temp;
  112.  ifile.read((char*)&temp, sizeof(temp));
  113.  return temp;
  114. }
  115.  
  116. uint32 LE_read_uint32(std::istream& ifile, unsigned int offset)
  117. {
  118.  ifile.seekg(offset);
  119.  uint32 temp;
  120.  ifile.read((char*)&temp, sizeof(temp));
  121.  return temp;
  122. }
  123.  
  124. sint64 LE_read_sint64(std::istream& ifile, unsigned int offset)
  125. {
  126.  ifile.seekg(offset);
  127.  sint64 temp;
  128.  ifile.read((char*)&temp, sizeof(temp));
  129.  return temp;
  130. }
  131.  
  132. uint64 LE_read_uint64(std::istream& ifile, unsigned int offset)
  133. {
  134.  ifile.seekg(offset);
  135.  uint64 temp;
  136.  ifile.read((char*)&temp, sizeof(temp));
  137.  return temp;
  138. }
  139.  
  140. sint08 BE_read_sint08(std::istream& ifile)
  141. {
  142.  sint08 temp;
  143.  ifile.read((char*)&temp, sizeof(temp));
  144.  return temp;
  145. }
  146.  
  147. uint08 BE_read_uint08(std::istream& ifile)
  148. {
  149.  uint08 temp;
  150.  ifile.read((char*)&temp, sizeof(temp));
  151.  return temp;
  152. }
  153.  
  154. sint16 BE_read_sint16(std::istream& ifile)
  155. {
  156.  sint16 temp;
  157.  ifile.read((char*)&temp, sizeof(temp));
  158.  reverse_byte_order(&temp);
  159.  return temp;
  160. }
  161.  
  162. uint16 BE_read_uint16(std::istream& ifile)
  163. {
  164.  uint16 temp;
  165.  ifile.read((char*)&temp, sizeof(temp));
  166.  reverse_byte_order(&temp);
  167.  return temp;
  168. }
  169.  
  170. sint32 BE_read_sint32(std::istream& ifile)
  171. {
  172.  sint32 temp;
  173.  ifile.read((char*)&temp, sizeof(temp));
  174.  reverse_byte_order(&temp);
  175.  return temp;
  176. }
  177.  
  178. uint32 BE_read_uint32(std::istream& ifile)
  179. {
  180.  uint32 temp;
  181.  ifile.read((char*)&temp, sizeof(temp));
  182.  reverse_byte_order(&temp);
  183.  return temp;
  184. }
  185.  
  186. sint64 BE_read_sint64(std::istream& ifile)
  187. {
  188.  sint64 temp;
  189.  ifile.read((char*)&temp, sizeof(temp));
  190.  reverse_byte_order(&temp);
  191.  return temp;
  192. }
  193.  
  194. uint64 BE_read_uint64(std::istream& ifile)
  195. {
  196.  uint64 temp;
  197.  ifile.read((char*)&temp, sizeof(temp));
  198.  reverse_byte_order(&temp);
  199.  return temp;
  200. }
  201.  
  202. sint08 BE_read_sint08(std::istream& ifile, unsigned int offset)
  203. {
  204.  ifile.seekg(offset);
  205.  sint08 temp;
  206.  ifile.read((char*)&temp, sizeof(temp));
  207.  reverse_byte_order(&temp);
  208.  return temp;
  209. }
  210.  
  211. uint08 BE_read_uint08(std::istream& ifile, unsigned int offset)
  212. {
  213.  ifile.seekg(offset);
  214.  uint08 temp;
  215.  ifile.read((char*)&temp, sizeof(temp));
  216.  reverse_byte_order(&temp);
  217.  return temp;
  218. }
  219.  
  220. sint16 BE_read_sint16(std::istream& ifile, unsigned int offset)
  221. {
  222.  ifile.seekg(offset);
  223.  sint16 temp;
  224.  ifile.read((char*)&temp, sizeof(temp));
  225.  reverse_byte_order(&temp);
  226.  return temp;
  227. }
  228.  
  229. uint16 BE_read_uint16(std::istream& ifile, unsigned int offset)
  230. {
  231.  ifile.seekg(offset);
  232.  uint16 temp;
  233.  ifile.read((char*)&temp, sizeof(temp));
  234.  reverse_byte_order(&temp);
  235.  return temp;
  236. }
  237.  
  238. sint32 BE_read_sint32(std::istream& ifile, unsigned int offset)
  239. {
  240.  ifile.seekg(offset);
  241.  sint32 temp;
  242.  ifile.read((char*)&temp, sizeof(temp));
  243.  reverse_byte_order(&temp);
  244.  return temp;
  245. }
  246.  
  247. uint32 BE_read_uint32(std::istream& ifile, unsigned int offset)
  248. {
  249.  ifile.seekg(offset);
  250.  uint32 temp;
  251.  ifile.read((char*)&temp, sizeof(temp));
  252.  reverse_byte_order(&temp);
  253.  return temp;
  254. }
  255.  
  256. sint64 BE_read_sint64(std::istream& ifile, unsigned int offset)
  257. {
  258.  ifile.seekg(offset);
  259.  sint64 temp;
  260.  ifile.read((char*)&temp, sizeof(temp));
  261.  reverse_byte_order(&temp);
  262.  return temp;
  263. }
  264.  
  265. uint64 BE_read_uint64(std::istream& ifile, unsigned int offset)
  266. {
  267.  ifile.seekg(offset);
  268.  uint64 temp;
  269.  ifile.read((char*)&temp, sizeof(temp));
  270.  reverse_byte_order(&temp);
  271.  return temp;
  272. }
  273.  
  274. float32 LE_read_float16(std::istream& ifile)
  275. {
  276.  unsigned short temp;
  277.  ifile.read((char*)&temp, sizeof(temp));
  278.  return float_16_to_32(temp);
  279. }
  280.  
  281. float32 LE_read_float32(std::istream& ifile)
  282. {
  283.  float32 temp;
  284.  ifile.read((char*)&temp, sizeof(temp));
  285.  return temp;
  286. }
  287.  
  288. float64 LE_read_float64(std::istream& ifile)
  289. {
  290.  float64 temp;
  291.  ifile.read((char*)&temp, sizeof(temp));
  292.  return temp;
  293. }
  294.  
  295. float32 LE_read_float16(std::istream& ifile, unsigned int offset)
  296. {
  297.  ifile.seekg(offset);
  298.  unsigned short temp;
  299.  ifile.read((char*)&temp, sizeof(temp));
  300.  return float_16_to_32(temp);
  301. }
  302.  
  303. float32 LE_read_float32(std::istream& ifile, unsigned int offset)
  304. {
  305.  ifile.seekg(offset);
  306.  float32 temp;
  307.  ifile.read((char*)&temp, sizeof(temp));
  308.  return temp;
  309. }
  310.  
  311. float64 LE_read_float64(std::istream& ifile, unsigned int offset)
  312. {
  313.  ifile.seekg(offset);
  314.  float64 temp;
  315.  ifile.read((char*)&temp, sizeof(temp));
  316.  return temp;
  317. }
  318.  
  319. float32 BE_read_float16(std::istream& ifile)
  320. {
  321.  unsigned short temp;
  322.  ifile.read((char*)&temp, sizeof(temp));
  323.  reverse_byte_order(&temp);
  324.  return float_16_to_32(temp);
  325. }
  326.  
  327. float32 BE_read_float32(std::istream& ifile)
  328. {
  329.  float32 temp;
  330.  ifile.read((char*)&temp, sizeof(temp));
  331.  reverse_byte_order(&temp);
  332.  return temp;
  333. }
  334.  
  335. float64 BE_read_float64(std::istream& ifile)
  336. {
  337.  float64 temp;
  338.  ifile.read((char*)&temp, sizeof(temp));
  339.  reverse_byte_order(&temp);
  340.  return temp;
  341. }
  342.  
  343. float32 BE_read_float16(std::istream& ifile, unsigned int offset)
  344. {
  345.  ifile.seekg(offset);
  346.  float32 temp;
  347.  ifile.read((char*)&temp, sizeof(temp));
  348.  reverse_byte_order(&temp);
  349.  return temp;
  350. }
  351.  
  352. float32 BE_read_float32(std::istream& ifile, unsigned int offset)
  353. {
  354.  ifile.seekg(offset);
  355.  float32 temp;
  356.  ifile.read((char*)&temp, sizeof(temp));
  357.  reverse_byte_order(&temp);
  358.  return temp;
  359. }
  360.  
  361. float64 BE_read_float64(std::istream& ifile, unsigned int offset)
  362. {
  363.  ifile.seekg(offset);
  364.  float64 temp;
  365.  ifile.read((char*)&temp, sizeof(temp));
  366.  reverse_byte_order(&temp);
  367.  return temp;
  368. }
  369.  
  370. bool read_string(std::istream& ifile, char* data, size_t size)
  371.  return read_string(ifile, data, size, (char)0);
  372. }
  373.  
  374. bool read_string(std::istream& ifile, char* data, size_t size, char delimiter)
  375. {
  376.  if(size == 0) return false;
  377.  for(size_t curr = 0; ; curr++) {
  378.      char c = (char)ifile.peek();
  379.      if(ifile.fail() || ifile.eof()) return false;
  380.      ifile.seekg(1, ios::cur);
  381.      if(ifile.fail()) return false;
  382.      if(c == delimiter) { data[curr] = '\0'; break; }
  383.      else data[curr] = c;     
  384.     }
  385.  return true;
  386. }