<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
</head>
<body>
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span>/*-<a name="line.1"></a>
<span class="sourceLineNo">002</span> * Copyright (c) 2016 Diamond Light Source Ltd.<a name="line.2"></a>
<span class="sourceLineNo">003</span> *<a name="line.3"></a>
<span class="sourceLineNo">004</span> * All rights reserved. This program and the accompanying materials<a name="line.4"></a>
<span class="sourceLineNo">005</span> * are made available under the terms of the Eclipse Public License v1.0<a name="line.5"></a>
<span class="sourceLineNo">006</span> * which accompanies this distribution, and is available at<a name="line.6"></a>
<span class="sourceLineNo">007</span> * http://www.eclipse.org/legal/epl-v10.html<a name="line.7"></a>
<span class="sourceLineNo">008</span> */<a name="line.8"></a>
<span class="sourceLineNo">009</span><a name="line.9"></a>
<span class="sourceLineNo">010</span>package org.eclipse.january.dataset;<a name="line.10"></a>
<span class="sourceLineNo">011</span><a name="line.11"></a>
<span class="sourceLineNo">012</span>import java.lang.reflect.Array;<a name="line.12"></a>
<span class="sourceLineNo">013</span>import java.util.Date;<a name="line.13"></a>
<span class="sourceLineNo">014</span>import java.util.HashMap;<a name="line.14"></a>
<span class="sourceLineNo">015</span>import java.util.List;<a name="line.15"></a>
<span class="sourceLineNo">016</span>import java.util.Map;<a name="line.16"></a>
<span class="sourceLineNo">017</span><a name="line.17"></a>
<span class="sourceLineNo">018</span>import org.apache.commons.math3.complex.Complex;<a name="line.18"></a>
<span class="sourceLineNo">019</span>import org.slf4j.Logger;<a name="line.19"></a>
<span class="sourceLineNo">020</span>import org.slf4j.LoggerFactory;<a name="line.20"></a>
<span class="sourceLineNo">021</span><a name="line.21"></a>
<span class="sourceLineNo">022</span>public class DTypeUtils {<a name="line.22"></a>
<span class="sourceLineNo">023</span>        protected static final Logger logger = LoggerFactory.getLogger(DTypeUtils.class);<a name="line.23"></a>
<span class="sourceLineNo">024</span><a name="line.24"></a>
<span class="sourceLineNo">025</span>        private static final Map&lt;Class&lt;? extends Dataset&gt;, Integer&gt; interface2DTypes = createInterfaceMap(); // map interface to dataset type<a name="line.25"></a>
<span class="sourceLineNo">026</span><a name="line.26"></a>
<span class="sourceLineNo">027</span>        private static Map&lt;Class&lt;? extends Dataset&gt;, Integer&gt; createInterfaceMap() {<a name="line.27"></a>
<span class="sourceLineNo">028</span>                Map&lt;Class&lt;? extends Dataset&gt;, Integer&gt; map = new HashMap&lt;Class&lt;? extends Dataset&gt;, Integer&gt;();<a name="line.28"></a>
<span class="sourceLineNo">029</span>                map.put(BooleanDataset.class, Dataset.BOOL);<a name="line.29"></a>
<span class="sourceLineNo">030</span>                map.put(ByteDataset.class, Dataset.INT8);<a name="line.30"></a>
<span class="sourceLineNo">031</span>                map.put(ShortDataset.class, Dataset.INT16);<a name="line.31"></a>
<span class="sourceLineNo">032</span>                map.put(IntegerDataset.class, Dataset.INT32);<a name="line.32"></a>
<span class="sourceLineNo">033</span>                map.put(LongDataset.class, Dataset.INT64);<a name="line.33"></a>
<span class="sourceLineNo">034</span>                map.put(FloatDataset.class, Dataset.FLOAT32);<a name="line.34"></a>
<span class="sourceLineNo">035</span>                map.put(DoubleDataset.class, Dataset.FLOAT64);<a name="line.35"></a>
<span class="sourceLineNo">036</span>                map.put(CompoundByteDataset.class, Dataset.ARRAYINT8);<a name="line.36"></a>
<span class="sourceLineNo">037</span>                map.put(CompoundShortDataset.class, Dataset.ARRAYINT16);<a name="line.37"></a>
<span class="sourceLineNo">038</span>                map.put(CompoundIntegerDataset.class, Dataset.ARRAYINT32);<a name="line.38"></a>
<span class="sourceLineNo">039</span>                map.put(CompoundLongDataset.class, Dataset.ARRAYINT64);<a name="line.39"></a>
<span class="sourceLineNo">040</span>                map.put(CompoundFloatDataset.class, Dataset.ARRAYFLOAT32);<a name="line.40"></a>
<span class="sourceLineNo">041</span>                map.put(CompoundDoubleDataset.class, Dataset.ARRAYFLOAT64);<a name="line.41"></a>
<span class="sourceLineNo">042</span>                map.put(ComplexFloatDataset.class, Dataset.COMPLEX64);<a name="line.42"></a>
<span class="sourceLineNo">043</span>                map.put(ComplexDoubleDataset.class, Dataset.COMPLEX128);<a name="line.43"></a>
<span class="sourceLineNo">044</span>                map.put(ObjectDataset.class, Dataset.OBJECT);<a name="line.44"></a>
<span class="sourceLineNo">045</span>                map.put(StringDataset.class, Dataset.STRING);<a name="line.45"></a>
<span class="sourceLineNo">046</span>                map.put(DateDataset.class, Dataset.DATE);<a name="line.46"></a>
<span class="sourceLineNo">047</span>                map.put(RGBDataset.class, Dataset.RGB);<a name="line.47"></a>
<span class="sourceLineNo">048</span>                map.put(ObjectDataset.class, Dataset.OBJECT);<a name="line.48"></a>
<span class="sourceLineNo">049</span>                return map;<a name="line.49"></a>
<span class="sourceLineNo">050</span>        }<a name="line.50"></a>
<span class="sourceLineNo">051</span><a name="line.51"></a>
<span class="sourceLineNo">052</span>        transient private static final Map&lt;Class&lt;?&gt;, Integer&gt; class2DType = createElementClassMap();<a name="line.52"></a>
<span class="sourceLineNo">053</span><a name="line.53"></a>
<span class="sourceLineNo">054</span>        private static Map&lt;Class&lt;?&gt;, Integer&gt; createElementClassMap() {<a name="line.54"></a>
<span class="sourceLineNo">055</span>                Map&lt;Class&lt;?&gt;, Integer&gt; result = new HashMap&lt;Class&lt;?&gt;, Integer&gt;();<a name="line.55"></a>
<span class="sourceLineNo">056</span>                result.put(Boolean.class, Dataset.BOOL);<a name="line.56"></a>
<span class="sourceLineNo">057</span>                result.put(Byte.class, Dataset.INT8);<a name="line.57"></a>
<span class="sourceLineNo">058</span>                result.put(Short.class, Dataset.INT16);<a name="line.58"></a>
<span class="sourceLineNo">059</span>                result.put(Integer.class, Dataset.INT32);<a name="line.59"></a>
<span class="sourceLineNo">060</span>                result.put(Long.class, Dataset.INT64);<a name="line.60"></a>
<span class="sourceLineNo">061</span>                result.put(Float.class, Dataset.FLOAT32);<a name="line.61"></a>
<span class="sourceLineNo">062</span>                result.put(Double.class, Dataset.FLOAT64);<a name="line.62"></a>
<span class="sourceLineNo">063</span>                result.put(boolean.class, Dataset.BOOL);<a name="line.63"></a>
<span class="sourceLineNo">064</span>                result.put(byte.class, Dataset.INT8);<a name="line.64"></a>
<span class="sourceLineNo">065</span>                result.put(short.class, Dataset.INT16);<a name="line.65"></a>
<span class="sourceLineNo">066</span>                result.put(int.class, Dataset.INT32);<a name="line.66"></a>
<span class="sourceLineNo">067</span>                result.put(long.class, Dataset.INT64);<a name="line.67"></a>
<span class="sourceLineNo">068</span>                result.put(float.class, Dataset.FLOAT32);<a name="line.68"></a>
<span class="sourceLineNo">069</span>                result.put(double.class, Dataset.FLOAT64);<a name="line.69"></a>
<span class="sourceLineNo">070</span>                result.put(Complex.class, Dataset.COMPLEX128);<a name="line.70"></a>
<span class="sourceLineNo">071</span>                result.put(String.class, Dataset.STRING);<a name="line.71"></a>
<span class="sourceLineNo">072</span>                result.put(Date.class, Dataset.DATE);<a name="line.72"></a>
<span class="sourceLineNo">073</span>                result.put(Object.class, Dataset.OBJECT);<a name="line.73"></a>
<span class="sourceLineNo">074</span>                return result;<a name="line.74"></a>
<span class="sourceLineNo">075</span>        }<a name="line.75"></a>
<span class="sourceLineNo">076</span><a name="line.76"></a>
<span class="sourceLineNo">077</span>        /**<a name="line.77"></a>
<span class="sourceLineNo">078</span>         * @param a<a name="line.78"></a>
<span class="sourceLineNo">079</span>         * @return name of dataset type<a name="line.79"></a>
<span class="sourceLineNo">080</span>         */<a name="line.80"></a>
<span class="sourceLineNo">081</span>        public static String getDTypeName(Dataset a) {<a name="line.81"></a>
<span class="sourceLineNo">082</span>                return getDTypeName(a.getDType(), a.getElementsPerItem());<a name="line.82"></a>
<span class="sourceLineNo">083</span>        }<a name="line.83"></a>
<span class="sourceLineNo">084</span><a name="line.84"></a>
<span class="sourceLineNo">085</span>        /**<a name="line.85"></a>
<span class="sourceLineNo">086</span>         * @param a<a name="line.86"></a>
<span class="sourceLineNo">087</span>         * @return name of dataset type<a name="line.87"></a>
<span class="sourceLineNo">088</span>         */<a name="line.88"></a>
<span class="sourceLineNo">089</span>        public static String getDTypeName(ILazyDataset a) {<a name="line.89"></a>
<span class="sourceLineNo">090</span>                return getDTypeName(getDTypeFromClass(a.getElementClass()), a.getElementsPerItem());<a name="line.90"></a>
<span class="sourceLineNo">091</span>        }<a name="line.91"></a>
<span class="sourceLineNo">092</span><a name="line.92"></a>
<span class="sourceLineNo">093</span>        /**<a name="line.93"></a>
<span class="sourceLineNo">094</span>         * @param dtype<a name="line.94"></a>
<span class="sourceLineNo">095</span>         * @param itemSize<a name="line.95"></a>
<span class="sourceLineNo">096</span>         * @return name of dataset type<a name="line.96"></a>
<span class="sourceLineNo">097</span>         */<a name="line.97"></a>
<span class="sourceLineNo">098</span>        public static String getDTypeName(int dtype, int itemSize) {<a name="line.98"></a>
<span class="sourceLineNo">099</span>                int bytes = getItemBytes(dtype, 1);<a name="line.99"></a>
<span class="sourceLineNo">100</span>                if (isDTypeComplex(dtype)) {<a name="line.100"></a>
<span class="sourceLineNo">101</span>                        return "COMPLEX" + bytes*16;<a name="line.101"></a>
<span class="sourceLineNo">102</span>                } else if (dtype == Dataset.RGB) {<a name="line.102"></a>
<span class="sourceLineNo">103</span>                        return "RGB";<a name="line.103"></a>
<span class="sourceLineNo">104</span>                }<a name="line.104"></a>
<span class="sourceLineNo">105</span><a name="line.105"></a>
<span class="sourceLineNo">106</span>                String prefix = itemSize &gt; 1 ? ("ARRAY of " + itemSize + " ") : "";<a name="line.106"></a>
<span class="sourceLineNo">107</span>                if (isDTypeFloating(dtype)) {<a name="line.107"></a>
<span class="sourceLineNo">108</span>                        return prefix + "FLOAT" + bytes*8;<a name="line.108"></a>
<span class="sourceLineNo">109</span>                }<a name="line.109"></a>
<span class="sourceLineNo">110</span>                switch (dtype) {<a name="line.110"></a>
<span class="sourceLineNo">111</span>                case Dataset.BOOL:<a name="line.111"></a>
<span class="sourceLineNo">112</span>                        return prefix + "BOOLEAN";<a name="line.112"></a>
<span class="sourceLineNo">113</span>                case Dataset.STRING:<a name="line.113"></a>
<span class="sourceLineNo">114</span>                        return prefix + "STRING";<a name="line.114"></a>
<span class="sourceLineNo">115</span>                case Dataset.DATE:<a name="line.115"></a>
<span class="sourceLineNo">116</span>                        return prefix + "DATE";<a name="line.116"></a>
<span class="sourceLineNo">117</span>                case Dataset.OBJECT:<a name="line.117"></a>
<span class="sourceLineNo">118</span>                        return prefix + "OBJECT";<a name="line.118"></a>
<span class="sourceLineNo">119</span>                }<a name="line.119"></a>
<span class="sourceLineNo">120</span><a name="line.120"></a>
<span class="sourceLineNo">121</span>                return prefix + "INT" + bytes*8;<a name="line.121"></a>
<span class="sourceLineNo">122</span>        }<a name="line.122"></a>
<span class="sourceLineNo">123</span><a name="line.123"></a>
<span class="sourceLineNo">124</span>        /**<a name="line.124"></a>
<span class="sourceLineNo">125</span>         * @param clazz dataset class<a name="line.125"></a>
<span class="sourceLineNo">126</span>         * @return dataset type for dataset class<a name="line.126"></a>
<span class="sourceLineNo">127</span>         */<a name="line.127"></a>
<span class="sourceLineNo">128</span>        public static int getDType(Class&lt;? extends Dataset&gt; clazz) {<a name="line.128"></a>
<span class="sourceLineNo">129</span>                if (!interface2DTypes.containsKey(clazz)) {<a name="line.129"></a>
<span class="sourceLineNo">130</span>                        throw new IllegalArgumentException("Interface class not allowed or supported");<a name="line.130"></a>
<span class="sourceLineNo">131</span>                }<a name="line.131"></a>
<span class="sourceLineNo">132</span>                return interface2DTypes.get(clazz);<a name="line.132"></a>
<span class="sourceLineNo">133</span>        }<a name="line.133"></a>
<span class="sourceLineNo">134</span><a name="line.134"></a>
<span class="sourceLineNo">135</span>        public static boolean isDTypeElemental(int dtype) {<a name="line.135"></a>
<span class="sourceLineNo">136</span>                return dtype &lt;= Dataset.DATE;<a name="line.136"></a>
<span class="sourceLineNo">137</span>        }<a name="line.137"></a>
<span class="sourceLineNo">138</span><a name="line.138"></a>
<span class="sourceLineNo">139</span>        public static boolean isDTypeInteger(int dtype) {<a name="line.139"></a>
<span class="sourceLineNo">140</span>                return dtype == Dataset.INT8 || dtype == Dataset.INT16 || dtype == Dataset.INT32 || dtype == Dataset.INT64 ||<a name="line.140"></a>
<span class="sourceLineNo">141</span>                                dtype == Dataset.ARRAYINT8 || dtype == Dataset.ARRAYINT16 || dtype == Dataset.ARRAYINT32 || dtype == Dataset.ARRAYINT64 || dtype == Dataset.RGB;<a name="line.141"></a>
<span class="sourceLineNo">142</span>        }<a name="line.142"></a>
<span class="sourceLineNo">143</span><a name="line.143"></a>
<span class="sourceLineNo">144</span>        public static boolean isDTypeFloating(int dtype) {<a name="line.144"></a>
<span class="sourceLineNo">145</span>                return dtype == Dataset.FLOAT32 || dtype == Dataset.FLOAT64 || dtype == Dataset.COMPLEX64 || dtype == Dataset.COMPLEX128 ||<a name="line.145"></a>
<span class="sourceLineNo">146</span>                                dtype == Dataset.ARRAYFLOAT32 || dtype == Dataset.ARRAYFLOAT64;<a name="line.146"></a>
<span class="sourceLineNo">147</span>        }<a name="line.147"></a>
<span class="sourceLineNo">148</span><a name="line.148"></a>
<span class="sourceLineNo">149</span>        public static boolean isDTypeComplex(int dtype) {<a name="line.149"></a>
<span class="sourceLineNo">150</span>                return dtype == Dataset.COMPLEX64 || dtype == Dataset.COMPLEX128;<a name="line.150"></a>
<span class="sourceLineNo">151</span>        }<a name="line.151"></a>
<span class="sourceLineNo">152</span><a name="line.152"></a>
<span class="sourceLineNo">153</span>        /**<a name="line.153"></a>
<span class="sourceLineNo">154</span>         * @param dtype<a name="line.154"></a>
<span class="sourceLineNo">155</span>         * @return true if dataset type is numerical, i.e. a dataset contains numbers<a name="line.155"></a>
<span class="sourceLineNo">156</span>         */<a name="line.156"></a>
<span class="sourceLineNo">157</span>        public static boolean isDTypeNumerical(int dtype) {<a name="line.157"></a>
<span class="sourceLineNo">158</span>                return isDTypeInteger(dtype) || isDTypeFloating(dtype) || dtype == Dataset.BOOL;<a name="line.158"></a>
<span class="sourceLineNo">159</span>        }<a name="line.159"></a>
<span class="sourceLineNo">160</span><a name="line.160"></a>
<span class="sourceLineNo">161</span>        /**<a name="line.161"></a>
<span class="sourceLineNo">162</span>         * Find dataset type that best fits given types The best type takes into account complex and array datasets<a name="line.162"></a>
<span class="sourceLineNo">163</span>         *<a name="line.163"></a>
<span class="sourceLineNo">164</span>         * @param atype<a name="line.164"></a>
<span class="sourceLineNo">165</span>         *            first dataset type<a name="line.165"></a>
<span class="sourceLineNo">166</span>         * @param btype<a name="line.166"></a>
<span class="sourceLineNo">167</span>         *            second dataset type<a name="line.167"></a>
<span class="sourceLineNo">168</span>         * @return best dataset type<a name="line.168"></a>
<span class="sourceLineNo">169</span>         */<a name="line.169"></a>
<span class="sourceLineNo">170</span>        public static int getBestDType(final int atype, final int btype) {<a name="line.170"></a>
<span class="sourceLineNo">171</span>                int besttype;<a name="line.171"></a>
<span class="sourceLineNo">172</span><a name="line.172"></a>
<span class="sourceLineNo">173</span>                int a = atype &gt;= Dataset.ARRAYINT8 ? atype / Dataset.ARRAYMUL : atype;<a name="line.173"></a>
<span class="sourceLineNo">174</span>                int b = btype &gt;= Dataset.ARRAYINT8 ? btype / Dataset.ARRAYMUL : btype;<a name="line.174"></a>
<span class="sourceLineNo">175</span><a name="line.175"></a>
<span class="sourceLineNo">176</span>                if (isDTypeFloating(a)) {<a name="line.176"></a>
<span class="sourceLineNo">177</span>                        if (!isDTypeFloating(b)) {<a name="line.177"></a>
<span class="sourceLineNo">178</span>                                b = getBestFloatDType(b);<a name="line.178"></a>
<span class="sourceLineNo">179</span>                                if (isDTypeComplex(a)) {<a name="line.179"></a>
<span class="sourceLineNo">180</span>                                        b += Dataset.COMPLEX64 - Dataset.FLOAT32;<a name="line.180"></a>
<span class="sourceLineNo">181</span>                                }<a name="line.181"></a>
<span class="sourceLineNo">182</span>                        }<a name="line.182"></a>
<span class="sourceLineNo">183</span>                } else if (isDTypeFloating(b)) {<a name="line.183"></a>
<span class="sourceLineNo">184</span>                        a = getBestFloatDType(a);<a name="line.184"></a>
<span class="sourceLineNo">185</span>                        if (isDTypeComplex(b)) {<a name="line.185"></a>
<span class="sourceLineNo">186</span>                                a += Dataset.COMPLEX64 - Dataset.FLOAT32;<a name="line.186"></a>
<span class="sourceLineNo">187</span>                        }<a name="line.187"></a>
<span class="sourceLineNo">188</span>                }<a name="line.188"></a>
<span class="sourceLineNo">189</span>                besttype = a &gt; b ? a : b;<a name="line.189"></a>
<span class="sourceLineNo">190</span><a name="line.190"></a>
<span class="sourceLineNo">191</span>                if (atype &gt;= Dataset.ARRAYINT8 || btype &gt;= Dataset.ARRAYINT8) {<a name="line.191"></a>
<span class="sourceLineNo">192</span>                        if (besttype &gt;= Dataset.COMPLEX64) {<a name="line.192"></a>
<span class="sourceLineNo">193</span>                                throw new IllegalArgumentException("Complex type cannot be promoted to compound type");<a name="line.193"></a>
<span class="sourceLineNo">194</span>                        }<a name="line.194"></a>
<span class="sourceLineNo">195</span>                        besttype *= Dataset.ARRAYMUL;<a name="line.195"></a>
<span class="sourceLineNo">196</span>                }<a name="line.196"></a>
<span class="sourceLineNo">197</span><a name="line.197"></a>
<span class="sourceLineNo">198</span>                return besttype;<a name="line.198"></a>
<span class="sourceLineNo">199</span>        }<a name="line.199"></a>
<span class="sourceLineNo">200</span><a name="line.200"></a>
<span class="sourceLineNo">201</span>        /**<a name="line.201"></a>
<span class="sourceLineNo">202</span>         * Find floating point dataset type that best fits given types. The best type takes into account complex and array<a name="line.202"></a>
<span class="sourceLineNo">203</span>         * datasets<a name="line.203"></a>
<span class="sourceLineNo">204</span>         *<a name="line.204"></a>
<span class="sourceLineNo">205</span>         * @param otype<a name="line.205"></a>
<span class="sourceLineNo">206</span>         *            old dataset type<a name="line.206"></a>
<span class="sourceLineNo">207</span>         * @return best dataset type<a name="line.207"></a>
<span class="sourceLineNo">208</span>         */<a name="line.208"></a>
<span class="sourceLineNo">209</span>        public static int getBestFloatDType(final int otype) {<a name="line.209"></a>
<span class="sourceLineNo">210</span>                int btype;<a name="line.210"></a>
<span class="sourceLineNo">211</span>                switch (otype) {<a name="line.211"></a>
<span class="sourceLineNo">212</span>                case Dataset.BOOL:<a name="line.212"></a>
<span class="sourceLineNo">213</span>                case Dataset.INT8:<a name="line.213"></a>
<span class="sourceLineNo">214</span>                case Dataset.INT16:<a name="line.214"></a>
<span class="sourceLineNo">215</span>                case Dataset.ARRAYINT8:<a name="line.215"></a>
<span class="sourceLineNo">216</span>                case Dataset.ARRAYINT16:<a name="line.216"></a>
<span class="sourceLineNo">217</span>                case Dataset.FLOAT32:<a name="line.217"></a>
<span class="sourceLineNo">218</span>                case Dataset.ARRAYFLOAT32:<a name="line.218"></a>
<span class="sourceLineNo">219</span>                case Dataset.COMPLEX64:<a name="line.219"></a>
<span class="sourceLineNo">220</span>                case Dataset.RGB:<a name="line.220"></a>
<span class="sourceLineNo">221</span>                        btype = Dataset.FLOAT32; // demote, if necessary<a name="line.221"></a>
<span class="sourceLineNo">222</span>                        break;<a name="line.222"></a>
<span class="sourceLineNo">223</span>                case Dataset.INT32:<a name="line.223"></a>
<span class="sourceLineNo">224</span>                case Dataset.INT64:<a name="line.224"></a>
<span class="sourceLineNo">225</span>                case Dataset.ARRAYINT32:<a name="line.225"></a>
<span class="sourceLineNo">226</span>                case Dataset.ARRAYINT64:<a name="line.226"></a>
<span class="sourceLineNo">227</span>                case Dataset.FLOAT64:<a name="line.227"></a>
<span class="sourceLineNo">228</span>                case Dataset.ARRAYFLOAT64:<a name="line.228"></a>
<span class="sourceLineNo">229</span>                case Dataset.COMPLEX128:<a name="line.229"></a>
<span class="sourceLineNo">230</span>                        btype = Dataset.FLOAT64; // promote, if necessary<a name="line.230"></a>
<span class="sourceLineNo">231</span>                        break;<a name="line.231"></a>
<span class="sourceLineNo">232</span>                default:<a name="line.232"></a>
<span class="sourceLineNo">233</span>                        btype = otype; // for non-numeric datasets, preserve type<a name="line.233"></a>
<span class="sourceLineNo">234</span>                        break;<a name="line.234"></a>
<span class="sourceLineNo">235</span>                }<a name="line.235"></a>
<span class="sourceLineNo">236</span><a name="line.236"></a>
<span class="sourceLineNo">237</span>                return btype;<a name="line.237"></a>
<span class="sourceLineNo">238</span>        }<a name="line.238"></a>
<span class="sourceLineNo">239</span><a name="line.239"></a>
<span class="sourceLineNo">240</span>        /**<a name="line.240"></a>
<span class="sourceLineNo">241</span>         * Find floating point dataset type that best fits given class The best type takes into account complex and array<a name="line.241"></a>
<span class="sourceLineNo">242</span>         * datasets<a name="line.242"></a>
<span class="sourceLineNo">243</span>         *<a name="line.243"></a>
<span class="sourceLineNo">244</span>         * @param cls<a name="line.244"></a>
<span class="sourceLineNo">245</span>         *            of an item or element<a name="line.245"></a>
<span class="sourceLineNo">246</span>         * @return best dataset type<a name="line.246"></a>
<span class="sourceLineNo">247</span>         */<a name="line.247"></a>
<span class="sourceLineNo">248</span>        public static int getBestFloatDType(Class&lt;? extends Object&gt; cls) {<a name="line.248"></a>
<span class="sourceLineNo">249</span>                return getBestFloatDType(getDTypeFromClass(cls));<a name="line.249"></a>
<span class="sourceLineNo">250</span>        }<a name="line.250"></a>
<span class="sourceLineNo">251</span><a name="line.251"></a>
<span class="sourceLineNo">252</span>        /**<a name="line.252"></a>
<span class="sourceLineNo">253</span>         * Get dataset type from an element class<a name="line.253"></a>
<span class="sourceLineNo">254</span>         *<a name="line.254"></a>
<span class="sourceLineNo">255</span>         * @param cls element class<a name="line.255"></a>
<span class="sourceLineNo">256</span>         * @return dataset type<a name="line.256"></a>
<span class="sourceLineNo">257</span>         */<a name="line.257"></a>
<span class="sourceLineNo">258</span>        public static int getDTypeFromClass(Class&lt;? extends Object&gt; cls) {<a name="line.258"></a>
<span class="sourceLineNo">259</span>                return getDTypeFromClass(cls, 1);<a name="line.259"></a>
<span class="sourceLineNo">260</span>        }<a name="line.260"></a>
<span class="sourceLineNo">261</span><a name="line.261"></a>
<span class="sourceLineNo">262</span>        /**<a name="line.262"></a>
<span class="sourceLineNo">263</span>         * Get dataset type from an element class<a name="line.263"></a>
<span class="sourceLineNo">264</span>         *<a name="line.264"></a>
<span class="sourceLineNo">265</span>         * @param cls element class<a name="line.265"></a>
<span class="sourceLineNo">266</span>         * @return dataset type<a name="line.266"></a>
<span class="sourceLineNo">267</span>         */<a name="line.267"></a>
<span class="sourceLineNo">268</span>        public static int getDTypeFromClass(Class&lt;? extends Object&gt; cls, int isize) {<a name="line.268"></a>
<span class="sourceLineNo">269</span>                Integer dtype = class2DType.get(cls);<a name="line.269"></a>
<span class="sourceLineNo">270</span>                if (dtype == null) {<a name="line.270"></a>
<span class="sourceLineNo">271</span>                        throw new IllegalArgumentException("Class of object not supported");<a name="line.271"></a>
<span class="sourceLineNo">272</span>                }<a name="line.272"></a>
<span class="sourceLineNo">273</span>                if (isize != 1) {<a name="line.273"></a>
<span class="sourceLineNo">274</span>                        if (dtype &lt; Dataset.FLOAT64)<a name="line.274"></a>
<span class="sourceLineNo">275</span>                                dtype *= Dataset.ARRAYMUL;<a name="line.275"></a>
<span class="sourceLineNo">276</span>                }<a name="line.276"></a>
<span class="sourceLineNo">277</span>                return dtype;<a name="line.277"></a>
<span class="sourceLineNo">278</span>        }<a name="line.278"></a>
<span class="sourceLineNo">279</span><a name="line.279"></a>
<span class="sourceLineNo">280</span>        /**<a name="line.280"></a>
<span class="sourceLineNo">281</span>         * Get dataset type from an object. The following are supported: Java Number objects, Apache common math Complex<a name="line.281"></a>
<span class="sourceLineNo">282</span>         * objects, Java arrays and lists<a name="line.282"></a>
<span class="sourceLineNo">283</span>         *<a name="line.283"></a>
<span class="sourceLineNo">284</span>         * @param obj<a name="line.284"></a>
<span class="sourceLineNo">285</span>         * @return dataset type<a name="line.285"></a>
<span class="sourceLineNo">286</span>         */<a name="line.286"></a>
<span class="sourceLineNo">287</span>        public static int getDTypeFromObject(Object obj) {<a name="line.287"></a>
<span class="sourceLineNo">288</span>                int dtype = -1;<a name="line.288"></a>
<span class="sourceLineNo">289</span><a name="line.289"></a>
<span class="sourceLineNo">290</span>                if (obj == null) {<a name="line.290"></a>
<span class="sourceLineNo">291</span>                        return dtype;<a name="line.291"></a>
<span class="sourceLineNo">292</span>                }<a name="line.292"></a>
<span class="sourceLineNo">293</span><a name="line.293"></a>
<span class="sourceLineNo">294</span>                if (obj instanceof List&lt;?&gt;) {<a name="line.294"></a>
<span class="sourceLineNo">295</span>                        List&lt;?&gt; jl = (List&lt;?&gt;) obj;<a name="line.295"></a>
<span class="sourceLineNo">296</span>                        int l = jl.size();<a name="line.296"></a>
<span class="sourceLineNo">297</span>                        for (int i = 0; i &lt; l; i++) {<a name="line.297"></a>
<span class="sourceLineNo">298</span>                                int ldtype = getDTypeFromObject(jl.get(i));<a name="line.298"></a>
<span class="sourceLineNo">299</span>                                if (ldtype &gt; dtype) {<a name="line.299"></a>
<span class="sourceLineNo">300</span>                                        dtype = ldtype;<a name="line.300"></a>
<span class="sourceLineNo">301</span>                                }<a name="line.301"></a>
<span class="sourceLineNo">302</span>                        }<a name="line.302"></a>
<span class="sourceLineNo">303</span>                } else if (obj.getClass().isArray()) {<a name="line.303"></a>
<span class="sourceLineNo">304</span>                        Class&lt;?&gt; ca = obj.getClass().getComponentType();<a name="line.304"></a>
<span class="sourceLineNo">305</span>                        if (isClassSupportedAsElement(ca)) {<a name="line.305"></a>
<span class="sourceLineNo">306</span>                                return getDTypeFromClass(ca);<a name="line.306"></a>
<span class="sourceLineNo">307</span>                        }<a name="line.307"></a>
<span class="sourceLineNo">308</span>                        int l = Array.getLength(obj);<a name="line.308"></a>
<span class="sourceLineNo">309</span>                        for (int i = 0; i &lt; l; i++) {<a name="line.309"></a>
<span class="sourceLineNo">310</span>                                Object lo = Array.get(obj, i);<a name="line.310"></a>
<span class="sourceLineNo">311</span>                                int ldtype = getDTypeFromObject(lo);<a name="line.311"></a>
<span class="sourceLineNo">312</span>                                if (ldtype &gt; dtype) {<a name="line.312"></a>
<span class="sourceLineNo">313</span>                                        dtype = ldtype;<a name="line.313"></a>
<span class="sourceLineNo">314</span>                                }<a name="line.314"></a>
<span class="sourceLineNo">315</span>                        }<a name="line.315"></a>
<span class="sourceLineNo">316</span>                } else if (obj instanceof Dataset) {<a name="line.316"></a>
<span class="sourceLineNo">317</span>                        return ((Dataset) obj).getDType();<a name="line.317"></a>
<span class="sourceLineNo">318</span>                } else if (obj instanceof ILazyDataset) {<a name="line.318"></a>
<span class="sourceLineNo">319</span>                        dtype = getDTypeFromClass(((ILazyDataset) obj).getElementClass(), ((ILazyDataset) obj).getElementsPerItem());<a name="line.319"></a>
<span class="sourceLineNo">320</span>                } else {<a name="line.320"></a>
<span class="sourceLineNo">321</span>                        dtype = getDTypeFromClass(obj.getClass());<a name="line.321"></a>
<span class="sourceLineNo">322</span>                }<a name="line.322"></a>
<span class="sourceLineNo">323</span>                return dtype;<a name="line.323"></a>
<span class="sourceLineNo">324</span>        }<a name="line.324"></a>
<span class="sourceLineNo">325</span><a name="line.325"></a>
<span class="sourceLineNo">326</span>        /**<a name="line.326"></a>
<span class="sourceLineNo">327</span>         * Get dataset type from given dataset<a name="line.327"></a>
<span class="sourceLineNo">328</span>         * @param d<a name="line.328"></a>
<span class="sourceLineNo">329</span>         * @return dataset type<a name="line.329"></a>
<span class="sourceLineNo">330</span>         */<a name="line.330"></a>
<span class="sourceLineNo">331</span>        public static int getDType(ILazyDataset d) {<a name="line.331"></a>
<span class="sourceLineNo">332</span>                if (d instanceof LazyDatasetBase)<a name="line.332"></a>
<span class="sourceLineNo">333</span>                        return ((LazyDatasetBase) d).getDType();<a name="line.333"></a>
<span class="sourceLineNo">334</span>                return getDTypeFromClass(d.getElementClass(), d.getElementsPerItem());<a name="line.334"></a>
<span class="sourceLineNo">335</span>        }<a name="line.335"></a>
<span class="sourceLineNo">336</span><a name="line.336"></a>
<span class="sourceLineNo">337</span>        /**<a name="line.337"></a>
<span class="sourceLineNo">338</span>         * The largest dataset type suitable for a summation of around a few thousand items without changing from the "kind"<a name="line.338"></a>
<span class="sourceLineNo">339</span>         * of dataset<a name="line.339"></a>
<span class="sourceLineNo">340</span>         *<a name="line.340"></a>
<span class="sourceLineNo">341</span>         * @param otype<a name="line.341"></a>
<span class="sourceLineNo">342</span>         * @return largest dataset type available for given dataset type<a name="line.342"></a>
<span class="sourceLineNo">343</span>         */<a name="line.343"></a>
<span class="sourceLineNo">344</span>        public static int getLargestDType(final int otype) {<a name="line.344"></a>
<span class="sourceLineNo">345</span>                switch (otype) {<a name="line.345"></a>
<span class="sourceLineNo">346</span>                case Dataset.BOOL:<a name="line.346"></a>
<span class="sourceLineNo">347</span>                case Dataset.INT8:<a name="line.347"></a>
<span class="sourceLineNo">348</span>                case Dataset.INT16:<a name="line.348"></a>
<span class="sourceLineNo">349</span>                        return Dataset.INT32;<a name="line.349"></a>
<span class="sourceLineNo">350</span>                case Dataset.INT32:<a name="line.350"></a>
<span class="sourceLineNo">351</span>                case Dataset.INT64:<a name="line.351"></a>
<span class="sourceLineNo">352</span>                        return Dataset.INT64;<a name="line.352"></a>
<span class="sourceLineNo">353</span>                case Dataset.FLOAT32:<a name="line.353"></a>
<span class="sourceLineNo">354</span>                case Dataset.FLOAT64:<a name="line.354"></a>
<span class="sourceLineNo">355</span>                        return Dataset.FLOAT64;<a name="line.355"></a>
<span class="sourceLineNo">356</span>                case Dataset.COMPLEX64:<a name="line.356"></a>
<span class="sourceLineNo">357</span>                case Dataset.COMPLEX128:<a name="line.357"></a>
<span class="sourceLineNo">358</span>                        return Dataset.COMPLEX128;<a name="line.358"></a>
<span class="sourceLineNo">359</span>                case Dataset.ARRAYINT8:<a name="line.359"></a>
<span class="sourceLineNo">360</span>                case Dataset.ARRAYINT16:<a name="line.360"></a>
<span class="sourceLineNo">361</span>                        return Dataset.ARRAYINT32;<a name="line.361"></a>
<span class="sourceLineNo">362</span>                case Dataset.ARRAYINT32:<a name="line.362"></a>
<span class="sourceLineNo">363</span>                case Dataset.ARRAYINT64:<a name="line.363"></a>
<span class="sourceLineNo">364</span>                        return Dataset.ARRAYINT64;<a name="line.364"></a>
<span class="sourceLineNo">365</span>                case Dataset.ARRAYFLOAT32:<a name="line.365"></a>
<span class="sourceLineNo">366</span>                case Dataset.ARRAYFLOAT64:<a name="line.366"></a>
<span class="sourceLineNo">367</span>                        return Dataset.ARRAYFLOAT64;<a name="line.367"></a>
<span class="sourceLineNo">368</span>                case Dataset.DATE:<a name="line.368"></a>
<span class="sourceLineNo">369</span>                case Dataset.STRING:<a name="line.369"></a>
<span class="sourceLineNo">370</span>                case Dataset.RGB:<a name="line.370"></a>
<span class="sourceLineNo">371</span>                case Dataset.OBJECT:<a name="line.371"></a>
<span class="sourceLineNo">372</span>                        return otype;<a name="line.372"></a>
<span class="sourceLineNo">373</span>                }<a name="line.373"></a>
<span class="sourceLineNo">374</span>                throw new IllegalArgumentException("Unsupported dataset type");<a name="line.374"></a>
<span class="sourceLineNo">375</span>        }<a name="line.375"></a>
<span class="sourceLineNo">376</span><a name="line.376"></a>
<span class="sourceLineNo">377</span>        /**<a name="line.377"></a>
<span class="sourceLineNo">378</span>         * @param otype<a name="line.378"></a>
<span class="sourceLineNo">379</span>         * @return elemental dataset type available for given dataset type<a name="line.379"></a>
<span class="sourceLineNo">380</span>         */<a name="line.380"></a>
<span class="sourceLineNo">381</span>        public static int getElementalDType(final int otype) {<a name="line.381"></a>
<span class="sourceLineNo">382</span>                switch (otype) {<a name="line.382"></a>
<span class="sourceLineNo">383</span>                case Dataset.COMPLEX64:<a name="line.383"></a>
<span class="sourceLineNo">384</span>                        return Dataset.FLOAT32;<a name="line.384"></a>
<span class="sourceLineNo">385</span>                case Dataset.COMPLEX128:<a name="line.385"></a>
<span class="sourceLineNo">386</span>                        return Dataset.FLOAT64;<a name="line.386"></a>
<span class="sourceLineNo">387</span>                case Dataset.ARRAYINT8:<a name="line.387"></a>
<span class="sourceLineNo">388</span>                        return Dataset.INT8;<a name="line.388"></a>
<span class="sourceLineNo">389</span>                case Dataset.ARRAYINT16:<a name="line.389"></a>
<span class="sourceLineNo">390</span>                case Dataset.RGB:<a name="line.390"></a>
<span class="sourceLineNo">391</span>                        return Dataset.INT16;<a name="line.391"></a>
<span class="sourceLineNo">392</span>                case Dataset.ARRAYINT32:<a name="line.392"></a>
<span class="sourceLineNo">393</span>                        return Dataset.INT32;<a name="line.393"></a>
<span class="sourceLineNo">394</span>                case Dataset.ARRAYINT64:<a name="line.394"></a>
<span class="sourceLineNo">395</span>                        return Dataset.INT64;<a name="line.395"></a>
<span class="sourceLineNo">396</span>                case Dataset.ARRAYFLOAT32:<a name="line.396"></a>
<span class="sourceLineNo">397</span>                        return Dataset.FLOAT32;<a name="line.397"></a>
<span class="sourceLineNo">398</span>                case Dataset.ARRAYFLOAT64:<a name="line.398"></a>
<span class="sourceLineNo">399</span>                        return Dataset.FLOAT64;<a name="line.399"></a>
<span class="sourceLineNo">400</span>                default:<a name="line.400"></a>
<span class="sourceLineNo">401</span>                        return otype;<a name="line.401"></a>
<span class="sourceLineNo">402</span>                }<a name="line.402"></a>
<span class="sourceLineNo">403</span>        }<a name="line.403"></a>
<span class="sourceLineNo">404</span><a name="line.404"></a>
<span class="sourceLineNo">405</span>        /**<a name="line.405"></a>
<span class="sourceLineNo">406</span>         * @param comp<a name="line.406"></a>
<span class="sourceLineNo">407</span>         * @return true if supported<a name="line.407"></a>
<span class="sourceLineNo">408</span>         */<a name="line.408"></a>
<span class="sourceLineNo">409</span>        public static boolean isClassSupportedAsElement(Class&lt;? extends Object&gt; comp) {<a name="line.409"></a>
<span class="sourceLineNo">410</span>                return comp.isPrimitive() || Number.class.isAssignableFrom(comp) || comp.equals(Boolean.class)<a name="line.410"></a>
<span class="sourceLineNo">411</span>                                || comp.equals(Complex.class) || comp.equals(String.class) || comp.equals(Date.class);<a name="line.411"></a>
<span class="sourceLineNo">412</span>        }<a name="line.412"></a>
<span class="sourceLineNo">413</span><a name="line.413"></a>
<span class="sourceLineNo">414</span>        /**<a name="line.414"></a>
<span class="sourceLineNo">415</span>         * @param dtype<a name="line.415"></a>
<span class="sourceLineNo">416</span>         * @return number of elements per item<a name="line.416"></a>
<span class="sourceLineNo">417</span>         */<a name="line.417"></a>
<span class="sourceLineNo">418</span>        public static int getElementsPerItem(final int dtype) {<a name="line.418"></a>
<span class="sourceLineNo">419</span>                switch (dtype) {<a name="line.419"></a>
<span class="sourceLineNo">420</span>                case Dataset.ARRAYINT8:<a name="line.420"></a>
<span class="sourceLineNo">421</span>                case Dataset.ARRAYINT16:<a name="line.421"></a>
<span class="sourceLineNo">422</span>                case Dataset.ARRAYINT32:<a name="line.422"></a>
<span class="sourceLineNo">423</span>                case Dataset.ARRAYINT64:<a name="line.423"></a>
<span class="sourceLineNo">424</span>                case Dataset.ARRAYFLOAT32:<a name="line.424"></a>
<span class="sourceLineNo">425</span>                case Dataset.ARRAYFLOAT64:<a name="line.425"></a>
<span class="sourceLineNo">426</span>                        throw new UnsupportedOperationException("Multi-element type unsupported");<a name="line.426"></a>
<span class="sourceLineNo">427</span>                case Dataset.COMPLEX64:<a name="line.427"></a>
<span class="sourceLineNo">428</span>                case Dataset.COMPLEX128:<a name="line.428"></a>
<span class="sourceLineNo">429</span>                        return 2;<a name="line.429"></a>
<span class="sourceLineNo">430</span>                case Dataset.RGB:<a name="line.430"></a>
<span class="sourceLineNo">431</span>                        return 3;<a name="line.431"></a>
<span class="sourceLineNo">432</span>                }<a name="line.432"></a>
<span class="sourceLineNo">433</span>                return 1;<a name="line.433"></a>
<span class="sourceLineNo">434</span>        }<a name="line.434"></a>
<span class="sourceLineNo">435</span><a name="line.435"></a>
<span class="sourceLineNo">436</span>        /**<a name="line.436"></a>
<span class="sourceLineNo">437</span>         * @param dtype<a name="line.437"></a>
<span class="sourceLineNo">438</span>         * @return length of single item in bytes<a name="line.438"></a>
<span class="sourceLineNo">439</span>         */<a name="line.439"></a>
<span class="sourceLineNo">440</span>        public static int getItemBytes(final int dtype) {<a name="line.440"></a>
<span class="sourceLineNo">441</span>                return getItemBytes(dtype, getElementsPerItem(dtype));<a name="line.441"></a>
<span class="sourceLineNo">442</span>        }<a name="line.442"></a>
<span class="sourceLineNo">443</span><a name="line.443"></a>
<span class="sourceLineNo">444</span>        /**<a name="line.444"></a>
<span class="sourceLineNo">445</span>         * @param dtype<a name="line.445"></a>
<span class="sourceLineNo">446</span>         * @param isize<a name="line.446"></a>
<span class="sourceLineNo">447</span>         *            number of elements in an item<a name="line.447"></a>
<span class="sourceLineNo">448</span>         * @return length of single item in bytes<a name="line.448"></a>
<span class="sourceLineNo">449</span>         */<a name="line.449"></a>
<span class="sourceLineNo">450</span>        public static int getItemBytes(final int dtype, final int isize) {<a name="line.450"></a>
<span class="sourceLineNo">451</span>                int size;<a name="line.451"></a>
<span class="sourceLineNo">452</span><a name="line.452"></a>
<span class="sourceLineNo">453</span>                switch (dtype) {<a name="line.453"></a>
<span class="sourceLineNo">454</span>                case Dataset.BOOL:<a name="line.454"></a>
<span class="sourceLineNo">455</span>                        size = 1; // How is this defined?<a name="line.455"></a>
<span class="sourceLineNo">456</span>                        break;<a name="line.456"></a>
<span class="sourceLineNo">457</span>                case Dataset.INT8:<a name="line.457"></a>
<span class="sourceLineNo">458</span>                case Dataset.ARRAYINT8:<a name="line.458"></a>
<span class="sourceLineNo">459</span>                        size = Byte.SIZE / 8;<a name="line.459"></a>
<span class="sourceLineNo">460</span>                        break;<a name="line.460"></a>
<span class="sourceLineNo">461</span>                case Dataset.INT16:<a name="line.461"></a>
<span class="sourceLineNo">462</span>                case Dataset.ARRAYINT16:<a name="line.462"></a>
<span class="sourceLineNo">463</span>                case Dataset.RGB:<a name="line.463"></a>
<span class="sourceLineNo">464</span>                        size = Short.SIZE / 8;<a name="line.464"></a>
<span class="sourceLineNo">465</span>                        break;<a name="line.465"></a>
<span class="sourceLineNo">466</span>                case Dataset.INT32:<a name="line.466"></a>
<span class="sourceLineNo">467</span>                case Dataset.ARRAYINT32:<a name="line.467"></a>
<span class="sourceLineNo">468</span>                        size = Integer.SIZE / 8;<a name="line.468"></a>
<span class="sourceLineNo">469</span>                        break;<a name="line.469"></a>
<span class="sourceLineNo">470</span>                case Dataset.INT64:<a name="line.470"></a>
<span class="sourceLineNo">471</span>                case Dataset.ARRAYINT64:<a name="line.471"></a>
<span class="sourceLineNo">472</span>                        size = Long.SIZE / 8;<a name="line.472"></a>
<span class="sourceLineNo">473</span>                        break;<a name="line.473"></a>
<span class="sourceLineNo">474</span>                case Dataset.FLOAT32:<a name="line.474"></a>
<span class="sourceLineNo">475</span>                case Dataset.ARRAYFLOAT32:<a name="line.475"></a>
<span class="sourceLineNo">476</span>                case Dataset.COMPLEX64:<a name="line.476"></a>
<span class="sourceLineNo">477</span>                        size = Float.SIZE / 8;<a name="line.477"></a>
<span class="sourceLineNo">478</span>                        break;<a name="line.478"></a>
<span class="sourceLineNo">479</span>                case Dataset.FLOAT64:<a name="line.479"></a>
<span class="sourceLineNo">480</span>                case Dataset.ARRAYFLOAT64:<a name="line.480"></a>
<span class="sourceLineNo">481</span>                case Dataset.COMPLEX128:<a name="line.481"></a>
<span class="sourceLineNo">482</span>                        size = Double.SIZE / 8;<a name="line.482"></a>
<span class="sourceLineNo">483</span>                        break;<a name="line.483"></a>
<span class="sourceLineNo">484</span>                default:<a name="line.484"></a>
<span class="sourceLineNo">485</span>                        size = 0;<a name="line.485"></a>
<span class="sourceLineNo">486</span>                        break;<a name="line.486"></a>
<span class="sourceLineNo">487</span>                }<a name="line.487"></a>
<span class="sourceLineNo">488</span><a name="line.488"></a>
<span class="sourceLineNo">489</span>                return size * isize;<a name="line.489"></a>
<span class="sourceLineNo">490</span>        }<a name="line.490"></a>
<span class="sourceLineNo">491</span><a name="line.491"></a>
<span class="sourceLineNo">492</span>        public static boolean toBoolean(final Object b) {<a name="line.492"></a>
<span class="sourceLineNo">493</span>                if (b instanceof Number) {<a name="line.493"></a>
<span class="sourceLineNo">494</span>                        return ((Number) b).longValue() != 0;<a name="line.494"></a>
<span class="sourceLineNo">495</span>                } else if (b instanceof Boolean) {<a name="line.495"></a>
<span class="sourceLineNo">496</span>                        return ((Boolean) b).booleanValue();<a name="line.496"></a>
<span class="sourceLineNo">497</span>                } else if (b instanceof Complex) {<a name="line.497"></a>
<span class="sourceLineNo">498</span>                        return ((Complex) b).getReal() != 0;<a name="line.498"></a>
<span class="sourceLineNo">499</span>                } else if (b instanceof Dataset) {<a name="line.499"></a>
<span class="sourceLineNo">500</span>                        Dataset db = (Dataset) b;<a name="line.500"></a>
<span class="sourceLineNo">501</span>                        if (db.getSize() != 1) {<a name="line.501"></a>
<span class="sourceLineNo">502</span>                                logger.error("Given dataset must have only one item");<a name="line.502"></a>
<span class="sourceLineNo">503</span>                                throw new IllegalArgumentException("Given dataset must have only one item");<a name="line.503"></a>
<span class="sourceLineNo">504</span>                        }<a name="line.504"></a>
<span class="sourceLineNo">505</span>                        return db.getBoolean();<a name="line.505"></a>
<span class="sourceLineNo">506</span>                } else if (b instanceof IDataset) {<a name="line.506"></a>
<span class="sourceLineNo">507</span>                        IDataset db = (IDataset) b;<a name="line.507"></a>
<span class="sourceLineNo">508</span>                        if (db.getSize() != 1) {<a name="line.508"></a>
<span class="sourceLineNo">509</span>                                logger.error("Given dataset must have only one item");<a name="line.509"></a>
<span class="sourceLineNo">510</span>                                throw new IllegalArgumentException("Given dataset must have only one item");<a name="line.510"></a>
<span class="sourceLineNo">511</span>                        }<a name="line.511"></a>
<span class="sourceLineNo">512</span>                        return db.getBoolean(new int[db.getRank()]);<a name="line.512"></a>
<span class="sourceLineNo">513</span>                } else {<a name="line.513"></a>
<span class="sourceLineNo">514</span>                        logger.error("Argument is of unsupported class");<a name="line.514"></a>
<span class="sourceLineNo">515</span>                        throw new IllegalArgumentException("Argument is of unsupported class");<a name="line.515"></a>
<span class="sourceLineNo">516</span>                }<a name="line.516"></a>
<span class="sourceLineNo">517</span>        }<a name="line.517"></a>
<span class="sourceLineNo">518</span><a name="line.518"></a>
<span class="sourceLineNo">519</span>        /**<a name="line.519"></a>
<span class="sourceLineNo">520</span>         * @param d<a name="line.520"></a>
<span class="sourceLineNo">521</span>         * @return returns a long or 0 if d is NaN or infinite<a name="line.521"></a>
<span class="sourceLineNo">522</span>         * @since 2.1<a name="line.522"></a>
<span class="sourceLineNo">523</span>         */<a name="line.523"></a>
<span class="sourceLineNo">524</span>        public static final long toLong(double d) {<a name="line.524"></a>
<span class="sourceLineNo">525</span>                if (Double.isInfinite(d) || Double.isNaN(d))<a name="line.525"></a>
<span class="sourceLineNo">526</span>                        return 0l;<a name="line.526"></a>
<span class="sourceLineNo">527</span>                return (long) d;<a name="line.527"></a>
<span class="sourceLineNo">528</span>        }<a name="line.528"></a>
<span class="sourceLineNo">529</span><a name="line.529"></a>
<span class="sourceLineNo">530</span>        /**<a name="line.530"></a>
<span class="sourceLineNo">531</span>         * @param d<a name="line.531"></a>
<span class="sourceLineNo">532</span>         * @return returns a long or 0 if d is NaN or infinite<a name="line.532"></a>
<span class="sourceLineNo">533</span>         * @since 2.1<a name="line.533"></a>
<span class="sourceLineNo">534</span>         */<a name="line.534"></a>
<span class="sourceLineNo">535</span>        public static final long toLong(float d) {<a name="line.535"></a>
<span class="sourceLineNo">536</span>                if (Float.isInfinite(d) || Float.isNaN(d))<a name="line.536"></a>
<span class="sourceLineNo">537</span>                        return 0l;<a name="line.537"></a>
<span class="sourceLineNo">538</span>                return (long) d;<a name="line.538"></a>
<span class="sourceLineNo">539</span>        }<a name="line.539"></a>
<span class="sourceLineNo">540</span><a name="line.540"></a>
<span class="sourceLineNo">541</span>        public static long toLong(final Object b) {<a name="line.541"></a>
<span class="sourceLineNo">542</span>                if (b instanceof Number) {<a name="line.542"></a>
<span class="sourceLineNo">543</span>                        final Number n = (Number) b;<a name="line.543"></a>
<span class="sourceLineNo">544</span>                        return (n instanceof Double || n instanceof Float) ? toLong(n.doubleValue()) : n.longValue();<a name="line.544"></a>
<span class="sourceLineNo">545</span>                } else if (b instanceof Boolean) {<a name="line.545"></a>
<span class="sourceLineNo">546</span>                        return ((Boolean) b).booleanValue() ? 1 : 0;<a name="line.546"></a>
<span class="sourceLineNo">547</span>                } else if (b instanceof Complex) {<a name="line.547"></a>
<span class="sourceLineNo">548</span>                        return (long) ((Complex) b).getReal();<a name="line.548"></a>
<span class="sourceLineNo">549</span>                } else if (b instanceof Dataset) {<a name="line.549"></a>
<span class="sourceLineNo">550</span>                        Dataset db = (Dataset) b;<a name="line.550"></a>
<span class="sourceLineNo">551</span>                        if (db.getSize() != 1) {<a name="line.551"></a>
<span class="sourceLineNo">552</span>                                logger.error("Given dataset must have only one item");<a name="line.552"></a>
<span class="sourceLineNo">553</span>                                throw new IllegalArgumentException("Given dataset must have only one item");<a name="line.553"></a>
<span class="sourceLineNo">554</span>                        }<a name="line.554"></a>
<span class="sourceLineNo">555</span>                        return db.getLong();<a name="line.555"></a>
<span class="sourceLineNo">556</span>                } else if (b instanceof IDataset) {<a name="line.556"></a>
<span class="sourceLineNo">557</span>                        IDataset db = (IDataset) b;<a name="line.557"></a>
<span class="sourceLineNo">558</span>                        if (db.getSize() != 1) {<a name="line.558"></a>
<span class="sourceLineNo">559</span>                                logger.error("Given dataset must have only one item");<a name="line.559"></a>
<span class="sourceLineNo">560</span>                                throw new IllegalArgumentException("Given dataset must have only one item");<a name="line.560"></a>
<span class="sourceLineNo">561</span>                        }<a name="line.561"></a>
<span class="sourceLineNo">562</span>                        return db.getLong(new int[db.getRank()]);<a name="line.562"></a>
<span class="sourceLineNo">563</span>                } else {<a name="line.563"></a>
<span class="sourceLineNo">564</span>                        logger.error("Argument is of unsupported class");<a name="line.564"></a>
<span class="sourceLineNo">565</span>                        throw new IllegalArgumentException("Argument is of unsupported class");<a name="line.565"></a>
<span class="sourceLineNo">566</span>                }<a name="line.566"></a>
<span class="sourceLineNo">567</span>        }<a name="line.567"></a>
<span class="sourceLineNo">568</span><a name="line.568"></a>
<span class="sourceLineNo">569</span>        public static double toReal(final Object b) {<a name="line.569"></a>
<span class="sourceLineNo">570</span>                if (b instanceof Number) {<a name="line.570"></a>
<span class="sourceLineNo">571</span>                        return ((Number) b).doubleValue();<a name="line.571"></a>
<span class="sourceLineNo">572</span>                } else if (b instanceof Boolean) {<a name="line.572"></a>
<span class="sourceLineNo">573</span>                        return ((Boolean) b).booleanValue() ? 1 : 0;<a name="line.573"></a>
<span class="sourceLineNo">574</span>                } else if (b instanceof Complex) {<a name="line.574"></a>
<span class="sourceLineNo">575</span>                        return ((Complex) b).getReal();<a name="line.575"></a>
<span class="sourceLineNo">576</span>                } else if (b.getClass().isArray()) {<a name="line.576"></a>
<span class="sourceLineNo">577</span>                        if (Array.getLength(b) == 0)<a name="line.577"></a>
<span class="sourceLineNo">578</span>                                return 0;<a name="line.578"></a>
<span class="sourceLineNo">579</span>                        return toReal(Array.get(b, 0));<a name="line.579"></a>
<span class="sourceLineNo">580</span>                } else if (b instanceof Dataset) {<a name="line.580"></a>
<span class="sourceLineNo">581</span>                        Dataset db = (Dataset) b;<a name="line.581"></a>
<span class="sourceLineNo">582</span>                        if (db.getSize() != 1) {<a name="line.582"></a>
<span class="sourceLineNo">583</span>                                logger.error("Given dataset must have only one item");<a name="line.583"></a>
<span class="sourceLineNo">584</span>                                throw new IllegalArgumentException("Given dataset must have only one item");<a name="line.584"></a>
<span class="sourceLineNo">585</span>                        }<a name="line.585"></a>
<span class="sourceLineNo">586</span>                        return db.getDouble();<a name="line.586"></a>
<span class="sourceLineNo">587</span>                } else if (b instanceof IDataset) {<a name="line.587"></a>
<span class="sourceLineNo">588</span>                        IDataset db = (Dataset) b;<a name="line.588"></a>
<span class="sourceLineNo">589</span>                        if (db.getSize() != 1) {<a name="line.589"></a>
<span class="sourceLineNo">590</span>                                logger.error("Given dataset must have only one item");<a name="line.590"></a>
<span class="sourceLineNo">591</span>                                throw new IllegalArgumentException("Given dataset must have only one item");<a name="line.591"></a>
<span class="sourceLineNo">592</span>                        }<a name="line.592"></a>
<span class="sourceLineNo">593</span>                        return db.getDouble(new int[db.getRank()]);<a name="line.593"></a>
<span class="sourceLineNo">594</span>                } else {<a name="line.594"></a>
<span class="sourceLineNo">595</span>                        logger.error("Argument is of unsupported class");<a name="line.595"></a>
<span class="sourceLineNo">596</span>                        throw new IllegalArgumentException("Argument is of unsupported class");<a name="line.596"></a>
<span class="sourceLineNo">597</span>                }<a name="line.597"></a>
<span class="sourceLineNo">598</span>        }<a name="line.598"></a>
<span class="sourceLineNo">599</span><a name="line.599"></a>
<span class="sourceLineNo">600</span>        public static double toImag(final Object b) {<a name="line.600"></a>
<span class="sourceLineNo">601</span>                if (b instanceof Number) {<a name="line.601"></a>
<span class="sourceLineNo">602</span>                        return 0;<a name="line.602"></a>
<span class="sourceLineNo">603</span>                } else if (b instanceof Boolean) {<a name="line.603"></a>
<span class="sourceLineNo">604</span>                        return 0;<a name="line.604"></a>
<span class="sourceLineNo">605</span>                } else if (b instanceof Complex) {<a name="line.605"></a>
<span class="sourceLineNo">606</span>                        return ((Complex) b).getImaginary();<a name="line.606"></a>
<span class="sourceLineNo">607</span>                } else if (b.getClass().isArray()) {<a name="line.607"></a>
<span class="sourceLineNo">608</span>                        if (Array.getLength(b) &lt; 2)<a name="line.608"></a>
<span class="sourceLineNo">609</span>                                return 0;<a name="line.609"></a>
<span class="sourceLineNo">610</span>                        return toReal(Array.get(b, 1));<a name="line.610"></a>
<span class="sourceLineNo">611</span>                } else if (b instanceof Dataset) {<a name="line.611"></a>
<span class="sourceLineNo">612</span>                        Dataset db = (Dataset) b;<a name="line.612"></a>
<span class="sourceLineNo">613</span>                        if (db.getSize() != 1) {<a name="line.613"></a>
<span class="sourceLineNo">614</span>                                logger.error("Given dataset must have only one item");<a name="line.614"></a>
<span class="sourceLineNo">615</span>                                throw new IllegalArgumentException("Given dataset must have only one item");<a name="line.615"></a>
<span class="sourceLineNo">616</span>                        }<a name="line.616"></a>
<span class="sourceLineNo">617</span>                        return toImag(db.getObjectAbs(db.getOffset()));<a name="line.617"></a>
<span class="sourceLineNo">618</span>                } else if (b instanceof IDataset) {<a name="line.618"></a>
<span class="sourceLineNo">619</span>                        IDataset db = (Dataset) b;<a name="line.619"></a>
<span class="sourceLineNo">620</span>                        if (db.getSize() != 1) {<a name="line.620"></a>
<span class="sourceLineNo">621</span>                                logger.error("Given dataset must have only one item");<a name="line.621"></a>
<span class="sourceLineNo">622</span>                                throw new IllegalArgumentException("Given dataset must have only one item");<a name="line.622"></a>
<span class="sourceLineNo">623</span>                        }<a name="line.623"></a>
<span class="sourceLineNo">624</span>                        return toImag(db.getObject(new int[db.getRank()]));<a name="line.624"></a>
<span class="sourceLineNo">625</span>                } else {<a name="line.625"></a>
<span class="sourceLineNo">626</span>                        logger.error("Argument is of unsupported class");<a name="line.626"></a>
<span class="sourceLineNo">627</span>                        throw new IllegalArgumentException("Argument is of unsupported class");<a name="line.627"></a>
<span class="sourceLineNo">628</span>                }<a name="line.628"></a>
<span class="sourceLineNo">629</span>        }<a name="line.629"></a>
<span class="sourceLineNo">630</span><a name="line.630"></a>
<span class="sourceLineNo">631</span>        public static double[] toDoubleArray(final Object b, final int itemSize) {<a name="line.631"></a>
<span class="sourceLineNo">632</span>                double[] result = null;<a name="line.632"></a>
<span class="sourceLineNo">633</span><a name="line.633"></a>
<span class="sourceLineNo">634</span>                // ensure array is of given length<a name="line.634"></a>
<span class="sourceLineNo">635</span>                if (b instanceof Number) {<a name="line.635"></a>
<span class="sourceLineNo">636</span>                        result = new double[itemSize];<a name="line.636"></a>
<span class="sourceLineNo">637</span>                        final double val = ((Number) b).doubleValue();<a name="line.637"></a>
<span class="sourceLineNo">638</span>                        for (int i = 0; i &lt; itemSize; i++) {<a name="line.638"></a>
<span class="sourceLineNo">639</span>                                result[i] = val;<a name="line.639"></a>
<span class="sourceLineNo">640</span>                        }<a name="line.640"></a>
<span class="sourceLineNo">641</span>                } else if (b instanceof double[]) {<a name="line.641"></a>
<span class="sourceLineNo">642</span>                        final double[] old = (double[]) b;<a name="line.642"></a>
<span class="sourceLineNo">643</span>                        result = old;<a name="line.643"></a>
<span class="sourceLineNo">644</span>                        final int ilen = old.length;<a name="line.644"></a>
<span class="sourceLineNo">645</span>                        if (ilen &lt; itemSize) {<a name="line.645"></a>
<span class="sourceLineNo">646</span>                                result = new double[itemSize];<a name="line.646"></a>
<span class="sourceLineNo">647</span>                                for (int i = 0; i &lt; ilen; i++) {<a name="line.647"></a>
<span class="sourceLineNo">648</span>                                        result[i] = old[i];<a name="line.648"></a>
<span class="sourceLineNo">649</span>                                }<a name="line.649"></a>
<span class="sourceLineNo">650</span>                        }<a name="line.650"></a>
<span class="sourceLineNo">651</span>                } else if (b instanceof List&lt;?&gt;) {<a name="line.651"></a>
<span class="sourceLineNo">652</span>                        result = new double[itemSize];<a name="line.652"></a>
<span class="sourceLineNo">653</span>                        List&lt;?&gt; jl = (List&lt;?&gt;) b;<a name="line.653"></a>
<span class="sourceLineNo">654</span>                        int ilen = jl.size();<a name="line.654"></a>
<span class="sourceLineNo">655</span>                        if (ilen &gt; 0 &amp;&amp; !(jl.get(0) instanceof Number)) {<a name="line.655"></a>
<span class="sourceLineNo">656</span>                                logger.error("Given array was not of a numerical primitive type");<a name="line.656"></a>
<span class="sourceLineNo">657</span>                                throw new IllegalArgumentException("Given array was not of a numerical primitive type");<a name="line.657"></a>
<span class="sourceLineNo">658</span>                        }<a name="line.658"></a>
<span class="sourceLineNo">659</span>                        ilen = Math.min(itemSize, ilen);<a name="line.659"></a>
<span class="sourceLineNo">660</span>                        for (int i = 0; i &lt; ilen; i++) {<a name="line.660"></a>
<span class="sourceLineNo">661</span>                                result[i] = toReal(jl.get(i));<a name="line.661"></a>
<span class="sourceLineNo">662</span>                        }<a name="line.662"></a>
<span class="sourceLineNo">663</span>                } else if (b.getClass().isArray()) {<a name="line.663"></a>
<span class="sourceLineNo">664</span>                        result = new double[itemSize];<a name="line.664"></a>
<span class="sourceLineNo">665</span>                        int ilen = Array.getLength(b);<a name="line.665"></a>
<span class="sourceLineNo">666</span>                        if (ilen &gt; 0 &amp;&amp; !(Array.get(b, 0) instanceof Number)) {<a name="line.666"></a>
<span class="sourceLineNo">667</span>                                logger.error("Given array was not of a numerical primitive type");<a name="line.667"></a>
<span class="sourceLineNo">668</span>                                throw new IllegalArgumentException("Given array was not of a numerical primitive type");<a name="line.668"></a>
<span class="sourceLineNo">669</span>                        }<a name="line.669"></a>
<span class="sourceLineNo">670</span>                        ilen = Math.min(itemSize, ilen);<a name="line.670"></a>
<span class="sourceLineNo">671</span>                        for (int i = 0; i &lt; ilen; i++) {<a name="line.671"></a>
<span class="sourceLineNo">672</span>                                result[i] = ((Number) Array.get(b, i)).doubleValue();<a name="line.672"></a>
<span class="sourceLineNo">673</span>                        }<a name="line.673"></a>
<span class="sourceLineNo">674</span>                } else if (b instanceof Complex) {<a name="line.674"></a>
<span class="sourceLineNo">675</span>                        if (itemSize &gt; 2) {<a name="line.675"></a>
<span class="sourceLineNo">676</span>                                logger.error("Complex number will not fit in compound dataset");<a name="line.676"></a>
<span class="sourceLineNo">677</span>                                throw new IllegalArgumentException("Complex number will not fit in compound dataset");<a name="line.677"></a>
<span class="sourceLineNo">678</span>                        }<a name="line.678"></a>
<span class="sourceLineNo">679</span>                        Complex cb = (Complex) b;<a name="line.679"></a>
<span class="sourceLineNo">680</span>                        switch (itemSize) {<a name="line.680"></a>
<span class="sourceLineNo">681</span>                        default:<a name="line.681"></a>
<span class="sourceLineNo">682</span>                        case 0:<a name="line.682"></a>
<span class="sourceLineNo">683</span>                                break;<a name="line.683"></a>
<span class="sourceLineNo">684</span>                        case 1:<a name="line.684"></a>
<span class="sourceLineNo">685</span>                                result = new double[] {cb.getReal()};<a name="line.685"></a>
<span class="sourceLineNo">686</span>                                break;<a name="line.686"></a>
<span class="sourceLineNo">687</span>                        case 2:<a name="line.687"></a>
<span class="sourceLineNo">688</span>                                result = new double[] {cb.getReal(), cb.getImaginary()};<a name="line.688"></a>
<span class="sourceLineNo">689</span>                                break;<a name="line.689"></a>
<span class="sourceLineNo">690</span>                        }<a name="line.690"></a>
<span class="sourceLineNo">691</span>                } else if (b instanceof Dataset) {<a name="line.691"></a>
<span class="sourceLineNo">692</span>                        Dataset db = (Dataset) b;<a name="line.692"></a>
<span class="sourceLineNo">693</span>                        if (db.getSize() != 1) {<a name="line.693"></a>
<span class="sourceLineNo">694</span>                                logger.error("Given dataset must have only one item");<a name="line.694"></a>
<span class="sourceLineNo">695</span>                                throw new IllegalArgumentException("Given dataset must have only one item");<a name="line.695"></a>
<span class="sourceLineNo">696</span>                        }<a name="line.696"></a>
<span class="sourceLineNo">697</span>                        return toDoubleArray(db.getObjectAbs(db.getOffset()), itemSize);<a name="line.697"></a>
<span class="sourceLineNo">698</span>                } else if (b instanceof IDataset) {<a name="line.698"></a>
<span class="sourceLineNo">699</span>                        IDataset db = (Dataset) b;<a name="line.699"></a>
<span class="sourceLineNo">700</span>                        if (db.getSize() != 1) {<a name="line.700"></a>
<span class="sourceLineNo">701</span>                                logger.error("Given dataset must have only one item");<a name="line.701"></a>
<span class="sourceLineNo">702</span>                                throw new IllegalArgumentException("Given dataset must have only one item");<a name="line.702"></a>
<span class="sourceLineNo">703</span>                        }<a name="line.703"></a>
<span class="sourceLineNo">704</span>                        return toDoubleArray(db.getObject(new int[db.getRank()]), itemSize);<a name="line.704"></a>
<span class="sourceLineNo">705</span>                }<a name="line.705"></a>
<span class="sourceLineNo">706</span><a name="line.706"></a>
<span class="sourceLineNo">707</span>                return result;<a name="line.707"></a>
<span class="sourceLineNo">708</span>        }<a name="line.708"></a>
<span class="sourceLineNo">709</span><a name="line.709"></a>
<span class="sourceLineNo">710</span>        public static float[] toFloatArray(final Object b, final int itemSize) {<a name="line.710"></a>
<span class="sourceLineNo">711</span>                float[] result = null;<a name="line.711"></a>
<span class="sourceLineNo">712</span><a name="line.712"></a>
<span class="sourceLineNo">713</span>                if (b instanceof Number) {<a name="line.713"></a>
<span class="sourceLineNo">714</span>                        result = new float[itemSize];<a name="line.714"></a>
<span class="sourceLineNo">715</span>                        final float val = ((Number) b).floatValue();<a name="line.715"></a>
<span class="sourceLineNo">716</span>                        for (int i = 0; i &lt; itemSize; i++)<a name="line.716"></a>
<span class="sourceLineNo">717</span>                                result[i] = val;<a name="line.717"></a>
<span class="sourceLineNo">718</span>                } else if (b instanceof float[]) {<a name="line.718"></a>
<span class="sourceLineNo">719</span>                        final float[] old = (float[]) b;<a name="line.719"></a>
<span class="sourceLineNo">720</span>                        result = old;<a name="line.720"></a>
<span class="sourceLineNo">721</span>                        final int ilen = old.length;<a name="line.721"></a>
<span class="sourceLineNo">722</span>                        if (ilen &lt; itemSize) {<a name="line.722"></a>
<span class="sourceLineNo">723</span>                                result = new float[itemSize];<a name="line.723"></a>
<span class="sourceLineNo">724</span>                                for (int i = 0; i &lt; ilen; i++) {<a name="line.724"></a>
<span class="sourceLineNo">725</span>                                        result[i] = old[i];<a name="line.725"></a>
<span class="sourceLineNo">726</span>                                }<a name="line.726"></a>
<span class="sourceLineNo">727</span>                        }<a name="line.727"></a>
<span class="sourceLineNo">728</span>                } else if (b instanceof double[]) {<a name="line.728"></a>
<span class="sourceLineNo">729</span>                        final double[] old = (double[]) b;<a name="line.729"></a>
<span class="sourceLineNo">730</span>                        final int ilen = Math.min(itemSize, old.length);<a name="line.730"></a>
<span class="sourceLineNo">731</span>                        result = new float[itemSize];<a name="line.731"></a>
<span class="sourceLineNo">732</span>                        for (int i = 0; i &lt; ilen; i++) {<a name="line.732"></a>
<span class="sourceLineNo">733</span>                                result[i] = (float) old[i];<a name="line.733"></a>
<span class="sourceLineNo">734</span>                        }<a name="line.734"></a>
<span class="sourceLineNo">735</span>                } else if (b instanceof List&lt;?&gt;) {<a name="line.735"></a>
<span class="sourceLineNo">736</span>                        result = new float[itemSize];<a name="line.736"></a>
<span class="sourceLineNo">737</span>                        List&lt;?&gt; jl = (List&lt;?&gt;) b;<a name="line.737"></a>
<span class="sourceLineNo">738</span>                        int ilen = jl.size();<a name="line.738"></a>
<span class="sourceLineNo">739</span>                        if (ilen &gt; 0 &amp;&amp; !(jl.get(0) instanceof Number)) {<a name="line.739"></a>
<span class="sourceLineNo">740</span>                                logger.error("Given array was not of a numerical primitive type");<a name="line.740"></a>
<span class="sourceLineNo">741</span>                                throw new IllegalArgumentException("Given array was not of a numerical primitive type");<a name="line.741"></a>
<span class="sourceLineNo">742</span>                        }<a name="line.742"></a>
<span class="sourceLineNo">743</span>                        ilen = Math.min(itemSize, ilen);<a name="line.743"></a>
<span class="sourceLineNo">744</span>                        for (int i = 0; i &lt; ilen; i++) {<a name="line.744"></a>
<span class="sourceLineNo">745</span>                                result[i] = (float) toReal(jl.get(i));<a name="line.745"></a>
<span class="sourceLineNo">746</span>                        }<a name="line.746"></a>
<span class="sourceLineNo">747</span>                } else if (b.getClass().isArray()) {<a name="line.747"></a>
<span class="sourceLineNo">748</span>                        result = new float[itemSize];<a name="line.748"></a>
<span class="sourceLineNo">749</span>                        int ilen = Array.getLength(b);<a name="line.749"></a>
<span class="sourceLineNo">750</span>                        if (ilen &gt; 0 &amp;&amp; !(Array.get(b, 0) instanceof Number)) {<a name="line.750"></a>
<span class="sourceLineNo">751</span>                                logger.error("Given array was not of a numerical primitive type");<a name="line.751"></a>
<span class="sourceLineNo">752</span>                                throw new IllegalArgumentException("Given array was not of a numerical primitive type");<a name="line.752"></a>
<span class="sourceLineNo">753</span>                        }<a name="line.753"></a>
<span class="sourceLineNo">754</span>                        ilen = Math.min(itemSize, ilen);<a name="line.754"></a>
<span class="sourceLineNo">755</span>                        for (int i = 0; i &lt; ilen; i++) {<a name="line.755"></a>
<span class="sourceLineNo">756</span>                                result[i] = ((Number) Array.get(b, i)).floatValue();<a name="line.756"></a>
<span class="sourceLineNo">757</span>                        }<a name="line.757"></a>
<span class="sourceLineNo">758</span>                } else if (b instanceof Complex) {<a name="line.758"></a>
<span class="sourceLineNo">759</span>                        if (itemSize &gt; 2) {<a name="line.759"></a>
<span class="sourceLineNo">760</span>                                logger.error("Complex number will not fit in compound dataset");<a name="line.760"></a>
<span class="sourceLineNo">761</span>                                throw new IllegalArgumentException("Complex number will not fit in compound dataset");<a name="line.761"></a>
<span class="sourceLineNo">762</span>                        }<a name="line.762"></a>
<span class="sourceLineNo">763</span>                        Complex cb = (Complex) b;<a name="line.763"></a>
<span class="sourceLineNo">764</span>                        switch (itemSize) {<a name="line.764"></a>
<span class="sourceLineNo">765</span>                        default:<a name="line.765"></a>
<span class="sourceLineNo">766</span>                        case 0:<a name="line.766"></a>
<span class="sourceLineNo">767</span>                                break;<a name="line.767"></a>
<span class="sourceLineNo">768</span>                        case 1:<a name="line.768"></a>
<span class="sourceLineNo">769</span>                                result = new float[] {(float) cb.getReal()};<a name="line.769"></a>
<span class="sourceLineNo">770</span>                                break;<a name="line.770"></a>
<span class="sourceLineNo">771</span>                        case 2:<a name="line.771"></a>
<span class="sourceLineNo">772</span>                                result = new float[] {(float) cb.getReal(), (float) cb.getImaginary()};<a name="line.772"></a>
<span class="sourceLineNo">773</span>                                break;<a name="line.773"></a>
<span class="sourceLineNo">774</span>                        }<a name="line.774"></a>
<span class="sourceLineNo">775</span>                } else if (b instanceof Dataset) {<a name="line.775"></a>
<span class="sourceLineNo">776</span>                        Dataset db = (Dataset) b;<a name="line.776"></a>
<span class="sourceLineNo">777</span>                        if (db.getSize() != 1) {<a name="line.777"></a>
<span class="sourceLineNo">778</span>                                logger.error("Given dataset must have only one item");<a name="line.778"></a>
<span class="sourceLineNo">779</span>                                throw new IllegalArgumentException("Given dataset must have only one item");<a name="line.779"></a>
<span class="sourceLineNo">780</span>                        }<a name="line.780"></a>
<span class="sourceLineNo">781</span>                        return toFloatArray(db.getObjectAbs(db.getOffset()), itemSize);<a name="line.781"></a>
<span class="sourceLineNo">782</span>                } else if (b instanceof IDataset) {<a name="line.782"></a>
<span class="sourceLineNo">783</span>                        IDataset db = (Dataset) b;<a name="line.783"></a>
<span class="sourceLineNo">784</span>                        if (db.getSize() != 1) {<a name="line.784"></a>
<span class="sourceLineNo">785</span>                                logger.error("Given dataset must have only one item");<a name="line.785"></a>
<span class="sourceLineNo">786</span>                                throw new IllegalArgumentException("Given dataset must have only one item");<a name="line.786"></a>
<span class="sourceLineNo">787</span>                        }<a name="line.787"></a>
<span class="sourceLineNo">788</span>                        return toFloatArray(db.getObject(new int[db.getRank()]), itemSize);<a name="line.788"></a>
<span class="sourceLineNo">789</span>                }<a name="line.789"></a>
<span class="sourceLineNo">790</span><a name="line.790"></a>
<span class="sourceLineNo">791</span>                return result;<a name="line.791"></a>
<span class="sourceLineNo">792</span>        }<a name="line.792"></a>
<span class="sourceLineNo">793</span><a name="line.793"></a>
<span class="sourceLineNo">794</span>        public static long[] toLongArray(final Object b, final int itemSize) {<a name="line.794"></a>
<span class="sourceLineNo">795</span>                long[] result = null;<a name="line.795"></a>
<span class="sourceLineNo">796</span><a name="line.796"></a>
<span class="sourceLineNo">797</span>                if (b instanceof Number) {<a name="line.797"></a>
<span class="sourceLineNo">798</span>                        result = new long[itemSize];<a name="line.798"></a>
<span class="sourceLineNo">799</span>                        final long val = toLong(b);<a name="line.799"></a>
<span class="sourceLineNo">800</span>                        for (int i = 0; i &lt; itemSize; i++) {<a name="line.800"></a>
<span class="sourceLineNo">801</span>                                result[i] = val;<a name="line.801"></a>
<span class="sourceLineNo">802</span>                        }<a name="line.802"></a>
<span class="sourceLineNo">803</span>                } else if (b instanceof long[]) {<a name="line.803"></a>
<span class="sourceLineNo">804</span>                        final long[] old = (long[]) b;<a name="line.804"></a>
<span class="sourceLineNo">805</span>                        result = old;<a name="line.805"></a>
<span class="sourceLineNo">806</span>                        final int ilen = result.length;<a name="line.806"></a>
<span class="sourceLineNo">807</span>                        if (ilen &lt; itemSize) {<a name="line.807"></a>
<span class="sourceLineNo">808</span>                                result = new long[itemSize];<a name="line.808"></a>
<span class="sourceLineNo">809</span>                                for (int i = 0; i &lt; ilen; i++) {<a name="line.809"></a>
<span class="sourceLineNo">810</span>                                        result[i] = old[i];<a name="line.810"></a>
<span class="sourceLineNo">811</span>                                }<a name="line.811"></a>
<span class="sourceLineNo">812</span>                        }<a name="line.812"></a>
<span class="sourceLineNo">813</span>                } else if (b instanceof double[]) {<a name="line.813"></a>
<span class="sourceLineNo">814</span>                        final double[] old = (double[]) b;<a name="line.814"></a>
<span class="sourceLineNo">815</span>                        final int ilen = Math.min(itemSize, old.length);<a name="line.815"></a>
<span class="sourceLineNo">816</span>                        result = new long[itemSize];<a name="line.816"></a>
<span class="sourceLineNo">817</span>                        for (int i = 0; i &lt; ilen; i++) {<a name="line.817"></a>
<span class="sourceLineNo">818</span>                                result[i] = toLong(old[i]);<a name="line.818"></a>
<span class="sourceLineNo">819</span>                        }<a name="line.819"></a>
<span class="sourceLineNo">820</span>                } else if (b instanceof List&lt;?&gt;) {<a name="line.820"></a>
<span class="sourceLineNo">821</span>                        result = new long[itemSize];<a name="line.821"></a>
<span class="sourceLineNo">822</span>                        List&lt;?&gt; jl = (List&lt;?&gt;) b;<a name="line.822"></a>
<span class="sourceLineNo">823</span>                        int ilen = jl.size();<a name="line.823"></a>
<span class="sourceLineNo">824</span>                        if (ilen &gt; 0 &amp;&amp; !(jl.get(0) instanceof Number)) {<a name="line.824"></a>
<span class="sourceLineNo">825</span>                                logger.error("Given array was not of a numerical primitive type");<a name="line.825"></a>
<span class="sourceLineNo">826</span>                                throw new IllegalArgumentException("Given array was not of a numerical primitive type");<a name="line.826"></a>
<span class="sourceLineNo">827</span>                        }<a name="line.827"></a>
<span class="sourceLineNo">828</span>                        ilen = Math.min(itemSize, ilen);<a name="line.828"></a>
<span class="sourceLineNo">829</span>                        for (int i = 0; i &lt; ilen; i++) {<a name="line.829"></a>
<span class="sourceLineNo">830</span>                                result[i] = toLong(jl.get(i));<a name="line.830"></a>
<span class="sourceLineNo">831</span>                        }<a name="line.831"></a>
<span class="sourceLineNo">832</span>                } else if (b.getClass().isArray()) {<a name="line.832"></a>
<span class="sourceLineNo">833</span>                        result = new long[itemSize];<a name="line.833"></a>
<span class="sourceLineNo">834</span>                        int ilen = Array.getLength(b);<a name="line.834"></a>
<span class="sourceLineNo">835</span>                        if (ilen &gt; 0 &amp;&amp; !(Array.get(b, 0) instanceof Number)) {<a name="line.835"></a>
<span class="sourceLineNo">836</span>                                logger.error("Given array was not of a numerical primitive type");<a name="line.836"></a>
<span class="sourceLineNo">837</span>                                throw new IllegalArgumentException("Given array was not of a numerical primitive type");<a name="line.837"></a>
<span class="sourceLineNo">838</span>                        }<a name="line.838"></a>
<span class="sourceLineNo">839</span>                        ilen = Math.min(itemSize, ilen);<a name="line.839"></a>
<span class="sourceLineNo">840</span>                        for (int i = 0; i &lt; ilen; i++) {<a name="line.840"></a>
<span class="sourceLineNo">841</span>                                result[i] = toLong(Array.get(b, i));<a name="line.841"></a>
<span class="sourceLineNo">842</span>                        }<a name="line.842"></a>
<span class="sourceLineNo">843</span>                } else if (b instanceof Complex) {<a name="line.843"></a>
<span class="sourceLineNo">844</span>                        if (itemSize &gt; 2) {<a name="line.844"></a>
<span class="sourceLineNo">845</span>                                logger.error("Complex number will not fit in compound dataset");<a name="line.845"></a>
<span class="sourceLineNo">846</span>                                throw new IllegalArgumentException("Complex number will not fit in compound dataset");<a name="line.846"></a>
<span class="sourceLineNo">847</span>                        }<a name="line.847"></a>
<span class="sourceLineNo">848</span>                        Complex cb = (Complex) b;<a name="line.848"></a>
<span class="sourceLineNo">849</span>                        switch (itemSize) {<a name="line.849"></a>
<span class="sourceLineNo">850</span>                        default:<a name="line.850"></a>
<span class="sourceLineNo">851</span>                        case 0:<a name="line.851"></a>
<span class="sourceLineNo">852</span>                                break;<a name="line.852"></a>
<span class="sourceLineNo">853</span>                        case 1:<a name="line.853"></a>
<span class="sourceLineNo">854</span>                                result = new long[] {(long) cb.getReal()};<a name="line.854"></a>
<span class="sourceLineNo">855</span>                                break;<a name="line.855"></a>
<span class="sourceLineNo">856</span>                        case 2:<a name="line.856"></a>
<span class="sourceLineNo">857</span>                                result = new long[] {(long) cb.getReal(), (long) cb.getImaginary()};<a name="line.857"></a>
<span class="sourceLineNo">858</span>                                break;<a name="line.858"></a>
<span class="sourceLineNo">859</span>                        }<a name="line.859"></a>
<span class="sourceLineNo">860</span>                } else if (b instanceof Dataset) {<a name="line.860"></a>
<span class="sourceLineNo">861</span>                        Dataset db = (Dataset) b;<a name="line.861"></a>
<span class="sourceLineNo">862</span>                        if (db.getSize() != 1) {<a name="line.862"></a>
<span class="sourceLineNo">863</span>                                logger.error("Given dataset must have only one item");<a name="line.863"></a>
<span class="sourceLineNo">864</span>                                throw new IllegalArgumentException("Given dataset must have only one item");<a name="line.864"></a>
<span class="sourceLineNo">865</span>                        }<a name="line.865"></a>
<span class="sourceLineNo">866</span>                        return toLongArray(db.getObjectAbs(db.getOffset()), itemSize);<a name="line.866"></a>
<span class="sourceLineNo">867</span>                } else if (b instanceof IDataset) {<a name="line.867"></a>
<span class="sourceLineNo">868</span>                        IDataset db = (Dataset) b;<a name="line.868"></a>
<span class="sourceLineNo">869</span>                        if (db.getSize() != 1) {<a name="line.869"></a>
<span class="sourceLineNo">870</span>                                logger.error("Given dataset must have only one item");<a name="line.870"></a>
<span class="sourceLineNo">871</span>                                throw new IllegalArgumentException("Given dataset must have only one item");<a name="line.871"></a>
<span class="sourceLineNo">872</span>                        }<a name="line.872"></a>
<span class="sourceLineNo">873</span>                        return toLongArray(db.getObject(new int[db.getRank()]), itemSize);<a name="line.873"></a>
<span class="sourceLineNo">874</span>                }<a name="line.874"></a>
<span class="sourceLineNo">875</span><a name="line.875"></a>
<span class="sourceLineNo">876</span>                return result;<a name="line.876"></a>
<span class="sourceLineNo">877</span>        }<a name="line.877"></a>
<span class="sourceLineNo">878</span><a name="line.878"></a>
<span class="sourceLineNo">879</span>        public static int[] toIntegerArray(final Object b, final int itemSize) {<a name="line.879"></a>
<span class="sourceLineNo">880</span>                int[] result = null;<a name="line.880"></a>
<span class="sourceLineNo">881</span><a name="line.881"></a>
<span class="sourceLineNo">882</span>                if (b instanceof Number) {<a name="line.882"></a>
<span class="sourceLineNo">883</span>                        result = new int[itemSize];<a name="line.883"></a>
<span class="sourceLineNo">884</span>                        final int val = (int) toLong(b);<a name="line.884"></a>
<span class="sourceLineNo">885</span>                        for (int i = 0; i &lt; itemSize; i++) {<a name="line.885"></a>
<span class="sourceLineNo">886</span>                                result[i] = val;<a name="line.886"></a>
<span class="sourceLineNo">887</span>                        }<a name="line.887"></a>
<span class="sourceLineNo">888</span>                } else if (b instanceof int[]) {<a name="line.888"></a>
<span class="sourceLineNo">889</span>                        final int[] old = (int[]) b;<a name="line.889"></a>
<span class="sourceLineNo">890</span>                        result = old;<a name="line.890"></a>
<span class="sourceLineNo">891</span>                        final int ilen = result.length;<a name="line.891"></a>
<span class="sourceLineNo">892</span>                        if (ilen &lt; itemSize) {<a name="line.892"></a>
<span class="sourceLineNo">893</span>                                result = new int[itemSize];<a name="line.893"></a>
<span class="sourceLineNo">894</span>                                for (int i = 0; i &lt; ilen; i++) {<a name="line.894"></a>
<span class="sourceLineNo">895</span>                                        result[i] = old[i];<a name="line.895"></a>
<span class="sourceLineNo">896</span>                                }<a name="line.896"></a>
<span class="sourceLineNo">897</span>                        }<a name="line.897"></a>
<span class="sourceLineNo">898</span>                } else if (b instanceof double[]) {<a name="line.898"></a>
<span class="sourceLineNo">899</span>                        final double[] old = (double[]) b;<a name="line.899"></a>
<span class="sourceLineNo">900</span>                        final int ilen = Math.min(itemSize, old.length);<a name="line.900"></a>
<span class="sourceLineNo">901</span>                        result = new int[itemSize];<a name="line.901"></a>
<span class="sourceLineNo">902</span>                        for (int i = 0; i &lt; ilen; i++) {<a name="line.902"></a>
<span class="sourceLineNo">903</span>                                result[i] = (int) toLong(old[i]);<a name="line.903"></a>
<span class="sourceLineNo">904</span>                        }<a name="line.904"></a>
<span class="sourceLineNo">905</span>                } else if (b instanceof List&lt;?&gt;) {<a name="line.905"></a>
<span class="sourceLineNo">906</span>                        result = new int[itemSize];<a name="line.906"></a>
<span class="sourceLineNo">907</span>                        List&lt;?&gt; jl = (List&lt;?&gt;) b;<a name="line.907"></a>
<span class="sourceLineNo">908</span>                        int ilen = jl.size();<a name="line.908"></a>
<span class="sourceLineNo">909</span>                        if (ilen &gt; 0 &amp;&amp; !(jl.get(0) instanceof Number)) {<a name="line.909"></a>
<span class="sourceLineNo">910</span>                                logger.error("Given array was not of a numerical primitive type");<a name="line.910"></a>
<span class="sourceLineNo">911</span>                                throw new IllegalArgumentException("Given array was not of a numerical primitive type");<a name="line.911"></a>
<span class="sourceLineNo">912</span>                        }<a name="line.912"></a>
<span class="sourceLineNo">913</span>                        ilen = Math.min(itemSize, ilen);<a name="line.913"></a>
<span class="sourceLineNo">914</span>                        for (int i = 0; i &lt; ilen; i++) {<a name="line.914"></a>
<span class="sourceLineNo">915</span>                                result[i] = (int) toLong(jl.get(i));<a name="line.915"></a>
<span class="sourceLineNo">916</span>                        }<a name="line.916"></a>
<span class="sourceLineNo">917</span>                } else if (b.getClass().isArray()) {<a name="line.917"></a>
<span class="sourceLineNo">918</span>                        result = new int[itemSize];<a name="line.918"></a>
<span class="sourceLineNo">919</span>                        int ilen = Array.getLength(b);<a name="line.919"></a>
<span class="sourceLineNo">920</span>                        if (ilen &gt; 0 &amp;&amp; !(Array.get(b, 0) instanceof Number)) {<a name="line.920"></a>
<span class="sourceLineNo">921</span>                                logger.error("Given array was not of a numerical primitive type");<a name="line.921"></a>
<span class="sourceLineNo">922</span>                                throw new IllegalArgumentException("Given array was not of a numerical primitive type");<a name="line.922"></a>
<span class="sourceLineNo">923</span>                        }<a name="line.923"></a>
<span class="sourceLineNo">924</span>                        ilen = Math.min(itemSize, ilen);<a name="line.924"></a>
<span class="sourceLineNo">925</span>                        for (int i = 0; i &lt; ilen; i++) {<a name="line.925"></a>
<span class="sourceLineNo">926</span>                                result[i] = (int) toLong(Array.get(b, i));<a name="line.926"></a>
<span class="sourceLineNo">927</span>                        }<a name="line.927"></a>
<span class="sourceLineNo">928</span>                } else if (b instanceof Complex) {<a name="line.928"></a>
<span class="sourceLineNo">929</span>                        if (itemSize &gt; 2) {<a name="line.929"></a>
<span class="sourceLineNo">930</span>                                logger.error("Complex number will not fit in compound dataset");<a name="line.930"></a>
<span class="sourceLineNo">931</span>                                throw new IllegalArgumentException("Complex number will not fit in compound dataset");<a name="line.931"></a>
<span class="sourceLineNo">932</span>                        }<a name="line.932"></a>
<span class="sourceLineNo">933</span>                        Complex cb = (Complex) b;<a name="line.933"></a>
<span class="sourceLineNo">934</span>                        switch (itemSize) {<a name="line.934"></a>
<span class="sourceLineNo">935</span>                        default:<a name="line.935"></a>
<span class="sourceLineNo">936</span>                        case 0:<a name="line.936"></a>
<span class="sourceLineNo">937</span>                                break;<a name="line.937"></a>
<span class="sourceLineNo">938</span>                        case 1:<a name="line.938"></a>
<span class="sourceLineNo">939</span>                                result = new int[] {(int) cb.getReal()};<a name="line.939"></a>
<span class="sourceLineNo">940</span>                                break;<a name="line.940"></a>
<span class="sourceLineNo">941</span>                        case 2:<a name="line.941"></a>
<span class="sourceLineNo">942</span>                                result = new int[] {(int) cb.getReal(), (int) cb.getImaginary()};<a name="line.942"></a>
<span class="sourceLineNo">943</span>                                break;<a name="line.943"></a>
<span class="sourceLineNo">944</span>                        }<a name="line.944"></a>
<span class="sourceLineNo">945</span>                } else if (b instanceof Dataset) {<a name="line.945"></a>
<span class="sourceLineNo">946</span>                        Dataset db = (Dataset) b;<a name="line.946"></a>
<span class="sourceLineNo">947</span>                        if (db.getSize() != 1) {<a name="line.947"></a>
<span class="sourceLineNo">948</span>                                logger.error("Given dataset must have only one item");<a name="line.948"></a>
<span class="sourceLineNo">949</span>                                throw new IllegalArgumentException("Given dataset must have only one item");<a name="line.949"></a>
<span class="sourceLineNo">950</span>                        }<a name="line.950"></a>
<span class="sourceLineNo">951</span>                        return toIntegerArray(db.getObjectAbs(db.getOffset()), itemSize);<a name="line.951"></a>
<span class="sourceLineNo">952</span>                } else if (b instanceof IDataset) {<a name="line.952"></a>
<span class="sourceLineNo">953</span>                        IDataset db = (Dataset) b;<a name="line.953"></a>
<span class="sourceLineNo">954</span>                        if (db.getSize() != 1) {<a name="line.954"></a>
<span class="sourceLineNo">955</span>                                logger.error("Given dataset must have only one item");<a name="line.955"></a>
<span class="sourceLineNo">956</span>                                throw new IllegalArgumentException("Given dataset must have only one item");<a name="line.956"></a>
<span class="sourceLineNo">957</span>                        }<a name="line.957"></a>
<span class="sourceLineNo">958</span>                        return toIntegerArray(db.getObject(new int[db.getRank()]), itemSize);<a name="line.958"></a>
<span class="sourceLineNo">959</span>                }<a name="line.959"></a>
<span class="sourceLineNo">960</span><a name="line.960"></a>
<span class="sourceLineNo">961</span>                return result;<a name="line.961"></a>
<span class="sourceLineNo">962</span>        }<a name="line.962"></a>
<span class="sourceLineNo">963</span><a name="line.963"></a>
<span class="sourceLineNo">964</span>        public static short[] toShortArray(final Object b, final int itemSize) {<a name="line.964"></a>
<span class="sourceLineNo">965</span>                short[] result = null;<a name="line.965"></a>
<span class="sourceLineNo">966</span><a name="line.966"></a>
<span class="sourceLineNo">967</span>                if (b instanceof Number) {<a name="line.967"></a>
<span class="sourceLineNo">968</span>                        result = new short[itemSize];<a name="line.968"></a>
<span class="sourceLineNo">969</span>                        final short val = (short) toLong(b);<a name="line.969"></a>
<span class="sourceLineNo">970</span>                        for (int i = 0; i &lt; itemSize; i++) {<a name="line.970"></a>
<span class="sourceLineNo">971</span>                                result[i] = val;<a name="line.971"></a>
<span class="sourceLineNo">972</span>                        }<a name="line.972"></a>
<span class="sourceLineNo">973</span>                } else if (b instanceof short[]) {<a name="line.973"></a>
<span class="sourceLineNo">974</span>                        final short[] old = (short[]) b;<a name="line.974"></a>
<span class="sourceLineNo">975</span>                        result = old;<a name="line.975"></a>
<span class="sourceLineNo">976</span>                        final int ilen = result.length;<a name="line.976"></a>
<span class="sourceLineNo">977</span>                        if (ilen &lt; itemSize) {<a name="line.977"></a>
<span class="sourceLineNo">978</span>                                result = new short[itemSize];<a name="line.978"></a>
<span class="sourceLineNo">979</span>                                for (int i = 0; i &lt; ilen; i++) {<a name="line.979"></a>
<span class="sourceLineNo">980</span>                                        result[i] = old[i];<a name="line.980"></a>
<span class="sourceLineNo">981</span>                                }<a name="line.981"></a>
<span class="sourceLineNo">982</span>                        }<a name="line.982"></a>
<span class="sourceLineNo">983</span>                } else if (b instanceof double[]) {<a name="line.983"></a>
<span class="sourceLineNo">984</span>                        final double[] old = (double[]) b;<a name="line.984"></a>
<span class="sourceLineNo">985</span>                        final int ilen = Math.min(itemSize, old.length);<a name="line.985"></a>
<span class="sourceLineNo">986</span>                        result = new short[itemSize];<a name="line.986"></a>
<span class="sourceLineNo">987</span>                        for (int i = 0; i &lt; ilen; i++) {<a name="line.987"></a>
<span class="sourceLineNo">988</span>                                result[i] = (short) toLong(old[i]);<a name="line.988"></a>
<span class="sourceLineNo">989</span>                        }<a name="line.989"></a>
<span class="sourceLineNo">990</span>                } else if (b instanceof List&lt;?&gt;) {<a name="line.990"></a>
<span class="sourceLineNo">991</span>                        result = new short[itemSize];<a name="line.991"></a>
<span class="sourceLineNo">992</span>                        List&lt;?&gt; jl = (List&lt;?&gt;) b;<a name="line.992"></a>
<span class="sourceLineNo">993</span>                        int ilen = jl.size();<a name="line.993"></a>
<span class="sourceLineNo">994</span>                        if (ilen &gt; 0 &amp;&amp; !(jl.get(0) instanceof Number)) {<a name="line.994"></a>
<span class="sourceLineNo">995</span>                                logger.error("Given array was not of a numerical primitive type");<a name="line.995"></a>
<span class="sourceLineNo">996</span>                                throw new IllegalArgumentException("Given array was not of a numerical primitive type");<a name="line.996"></a>
<span class="sourceLineNo">997</span>                        }<a name="line.997"></a>
<span class="sourceLineNo">998</span>                        ilen = Math.min(itemSize, ilen);<a name="line.998"></a>
<span class="sourceLineNo">999</span>                        for (int i = 0; i &lt; ilen; i++) {<a name="line.999"></a>
<span class="sourceLineNo">1000</span>                                result[i] = (short) toLong(jl.get(i));<a name="line.1000"></a>
<span class="sourceLineNo">1001</span>                        }<a name="line.1001"></a>
<span class="sourceLineNo">1002</span>                } else if (b.getClass().isArray()) {<a name="line.1002"></a>
<span class="sourceLineNo">1003</span>                        result = new short[itemSize];<a name="line.1003"></a>
<span class="sourceLineNo">1004</span>                        int ilen = Array.getLength(b);<a name="line.1004"></a>
<span class="sourceLineNo">1005</span>                        if (ilen &gt; 0 &amp;&amp; !(Array.get(b, 0) instanceof Number)) {<a name="line.1005"></a>
<span class="sourceLineNo">1006</span>                                logger.error("Given array was not of a numerical primitive type");<a name="line.1006"></a>
<span class="sourceLineNo">1007</span>                                throw new IllegalArgumentException("Given array was not of a numerical primitive type");<a name="line.1007"></a>
<span class="sourceLineNo">1008</span>                        }<a name="line.1008"></a>
<span class="sourceLineNo">1009</span>                        ilen = Math.min(itemSize, ilen);<a name="line.1009"></a>
<span class="sourceLineNo">1010</span>                        for (int i = 0; i &lt; ilen; i++) {<a name="line.1010"></a>
<span class="sourceLineNo">1011</span>                                result[i] = (short) toLong(Array.get(b, i));<a name="line.1011"></a>
<span class="sourceLineNo">1012</span>                        }<a name="line.1012"></a>
<span class="sourceLineNo">1013</span>                } else if (b instanceof Complex) {<a name="line.1013"></a>
<span class="sourceLineNo">1014</span>                        if (itemSize &gt; 2) {<a name="line.1014"></a>
<span class="sourceLineNo">1015</span>                                logger.error("Complex number will not fit in compound dataset");<a name="line.1015"></a>
<span class="sourceLineNo">1016</span>                                throw new IllegalArgumentException("Complex number will not fit in compound dataset");<a name="line.1016"></a>
<span class="sourceLineNo">1017</span>                        }<a name="line.1017"></a>
<span class="sourceLineNo">1018</span>                        Complex cb = (Complex) b;<a name="line.1018"></a>
<span class="sourceLineNo">1019</span>                        switch (itemSize) {<a name="line.1019"></a>
<span class="sourceLineNo">1020</span>                        default:<a name="line.1020"></a>
<span class="sourceLineNo">1021</span>                        case 0:<a name="line.1021"></a>
<span class="sourceLineNo">1022</span>                                break;<a name="line.1022"></a>
<span class="sourceLineNo">1023</span>                        case 1:<a name="line.1023"></a>
<span class="sourceLineNo">1024</span>                                result = new short[] {(short) cb.getReal()};<a name="line.1024"></a>
<span class="sourceLineNo">1025</span>                                break;<a name="line.1025"></a>
<span class="sourceLineNo">1026</span>                        case 2:<a name="line.1026"></a>
<span class="sourceLineNo">1027</span>                                result = new short[] {(short) cb.getReal(), (short) cb.getImaginary()};<a name="line.1027"></a>
<span class="sourceLineNo">1028</span>                                break;<a name="line.1028"></a>
<span class="sourceLineNo">1029</span>                        }<a name="line.1029"></a>
<span class="sourceLineNo">1030</span>                } else if (b instanceof Dataset) {<a name="line.1030"></a>
<span class="sourceLineNo">1031</span>                        Dataset db = (Dataset) b;<a name="line.1031"></a>
<span class="sourceLineNo">1032</span>                        if (db.getSize() != 1) {<a name="line.1032"></a>
<span class="sourceLineNo">1033</span>                                logger.error("Given dataset must have only one item");<a name="line.1033"></a>
<span class="sourceLineNo">1034</span>                                throw new IllegalArgumentException("Given dataset must have only one item");<a name="line.1034"></a>
<span class="sourceLineNo">1035</span>                        }<a name="line.1035"></a>
<span class="sourceLineNo">1036</span>                        return toShortArray(db.getObjectAbs(db.getOffset()), itemSize);<a name="line.1036"></a>
<span class="sourceLineNo">1037</span>                } else if (b instanceof IDataset) {<a name="line.1037"></a>
<span class="sourceLineNo">1038</span>                        IDataset db = (Dataset) b;<a name="line.1038"></a>
<span class="sourceLineNo">1039</span>                        if (db.getSize() != 1) {<a name="line.1039"></a>
<span class="sourceLineNo">1040</span>                                logger.error("Given dataset must have only one item");<a name="line.1040"></a>
<span class="sourceLineNo">1041</span>                                throw new IllegalArgumentException("Given dataset must have only one item");<a name="line.1041"></a>
<span class="sourceLineNo">1042</span>                        }<a name="line.1042"></a>
<span class="sourceLineNo">1043</span>                        return toShortArray(db.getObject(new int[db.getRank()]), itemSize);<a name="line.1043"></a>
<span class="sourceLineNo">1044</span>                }<a name="line.1044"></a>
<span class="sourceLineNo">1045</span><a name="line.1045"></a>
<span class="sourceLineNo">1046</span>                return result;<a name="line.1046"></a>
<span class="sourceLineNo">1047</span>        }<a name="line.1047"></a>
<span class="sourceLineNo">1048</span><a name="line.1048"></a>
<span class="sourceLineNo">1049</span>        public static byte[] toByteArray(final Object b, final int itemSize) {<a name="line.1049"></a>
<span class="sourceLineNo">1050</span>                byte[] result = null;<a name="line.1050"></a>
<span class="sourceLineNo">1051</span><a name="line.1051"></a>
<span class="sourceLineNo">1052</span>                if (b instanceof Number) {<a name="line.1052"></a>
<span class="sourceLineNo">1053</span>                        result = new byte[itemSize];<a name="line.1053"></a>
<span class="sourceLineNo">1054</span>                        final byte val = (byte) toLong(b);<a name="line.1054"></a>
<span class="sourceLineNo">1055</span>                        for (int i = 0; i &lt; itemSize; i++) {<a name="line.1055"></a>
<span class="sourceLineNo">1056</span>                                result[i] = val;<a name="line.1056"></a>
<span class="sourceLineNo">1057</span>                        }<a name="line.1057"></a>
<span class="sourceLineNo">1058</span>                } else if (b instanceof byte[]) {<a name="line.1058"></a>
<span class="sourceLineNo">1059</span>                        final byte[] old = (byte[]) b;<a name="line.1059"></a>
<span class="sourceLineNo">1060</span>                        result = old;<a name="line.1060"></a>
<span class="sourceLineNo">1061</span>                        final int ilen = result.length;<a name="line.1061"></a>
<span class="sourceLineNo">1062</span>                        if (ilen &lt; itemSize) {<a name="line.1062"></a>
<span class="sourceLineNo">1063</span>                                result = new byte[itemSize];<a name="line.1063"></a>
<span class="sourceLineNo">1064</span>                                for (int i = 0; i &lt; ilen; i++) {<a name="line.1064"></a>
<span class="sourceLineNo">1065</span>                                        result[i] = old[i];<a name="line.1065"></a>
<span class="sourceLineNo">1066</span>                                }<a name="line.1066"></a>
<span class="sourceLineNo">1067</span>                        }<a name="line.1067"></a>
<span class="sourceLineNo">1068</span>                } else if (b instanceof double[]) {<a name="line.1068"></a>
<span class="sourceLineNo">1069</span>                        final double[] old = (double[]) b;<a name="line.1069"></a>
<span class="sourceLineNo">1070</span>                        final int ilen = Math.min(itemSize, old.length);<a name="line.1070"></a>
<span class="sourceLineNo">1071</span>                        result = new byte[itemSize];<a name="line.1071"></a>
<span class="sourceLineNo">1072</span>                        for (int i = 0; i &lt; ilen; i++) {<a name="line.1072"></a>
<span class="sourceLineNo">1073</span>                                result[i] = (byte) toLong(old[i]);<a name="line.1073"></a>
<span class="sourceLineNo">1074</span>                        }<a name="line.1074"></a>
<span class="sourceLineNo">1075</span>                } else if (b instanceof List&lt;?&gt;) {<a name="line.1075"></a>
<span class="sourceLineNo">1076</span>                        result = new byte[itemSize];<a name="line.1076"></a>
<span class="sourceLineNo">1077</span>                        List&lt;?&gt; jl = (List&lt;?&gt;) b;<a name="line.1077"></a>
<span class="sourceLineNo">1078</span>                        int ilen = jl.size();<a name="line.1078"></a>
<span class="sourceLineNo">1079</span>                        if (ilen &gt; 0 &amp;&amp; !(jl.get(0) instanceof Number)) {<a name="line.1079"></a>
<span class="sourceLineNo">1080</span>                                logger.error("Given array was not of a numerical primitive type");<a name="line.1080"></a>
<span class="sourceLineNo">1081</span>                                throw new IllegalArgumentException("Given array was not of a numerical primitive type");<a name="line.1081"></a>
<span class="sourceLineNo">1082</span>                        }<a name="line.1082"></a>
<span class="sourceLineNo">1083</span>                        ilen = Math.min(itemSize, ilen);<a name="line.1083"></a>
<span class="sourceLineNo">1084</span>                        for (int i = 0; i &lt; ilen; i++) {<a name="line.1084"></a>
<span class="sourceLineNo">1085</span>                                result[i] = (byte) toLong(jl.get(i));<a name="line.1085"></a>
<span class="sourceLineNo">1086</span>                        }<a name="line.1086"></a>
<span class="sourceLineNo">1087</span>                } else if (b.getClass().isArray()) {<a name="line.1087"></a>
<span class="sourceLineNo">1088</span>                        result = new byte[itemSize];<a name="line.1088"></a>
<span class="sourceLineNo">1089</span>                        int ilen = Array.getLength(b);<a name="line.1089"></a>
<span class="sourceLineNo">1090</span>                        if (ilen &gt; 0 &amp;&amp; !(Array.get(b, 0) instanceof Number)) {<a name="line.1090"></a>
<span class="sourceLineNo">1091</span>                                logger.error("Given array was not of a numerical primitive type");<a name="line.1091"></a>
<span class="sourceLineNo">1092</span>                                throw new IllegalArgumentException("Given array was not of a numerical primitive type");<a name="line.1092"></a>
<span class="sourceLineNo">1093</span>                        }<a name="line.1093"></a>
<span class="sourceLineNo">1094</span>                        ilen = Math.min(itemSize, ilen);<a name="line.1094"></a>
<span class="sourceLineNo">1095</span>                        for (int i = 0; i &lt; ilen; i++) {<a name="line.1095"></a>
<span class="sourceLineNo">1096</span>                                result[i] = (byte) toLong(Array.get(b, i));<a name="line.1096"></a>
<span class="sourceLineNo">1097</span>                        }<a name="line.1097"></a>
<span class="sourceLineNo">1098</span>                } else if (b instanceof Complex) {<a name="line.1098"></a>
<span class="sourceLineNo">1099</span>                        if (itemSize &gt; 2) {<a name="line.1099"></a>
<span class="sourceLineNo">1100</span>                                logger.error("Complex number will not fit in compound dataset");<a name="line.1100"></a>
<span class="sourceLineNo">1101</span>                                throw new IllegalArgumentException("Complex number will not fit in compound dataset");<a name="line.1101"></a>
<span class="sourceLineNo">1102</span>                        }<a name="line.1102"></a>
<span class="sourceLineNo">1103</span>                        Complex cb = (Complex) b;<a name="line.1103"></a>
<span class="sourceLineNo">1104</span>                        switch (itemSize) {<a name="line.1104"></a>
<span class="sourceLineNo">1105</span>                        default:<a name="line.1105"></a>
<span class="sourceLineNo">1106</span>                        case 0:<a name="line.1106"></a>
<span class="sourceLineNo">1107</span>                                break;<a name="line.1107"></a>
<span class="sourceLineNo">1108</span>                        case 1:<a name="line.1108"></a>
<span class="sourceLineNo">1109</span>                                result = new byte[] {(byte) cb.getReal()};<a name="line.1109"></a>
<span class="sourceLineNo">1110</span>                                break;<a name="line.1110"></a>
<span class="sourceLineNo">1111</span>                        case 2:<a name="line.1111"></a>
<span class="sourceLineNo">1112</span>                                result = new byte[] {(byte) cb.getReal(), (byte) cb.getImaginary()};<a name="line.1112"></a>
<span class="sourceLineNo">1113</span>                                break;<a name="line.1113"></a>
<span class="sourceLineNo">1114</span>                        }<a name="line.1114"></a>
<span class="sourceLineNo">1115</span>                } else if (b instanceof Dataset) {<a name="line.1115"></a>
<span class="sourceLineNo">1116</span>                        Dataset db = (Dataset) b;<a name="line.1116"></a>
<span class="sourceLineNo">1117</span>                        if (db.getSize() != 1) {<a name="line.1117"></a>
<span class="sourceLineNo">1118</span>                                logger.error("Given dataset must have only one item");<a name="line.1118"></a>
<span class="sourceLineNo">1119</span>                                throw new IllegalArgumentException("Given dataset must have only one item");<a name="line.1119"></a>
<span class="sourceLineNo">1120</span>                        }<a name="line.1120"></a>
<span class="sourceLineNo">1121</span>                        return toByteArray(db.getObjectAbs(db.getOffset()), itemSize);<a name="line.1121"></a>
<span class="sourceLineNo">1122</span>                } else if (b instanceof IDataset) {<a name="line.1122"></a>
<span class="sourceLineNo">1123</span>                        IDataset db = (Dataset) b;<a name="line.1123"></a>
<span class="sourceLineNo">1124</span>                        if (db.getSize() != 1) {<a name="line.1124"></a>
<span class="sourceLineNo">1125</span>                                logger.error("Given dataset must have only one item");<a name="line.1125"></a>
<span class="sourceLineNo">1126</span>                                throw new IllegalArgumentException("Given dataset must have only one item");<a name="line.1126"></a>
<span class="sourceLineNo">1127</span>                        }<a name="line.1127"></a>
<span class="sourceLineNo">1128</span>                        return toByteArray(db.getObject(new int[db.getRank()]), itemSize);<a name="line.1128"></a>
<span class="sourceLineNo">1129</span>                }<a name="line.1129"></a>
<span class="sourceLineNo">1130</span><a name="line.1130"></a>
<span class="sourceLineNo">1131</span>                return result;<a name="line.1131"></a>
<span class="sourceLineNo">1132</span>        }<a name="line.1132"></a>
<span class="sourceLineNo">1133</span><a name="line.1133"></a>
<span class="sourceLineNo">1134</span>        public static Object fromDoublesToBiggestPrimitives(double[] x, int dtype) {<a name="line.1134"></a>
<span class="sourceLineNo">1135</span>                switch (dtype) {<a name="line.1135"></a>
<span class="sourceLineNo">1136</span>                case Dataset.BOOL:<a name="line.1136"></a>
<span class="sourceLineNo">1137</span>                case Dataset.INT8:<a name="line.1137"></a>
<span class="sourceLineNo">1138</span>                case Dataset.INT16:<a name="line.1138"></a>
<span class="sourceLineNo">1139</span>                case Dataset.INT32:<a name="line.1139"></a>
<span class="sourceLineNo">1140</span>                        int[] i32 = new int[x.length];<a name="line.1140"></a>
<span class="sourceLineNo">1141</span>                        for (int i = 0; i &lt; x.length; i++)<a name="line.1141"></a>
<span class="sourceLineNo">1142</span>                                i32[i] = (int) (long) x[i];<a name="line.1142"></a>
<span class="sourceLineNo">1143</span>                        return i32;<a name="line.1143"></a>
<span class="sourceLineNo">1144</span>                case Dataset.INT64:<a name="line.1144"></a>
<span class="sourceLineNo">1145</span>                        long[] i64 = new long[x.length];<a name="line.1145"></a>
<span class="sourceLineNo">1146</span>                        for (int i = 0; i &lt; x.length; i++)<a name="line.1146"></a>
<span class="sourceLineNo">1147</span>                                i64[i] = (long) x[i];<a name="line.1147"></a>
<span class="sourceLineNo">1148</span>                        return i64;<a name="line.1148"></a>
<span class="sourceLineNo">1149</span>                case Dataset.FLOAT32:<a name="line.1149"></a>
<span class="sourceLineNo">1150</span>                        float[] f32 = new float[x.length];<a name="line.1150"></a>
<span class="sourceLineNo">1151</span>                        for (int i = 0; i &lt; x.length; i++)<a name="line.1151"></a>
<span class="sourceLineNo">1152</span>                                f32[i] = (float) x[i];<a name="line.1152"></a>
<span class="sourceLineNo">1153</span>                        return f32;<a name="line.1153"></a>
<span class="sourceLineNo">1154</span>                case Dataset.FLOAT64:<a name="line.1154"></a>
<span class="sourceLineNo">1155</span>                        return x;<a name="line.1155"></a>
<span class="sourceLineNo">1156</span>                }<a name="line.1156"></a>
<span class="sourceLineNo">1157</span>                return null;<a name="line.1157"></a>
<span class="sourceLineNo">1158</span>        }<a name="line.1158"></a>
<span class="sourceLineNo">1159</span><a name="line.1159"></a>
<span class="sourceLineNo">1160</span>        /**<a name="line.1160"></a>
<span class="sourceLineNo">1161</span>         * @param x<a name="line.1161"></a>
<span class="sourceLineNo">1162</span>         * @param dtype<a name="line.1162"></a>
<span class="sourceLineNo">1163</span>         * @return biggest native primitive if integer (should test for 64bit?)<a name="line.1163"></a>
<span class="sourceLineNo">1164</span>         */<a name="line.1164"></a>
<span class="sourceLineNo">1165</span>        public static Number fromDoubleToBiggestNumber(double x, int dtype) {<a name="line.1165"></a>
<span class="sourceLineNo">1166</span>                switch (dtype) {<a name="line.1166"></a>
<span class="sourceLineNo">1167</span>                case Dataset.BOOL:<a name="line.1167"></a>
<span class="sourceLineNo">1168</span>                case Dataset.INT8:<a name="line.1168"></a>
<span class="sourceLineNo">1169</span>                case Dataset.INT16:<a name="line.1169"></a>
<span class="sourceLineNo">1170</span>                case Dataset.INT32:<a name="line.1170"></a>
<span class="sourceLineNo">1171</span>                        return Integer.valueOf((int) (long) x);<a name="line.1171"></a>
<span class="sourceLineNo">1172</span>                case Dataset.INT64:<a name="line.1172"></a>
<span class="sourceLineNo">1173</span>                        return Long.valueOf((long) x);<a name="line.1173"></a>
<span class="sourceLineNo">1174</span>                case Dataset.FLOAT32:<a name="line.1174"></a>
<span class="sourceLineNo">1175</span>                        return Float.valueOf((float) x);<a name="line.1175"></a>
<span class="sourceLineNo">1176</span>                case Dataset.FLOAT64:<a name="line.1176"></a>
<span class="sourceLineNo">1177</span>                        return Double.valueOf(x);<a name="line.1177"></a>
<span class="sourceLineNo">1178</span>                }<a name="line.1178"></a>
<span class="sourceLineNo">1179</span>                return null;<a name="line.1179"></a>
<span class="sourceLineNo">1180</span>        }<a name="line.1180"></a>
<span class="sourceLineNo">1181</span><a name="line.1181"></a>
<span class="sourceLineNo">1182</span>        /**<a name="line.1182"></a>
<span class="sourceLineNo">1183</span>         * @param b<a name="line.1183"></a>
<span class="sourceLineNo">1184</span>         * @return length of object<a name="line.1184"></a>
<span class="sourceLineNo">1185</span>         */<a name="line.1185"></a>
<span class="sourceLineNo">1186</span>        public static final int getLength(final Object b) {<a name="line.1186"></a>
<span class="sourceLineNo">1187</span>                if (b instanceof Number) {<a name="line.1187"></a>
<span class="sourceLineNo">1188</span>                        return 1;<a name="line.1188"></a>
<span class="sourceLineNo">1189</span>                } else if (b instanceof Complex) {<a name="line.1189"></a>
<span class="sourceLineNo">1190</span>                        return 1;<a name="line.1190"></a>
<span class="sourceLineNo">1191</span>                } else if (b instanceof List&lt;?&gt;) {<a name="line.1191"></a>
<span class="sourceLineNo">1192</span>                        List&lt;?&gt; jl = (List&lt;?&gt;) b;<a name="line.1192"></a>
<span class="sourceLineNo">1193</span>                        return jl.size();<a name="line.1193"></a>
<span class="sourceLineNo">1194</span>                } else if (b.getClass().isArray()) {<a name="line.1194"></a>
<span class="sourceLineNo">1195</span>                        return Array.getLength(b);<a name="line.1195"></a>
<span class="sourceLineNo">1196</span>                } else if (b instanceof IDataset) {<a name="line.1196"></a>
<span class="sourceLineNo">1197</span>                        IDataset db = (Dataset) b;<a name="line.1197"></a>
<span class="sourceLineNo">1198</span>                        return db.getSize();<a name="line.1198"></a>
<span class="sourceLineNo">1199</span>                }<a name="line.1199"></a>
<span class="sourceLineNo">1200</span><a name="line.1200"></a>
<span class="sourceLineNo">1201</span>                throw new IllegalArgumentException("Cannot find length as object not supported");<a name="line.1201"></a>
<span class="sourceLineNo">1202</span>        }<a name="line.1202"></a>
<span class="sourceLineNo">1203</span><a name="line.1203"></a>
<span class="sourceLineNo">1204</span>        /**<a name="line.1204"></a>
<span class="sourceLineNo">1205</span>         * @param dtype<a name="line.1205"></a>
<span class="sourceLineNo">1206</span>         * @return (boxed) class of constituent element<a name="line.1206"></a>
<span class="sourceLineNo">1207</span>         */<a name="line.1207"></a>
<span class="sourceLineNo">1208</span>        public static Class&lt;?&gt; getElementClass(final int dtype) {<a name="line.1208"></a>
<span class="sourceLineNo">1209</span>                switch (dtype) {<a name="line.1209"></a>
<span class="sourceLineNo">1210</span>                case Dataset.BOOL:<a name="line.1210"></a>
<span class="sourceLineNo">1211</span>                        return Boolean.class;<a name="line.1211"></a>
<span class="sourceLineNo">1212</span>                case Dataset.INT8:<a name="line.1212"></a>
<span class="sourceLineNo">1213</span>                case Dataset.ARRAYINT8:<a name="line.1213"></a>
<span class="sourceLineNo">1214</span>                        return Byte.class;<a name="line.1214"></a>
<span class="sourceLineNo">1215</span>                case Dataset.INT16:<a name="line.1215"></a>
<span class="sourceLineNo">1216</span>                case Dataset.ARRAYINT16:<a name="line.1216"></a>
<span class="sourceLineNo">1217</span>                case Dataset.RGB:<a name="line.1217"></a>
<span class="sourceLineNo">1218</span>                        return Short.class;<a name="line.1218"></a>
<span class="sourceLineNo">1219</span>                case Dataset.INT32:<a name="line.1219"></a>
<span class="sourceLineNo">1220</span>                case Dataset.ARRAYINT32:<a name="line.1220"></a>
<span class="sourceLineNo">1221</span>                        return Integer.class;<a name="line.1221"></a>
<span class="sourceLineNo">1222</span>                case Dataset.INT64:<a name="line.1222"></a>
<span class="sourceLineNo">1223</span>                case Dataset.ARRAYINT64:<a name="line.1223"></a>
<span class="sourceLineNo">1224</span>                        return Long.class;<a name="line.1224"></a>
<span class="sourceLineNo">1225</span>                case Dataset.FLOAT32:<a name="line.1225"></a>
<span class="sourceLineNo">1226</span>                case Dataset.ARRAYFLOAT32:<a name="line.1226"></a>
<span class="sourceLineNo">1227</span>                        return Float.class;<a name="line.1227"></a>
<span class="sourceLineNo">1228</span>                case Dataset.FLOAT64:<a name="line.1228"></a>
<span class="sourceLineNo">1229</span>                case Dataset.ARRAYFLOAT64:<a name="line.1229"></a>
<span class="sourceLineNo">1230</span>                        return Double.class;<a name="line.1230"></a>
<span class="sourceLineNo">1231</span>                case Dataset.COMPLEX64:<a name="line.1231"></a>
<span class="sourceLineNo">1232</span>                        return Float.class;<a name="line.1232"></a>
<span class="sourceLineNo">1233</span>                case Dataset.COMPLEX128:<a name="line.1233"></a>
<span class="sourceLineNo">1234</span>                        return Double.class;<a name="line.1234"></a>
<span class="sourceLineNo">1235</span>                case Dataset.STRING:<a name="line.1235"></a>
<span class="sourceLineNo">1236</span>                        return String.class;<a name="line.1236"></a>
<span class="sourceLineNo">1237</span>                case Dataset.DATE:<a name="line.1237"></a>
<span class="sourceLineNo">1238</span>                        return Date.class;<a name="line.1238"></a>
<span class="sourceLineNo">1239</span>                }<a name="line.1239"></a>
<span class="sourceLineNo">1240</span>                return Object.class;<a name="line.1240"></a>
<span class="sourceLineNo">1241</span>        }<a name="line.1241"></a>
<span class="sourceLineNo">1242</span><a name="line.1242"></a>
<span class="sourceLineNo">1243</span>}<a name="line.1243"></a>




























































</pre>
</div>
</body>
</html>
