GNU Octave  3.8.0
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
ls-utils.cc
Go to the documentation of this file.
1 /*
2 
3 Copyright (C) 2003-2013 John W. Eaton
4 
5 This file is part of Octave.
6 
7 Octave is free software; you can redistribute it and/or modify it
8 under the terms of the GNU General Public License as published by the
9 Free Software Foundation; either version 3 of the License, or (at your
10 option) any later version.
11 
12 Octave is distributed in the hope that it will be useful, but WITHOUT
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 for more details.
16 
17 You should have received a copy of the GNU General Public License
18 along with Octave; see the file COPYING. If not, see
19 <http://www.gnu.org/licenses/>.
20 
21 */
22 
23 #ifdef HAVE_CONFIG_H
24 #include <config.h>
25 #endif
26 
27 #include "data-conv.h"
28 
29 #include "ls-utils.h"
30 
31 // MAX_VAL and MIN_VAL are assumed to have integral values even though
32 // they are stored in doubles.
33 
35 get_save_type (double /* max_val */, double /* min_val */)
36 {
37  save_type st = LS_DOUBLE;
38 
39  // Matlab doesn't seem to load the UINT32 type correctly, so let's
40  // avoid it (and the other unsigned types, even though they may not
41  // have the same problem. And apparently, there are problems with
42  // other smaller types as well. If we avoid them all, then maybe we
43  // will avoid problems. Unfortunately, we won't be able to save
44  // space...
45 
46  // if (max_val < 256 && min_val > -1)
47  // st = LS_U_CHAR;
48  // else if (max_val < 65536 && min_val > -1)
49  // st = LS_U_SHORT;
50  // else if (max_val < 4294967295UL && min_val > -1)
51  // st = LS_U_INT;
52  // else if (max_val < 128 && min_val >= -128)
53  // st = LS_CHAR;
54  // else if (max_val < 32768 && min_val >= -32768)
55  // st = LS_SHORT;
56  // else if (max_val <= 2147483647L && min_val >= -2147483647L)
57  // st = LS_INT;
58 
59  return st;
60 }
61 
63 get_save_type (float /* max_val */, float /* min_val */)
64 {
65  save_type st = LS_FLOAT;
66 
67  // Matlab doesn't seem to load the UINT32 type correctly, so let's
68  // avoid it (and the other unsigned types, even though they may not
69  // have the same problem. And apparently, there are problems with
70  // other smaller types as well. If we avoid them all, then maybe we
71  // will avoid problems. Unfortunately, we won't be able to save
72  // space...
73 
74  // if (max_val < 256 && min_val > -1)
75  // st = LS_U_CHAR;
76  // else if (max_val < 65536 && min_val > -1)
77  // st = LS_U_SHORT;
78  // else if (max_val < 4294967295UL && min_val > -1)
79  // st = LS_U_INT;
80  // else if (max_val < 128 && min_val >= -128)
81  // st = LS_CHAR;
82  // else if (max_val < 32768 && min_val >= -32768)
83  // st = LS_SHORT;
84  // else if (max_val <= 2147483647L && min_val >= -2147483647L)
85  // st = LS_INT;
86 
87  return st;
88 }