<!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> *******************************************************************************<a name="line.2"></a>
<span class="sourceLineNo">003</span> * Copyright (c) 2011, 2016 Diamond Light Source Ltd.<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> * Contributors:<a name="line.9"></a>
<span class="sourceLineNo">010</span> *    Peter Chang - initial API and implementation and/or initial documentation<a name="line.10"></a>
<span class="sourceLineNo">011</span> *******************************************************************************/<a name="line.11"></a>
<span class="sourceLineNo">012</span><a name="line.12"></a>
<span class="sourceLineNo">013</span>// This is generated from CompoundDoubleDataset.java by fromcpddouble.py<a name="line.13"></a>
<span class="sourceLineNo">014</span><a name="line.14"></a>
<span class="sourceLineNo">015</span>package org.eclipse.january.dataset;<a name="line.15"></a>
<span class="sourceLineNo">016</span><a name="line.16"></a>
<span class="sourceLineNo">017</span>import java.util.Arrays;<a name="line.17"></a>
<span class="sourceLineNo">018</span><a name="line.18"></a>
<span class="sourceLineNo">019</span>import org.apache.commons.math3.complex.Complex;<a name="line.19"></a>
<span class="sourceLineNo">020</span><a name="line.20"></a>
<span class="sourceLineNo">021</span>/**<a name="line.21"></a>
<span class="sourceLineNo">022</span> * Extend compound dataset for byte values // PRIM_TYPE<a name="line.22"></a>
<span class="sourceLineNo">023</span> */<a name="line.23"></a>
<span class="sourceLineNo">024</span>public class CompoundByteDataset extends AbstractCompoundDataset {<a name="line.24"></a>
<span class="sourceLineNo">025</span>        // pin UID to base class<a name="line.25"></a>
<span class="sourceLineNo">026</span>        private static final long serialVersionUID = Dataset.serialVersionUID;<a name="line.26"></a>
<span class="sourceLineNo">027</span><a name="line.27"></a>
<span class="sourceLineNo">028</span>        protected byte[] data; // subclass alias // PRIM_TYPE<a name="line.28"></a>
<span class="sourceLineNo">029</span><a name="line.29"></a>
<span class="sourceLineNo">030</span>        @Override<a name="line.30"></a>
<span class="sourceLineNo">031</span>        protected void setData() {<a name="line.31"></a>
<span class="sourceLineNo">032</span>                data = (byte[]) odata; // PRIM_TYPE<a name="line.32"></a>
<span class="sourceLineNo">033</span>        }<a name="line.33"></a>
<span class="sourceLineNo">034</span><a name="line.34"></a>
<span class="sourceLineNo">035</span>        protected byte[] createArray(final int size) { // PRIM_TYPE<a name="line.35"></a>
<span class="sourceLineNo">036</span>                byte[] array = null; // PRIM_TYPE<a name="line.36"></a>
<span class="sourceLineNo">037</span><a name="line.37"></a>
<span class="sourceLineNo">038</span>                try {<a name="line.38"></a>
<span class="sourceLineNo">039</span>                        array = new byte[isize * size]; // PRIM_TYPE<a name="line.39"></a>
<span class="sourceLineNo">040</span>                } catch (OutOfMemoryError e) {<a name="line.40"></a>
<span class="sourceLineNo">041</span>                        logger.error("The size of the dataset ({}) that is being created is too large "<a name="line.41"></a>
<span class="sourceLineNo">042</span>                                        + "and there is not enough memory to hold it.", size);<a name="line.42"></a>
<span class="sourceLineNo">043</span>                        throw new OutOfMemoryError("The dimensions given are too large, and there is "<a name="line.43"></a>
<span class="sourceLineNo">044</span>                                        + "not enough memory available in the Java Virtual Machine");<a name="line.44"></a>
<span class="sourceLineNo">045</span>                }<a name="line.45"></a>
<span class="sourceLineNo">046</span>                return array;<a name="line.46"></a>
<span class="sourceLineNo">047</span>        }<a name="line.47"></a>
<span class="sourceLineNo">048</span><a name="line.48"></a>
<span class="sourceLineNo">049</span>        @Override<a name="line.49"></a>
<span class="sourceLineNo">050</span>        public int getDType() {<a name="line.50"></a>
<span class="sourceLineNo">051</span>                return Dataset.ARRAYINT8; // DATA_TYPE<a name="line.51"></a>
<span class="sourceLineNo">052</span>        }<a name="line.52"></a>
<span class="sourceLineNo">053</span><a name="line.53"></a>
<span class="sourceLineNo">054</span>        /**<a name="line.54"></a>
<span class="sourceLineNo">055</span>         * Create a null dataset<a name="line.55"></a>
<span class="sourceLineNo">056</span>         */<a name="line.56"></a>
<span class="sourceLineNo">057</span>        CompoundByteDataset() {<a name="line.57"></a>
<span class="sourceLineNo">058</span>        }<a name="line.58"></a>
<span class="sourceLineNo">059</span><a name="line.59"></a>
<span class="sourceLineNo">060</span>        /**<a name="line.60"></a>
<span class="sourceLineNo">061</span>         * Create a null dataset<a name="line.61"></a>
<span class="sourceLineNo">062</span>         * @param itemSize<a name="line.62"></a>
<span class="sourceLineNo">063</span>         */<a name="line.63"></a>
<span class="sourceLineNo">064</span>        CompoundByteDataset(final int itemSize) {<a name="line.64"></a>
<span class="sourceLineNo">065</span>                isize = itemSize;<a name="line.65"></a>
<span class="sourceLineNo">066</span>        }<a name="line.66"></a>
<span class="sourceLineNo">067</span><a name="line.67"></a>
<span class="sourceLineNo">068</span>        /**<a name="line.68"></a>
<span class="sourceLineNo">069</span>         * Create a zero-filled dataset of given item size and shape<a name="line.69"></a>
<span class="sourceLineNo">070</span>         * @param itemSize<a name="line.70"></a>
<span class="sourceLineNo">071</span>         * @param shape<a name="line.71"></a>
<span class="sourceLineNo">072</span>         */<a name="line.72"></a>
<span class="sourceLineNo">073</span>        CompoundByteDataset(final int itemSize, final int[] shape) {<a name="line.73"></a>
<span class="sourceLineNo">074</span>                isize = itemSize;<a name="line.74"></a>
<span class="sourceLineNo">075</span>                if (shape != null) {<a name="line.75"></a>
<span class="sourceLineNo">076</span>                        size = ShapeUtils.calcSize(shape);<a name="line.76"></a>
<span class="sourceLineNo">077</span>                        this.shape = shape.clone();<a name="line.77"></a>
<span class="sourceLineNo">078</span><a name="line.78"></a>
<span class="sourceLineNo">079</span>                        try {<a name="line.79"></a>
<span class="sourceLineNo">080</span>                                odata = data = createArray(size);<a name="line.80"></a>
<span class="sourceLineNo">081</span>                        } catch (Throwable t) {<a name="line.81"></a>
<span class="sourceLineNo">082</span>                                logger.error("Could not create a dataset of shape {}", Arrays.toString(shape), t);<a name="line.82"></a>
<span class="sourceLineNo">083</span>                                throw new IllegalArgumentException(t);<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>        }<a name="line.86"></a>
<span class="sourceLineNo">087</span><a name="line.87"></a>
<span class="sourceLineNo">088</span>        /**<a name="line.88"></a>
<span class="sourceLineNo">089</span>         * Copy a dataset<a name="line.89"></a>
<span class="sourceLineNo">090</span>         * @param dataset<a name="line.90"></a>
<span class="sourceLineNo">091</span>         */<a name="line.91"></a>
<span class="sourceLineNo">092</span>        CompoundByteDataset(final CompoundByteDataset dataset) {<a name="line.92"></a>
<span class="sourceLineNo">093</span>                isize = dataset.isize;<a name="line.93"></a>
<span class="sourceLineNo">094</span><a name="line.94"></a>
<span class="sourceLineNo">095</span>                copyToView(dataset, this, true, true);<a name="line.95"></a>
<span class="sourceLineNo">096</span>                try {<a name="line.96"></a>
<span class="sourceLineNo">097</span>                        if (dataset.stride == null) {<a name="line.97"></a>
<span class="sourceLineNo">098</span>                                if (dataset.data != null) {<a name="line.98"></a>
<span class="sourceLineNo">099</span>                                        odata = data = dataset.data.clone();<a name="line.99"></a>
<span class="sourceLineNo">100</span>                                }<a name="line.100"></a>
<span class="sourceLineNo">101</span>                        } else {<a name="line.101"></a>
<span class="sourceLineNo">102</span>                                offset = 0;<a name="line.102"></a>
<span class="sourceLineNo">103</span>                                stride = null;<a name="line.103"></a>
<span class="sourceLineNo">104</span>                                base = null;<a name="line.104"></a>
<span class="sourceLineNo">105</span>                                odata = data = createArray(size);<a name="line.105"></a>
<span class="sourceLineNo">106</span>                                IndexIterator iter = dataset.getIterator();<a name="line.106"></a>
<span class="sourceLineNo">107</span>                                for (int j = 0; iter.hasNext();) {<a name="line.107"></a>
<span class="sourceLineNo">108</span>                                        for (int i = 0; i &lt; isize; i++) {<a name="line.108"></a>
<span class="sourceLineNo">109</span>                                                data[j++] = dataset.data[iter.index + i];<a name="line.109"></a>
<span class="sourceLineNo">110</span>                                        }<a name="line.110"></a>
<span class="sourceLineNo">111</span>                                }<a name="line.111"></a>
<span class="sourceLineNo">112</span>                        }<a name="line.112"></a>
<span class="sourceLineNo">113</span>                } catch (Throwable t) {<a name="line.113"></a>
<span class="sourceLineNo">114</span>                        logger.error("Could not create a dataset of shape {}", Arrays.toString(shape), t);<a name="line.114"></a>
<span class="sourceLineNo">115</span>                        throw new IllegalArgumentException(t);<a name="line.115"></a>
<span class="sourceLineNo">116</span>                }<a name="line.116"></a>
<span class="sourceLineNo">117</span>        }<a name="line.117"></a>
<span class="sourceLineNo">118</span><a name="line.118"></a>
<span class="sourceLineNo">119</span>        /**<a name="line.119"></a>
<span class="sourceLineNo">120</span>         * Create a dataset using given dataset<a name="line.120"></a>
<span class="sourceLineNo">121</span>         * @param dataset<a name="line.121"></a>
<span class="sourceLineNo">122</span>         */<a name="line.122"></a>
<span class="sourceLineNo">123</span>        CompoundByteDataset(final CompoundDataset dataset) {<a name="line.123"></a>
<span class="sourceLineNo">124</span>                copyToView(dataset, this, true, false);<a name="line.124"></a>
<span class="sourceLineNo">125</span>                offset = 0;<a name="line.125"></a>
<span class="sourceLineNo">126</span>                stride = null;<a name="line.126"></a>
<span class="sourceLineNo">127</span>                base = null;<a name="line.127"></a>
<span class="sourceLineNo">128</span>                isize = dataset.getElementsPerItem();<a name="line.128"></a>
<span class="sourceLineNo">129</span>                try {<a name="line.129"></a>
<span class="sourceLineNo">130</span>                        odata = data = createArray(size);<a name="line.130"></a>
<span class="sourceLineNo">131</span>                } catch (Throwable t) {<a name="line.131"></a>
<span class="sourceLineNo">132</span>                        logger.error("Could not create a dataset of shape {}", Arrays.toString(shape), t);<a name="line.132"></a>
<span class="sourceLineNo">133</span>                        throw new IllegalArgumentException(t);<a name="line.133"></a>
<span class="sourceLineNo">134</span>                }<a name="line.134"></a>
<span class="sourceLineNo">135</span><a name="line.135"></a>
<span class="sourceLineNo">136</span>                IndexIterator iter = dataset.getIterator();<a name="line.136"></a>
<span class="sourceLineNo">137</span>                for (int j = 0; iter.hasNext();) {<a name="line.137"></a>
<span class="sourceLineNo">138</span>                        for (int i = 0; i &lt; isize; i++) {<a name="line.138"></a>
<span class="sourceLineNo">139</span>                                data[j++] = (byte) dataset.getElementLongAbs(iter.index + i); // GET_ELEMENT_WITH_CAST<a name="line.139"></a>
<span class="sourceLineNo">140</span>                        }<a name="line.140"></a>
<span class="sourceLineNo">141</span>                }<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>        /**<a name="line.144"></a>
<span class="sourceLineNo">145</span>         * Create a dataset using given data (elements are grouped together)<a name="line.145"></a>
<span class="sourceLineNo">146</span>         * @param itemSize<a name="line.146"></a>
<span class="sourceLineNo">147</span>         * @param data<a name="line.147"></a>
<span class="sourceLineNo">148</span>         * @param shape<a name="line.148"></a>
<span class="sourceLineNo">149</span>         *            (can be null to create 1D dataset)<a name="line.149"></a>
<span class="sourceLineNo">150</span>         */<a name="line.150"></a>
<span class="sourceLineNo">151</span>        CompoundByteDataset(final int itemSize, final byte[] data, int... shape) { // PRIM_TYPE<a name="line.151"></a>
<span class="sourceLineNo">152</span>                isize = itemSize;<a name="line.152"></a>
<span class="sourceLineNo">153</span>                if (data != null) {<a name="line.153"></a>
<span class="sourceLineNo">154</span>                        if (shape == null || (shape.length == 0 &amp;&amp; data.length &gt; isize)) {<a name="line.154"></a>
<span class="sourceLineNo">155</span>                                shape = new int[] { data.length / isize };<a name="line.155"></a>
<span class="sourceLineNo">156</span>                        }<a name="line.156"></a>
<span class="sourceLineNo">157</span>                        size = ShapeUtils.calcSize(shape);<a name="line.157"></a>
<span class="sourceLineNo">158</span>                        if (size * isize != data.length) {<a name="line.158"></a>
<span class="sourceLineNo">159</span>                                throw new IllegalArgumentException(String.format("Shape %s is not compatible with size of data array, %d",<a name="line.159"></a>
<span class="sourceLineNo">160</span>                                                Arrays.toString(shape), data.length / isize));<a name="line.160"></a>
<span class="sourceLineNo">161</span>                        }<a name="line.161"></a>
<span class="sourceLineNo">162</span>                        this.shape = size == 0 ? null : shape.clone();<a name="line.162"></a>
<span class="sourceLineNo">163</span><a name="line.163"></a>
<span class="sourceLineNo">164</span>                        odata = this.data = data;<a name="line.164"></a>
<span class="sourceLineNo">165</span>                }<a name="line.165"></a>
<span class="sourceLineNo">166</span>        }<a name="line.166"></a>
<span class="sourceLineNo">167</span><a name="line.167"></a>
<span class="sourceLineNo">168</span>        /**<a name="line.168"></a>
<span class="sourceLineNo">169</span>         * Create a dataset using given datasets<a name="line.169"></a>
<span class="sourceLineNo">170</span>         * @param datasets<a name="line.170"></a>
<span class="sourceLineNo">171</span>         */<a name="line.171"></a>
<span class="sourceLineNo">172</span>        CompoundByteDataset(final Dataset... datasets) {<a name="line.172"></a>
<span class="sourceLineNo">173</span>                if (datasets.length &lt; 1) {<a name="line.173"></a>
<span class="sourceLineNo">174</span>                        throw new IllegalArgumentException("Array of datasets must have length greater than zero");<a name="line.174"></a>
<span class="sourceLineNo">175</span>                }<a name="line.175"></a>
<span class="sourceLineNo">176</span><a name="line.176"></a>
<span class="sourceLineNo">177</span>                for (int i = 1; i &lt; datasets.length; i++) {<a name="line.177"></a>
<span class="sourceLineNo">178</span>                        datasets[0].checkCompatibility(datasets[i]);<a name="line.178"></a>
<span class="sourceLineNo">179</span>                }<a name="line.179"></a>
<span class="sourceLineNo">180</span><a name="line.180"></a>
<span class="sourceLineNo">181</span>                isize = datasets.length;<a name="line.181"></a>
<span class="sourceLineNo">182</span>                size = ShapeUtils.calcSize(datasets[0].getShapeRef());<a name="line.182"></a>
<span class="sourceLineNo">183</span>                shape = datasets[0].getShape();<a name="line.183"></a>
<span class="sourceLineNo">184</span><a name="line.184"></a>
<span class="sourceLineNo">185</span>                try {<a name="line.185"></a>
<span class="sourceLineNo">186</span>                        odata = data = createArray(size);<a name="line.186"></a>
<span class="sourceLineNo">187</span>                } catch (Throwable t) {<a name="line.187"></a>
<span class="sourceLineNo">188</span>                        logger.error("Could not create a dataset of shape {}", Arrays.toString(shape), t);<a name="line.188"></a>
<span class="sourceLineNo">189</span>                        throw new IllegalArgumentException(t);<a name="line.189"></a>
<span class="sourceLineNo">190</span>                }<a name="line.190"></a>
<span class="sourceLineNo">191</span><a name="line.191"></a>
<span class="sourceLineNo">192</span>                IndexIterator[] iters = new IndexIterator[isize];<a name="line.192"></a>
<span class="sourceLineNo">193</span>                for (int i = 0; i &lt; datasets.length; i++) {<a name="line.193"></a>
<span class="sourceLineNo">194</span>                        iters[i] = datasets[i].getIterator();<a name="line.194"></a>
<span class="sourceLineNo">195</span>                }<a name="line.195"></a>
<span class="sourceLineNo">196</span><a name="line.196"></a>
<span class="sourceLineNo">197</span>                for (int j = 0; iters[0].hasNext();) {<a name="line.197"></a>
<span class="sourceLineNo">198</span>                        data[j++] = (byte) datasets[0].getElementLongAbs(iters[0].index); // GET_ELEMENT_WITH_CAST<a name="line.198"></a>
<span class="sourceLineNo">199</span>                        for (int i = 1; i &lt; datasets.length; i++) {<a name="line.199"></a>
<span class="sourceLineNo">200</span>                                iters[i].hasNext();<a name="line.200"></a>
<span class="sourceLineNo">201</span>                                data[j++] = (byte) datasets[i].getElementLongAbs(iters[i].index); // GET_ELEMENT_WITH_CAST<a name="line.201"></a>
<span class="sourceLineNo">202</span>                        }<a name="line.202"></a>
<span class="sourceLineNo">203</span>                }<a name="line.203"></a>
<span class="sourceLineNo">204</span>        }<a name="line.204"></a>
<span class="sourceLineNo">205</span><a name="line.205"></a>
<span class="sourceLineNo">206</span>        /**<a name="line.206"></a>
<span class="sourceLineNo">207</span>         * Cast a dataset to this compound type. If repeat is set, the first element of each item in the given dataset is<a name="line.207"></a>
<span class="sourceLineNo">208</span>         * repeated across all elements of an item. Otherwise, each item comprises a truncated or zero-padded copy of<a name="line.208"></a>
<span class="sourceLineNo">209</span>         * elements from the given dataset.<a name="line.209"></a>
<span class="sourceLineNo">210</span>         * @param itemSize<a name="line.210"></a>
<span class="sourceLineNo">211</span>         * @param repeat<a name="line.211"></a>
<span class="sourceLineNo">212</span>         *            repeat first element<a name="line.212"></a>
<span class="sourceLineNo">213</span>         * @param dataset<a name="line.213"></a>
<span class="sourceLineNo">214</span>         */<a name="line.214"></a>
<span class="sourceLineNo">215</span>        CompoundByteDataset(final int itemSize, final boolean repeat, final Dataset dataset) {<a name="line.215"></a>
<span class="sourceLineNo">216</span>                isize = itemSize;<a name="line.216"></a>
<span class="sourceLineNo">217</span>                size = dataset.getSize();<a name="line.217"></a>
<span class="sourceLineNo">218</span>                shape = dataset.getShape();<a name="line.218"></a>
<span class="sourceLineNo">219</span>                name = new String(dataset.getName());<a name="line.219"></a>
<span class="sourceLineNo">220</span><a name="line.220"></a>
<span class="sourceLineNo">221</span>                try {<a name="line.221"></a>
<span class="sourceLineNo">222</span>                        odata = data = createArray(size);<a name="line.222"></a>
<span class="sourceLineNo">223</span>                } catch (Throwable t) {<a name="line.223"></a>
<span class="sourceLineNo">224</span>                        logger.error("Could not create a dataset of shape {}", Arrays.toString(shape), t);<a name="line.224"></a>
<span class="sourceLineNo">225</span>                        throw new IllegalArgumentException(t);<a name="line.225"></a>
<span class="sourceLineNo">226</span>                }<a name="line.226"></a>
<span class="sourceLineNo">227</span>                final int os = dataset.getElementsPerItem();<a name="line.227"></a>
<span class="sourceLineNo">228</span><a name="line.228"></a>
<span class="sourceLineNo">229</span>                IndexIterator iter = dataset.getIterator();<a name="line.229"></a>
<span class="sourceLineNo">230</span>                if (repeat) {<a name="line.230"></a>
<span class="sourceLineNo">231</span>                        int i = 0;<a name="line.231"></a>
<span class="sourceLineNo">232</span>                        while (iter.hasNext()) {<a name="line.232"></a>
<span class="sourceLineNo">233</span>                                final byte v = (byte) dataset.getElementLongAbs(iter.index); // PRIM_TYPE // GET_ELEMENT_WITH_CAST<a name="line.233"></a>
<span class="sourceLineNo">234</span>                                for (int k = 0; k &lt; isize; k++) {<a name="line.234"></a>
<span class="sourceLineNo">235</span>                                        data[i++] = v;<a name="line.235"></a>
<span class="sourceLineNo">236</span>                                }<a name="line.236"></a>
<span class="sourceLineNo">237</span>                        }<a name="line.237"></a>
<span class="sourceLineNo">238</span>                } else {<a name="line.238"></a>
<span class="sourceLineNo">239</span>                        final int kmax = Math.min(isize, os);<a name="line.239"></a>
<span class="sourceLineNo">240</span>                        int i = 0;<a name="line.240"></a>
<span class="sourceLineNo">241</span>                        while (iter.hasNext()) {<a name="line.241"></a>
<span class="sourceLineNo">242</span>                                for (int k = 0; k &lt; kmax; k++) {<a name="line.242"></a>
<span class="sourceLineNo">243</span>                                        data[i + k] = (byte) dataset.getElementLongAbs(iter.index + k); // GET_ELEMENT_WITH_CAST<a name="line.243"></a>
<span class="sourceLineNo">244</span>                                }<a name="line.244"></a>
<span class="sourceLineNo">245</span>                                i += isize;<a name="line.245"></a>
<span class="sourceLineNo">246</span>                        }<a name="line.246"></a>
<span class="sourceLineNo">247</span>                }<a name="line.247"></a>
<span class="sourceLineNo">248</span>        }<a name="line.248"></a>
<span class="sourceLineNo">249</span><a name="line.249"></a>
<span class="sourceLineNo">250</span>        @Override<a name="line.250"></a>
<span class="sourceLineNo">251</span>        public boolean equals(Object obj) {<a name="line.251"></a>
<span class="sourceLineNo">252</span>                if (!super.equals(obj)) {<a name="line.252"></a>
<span class="sourceLineNo">253</span>                        return false;<a name="line.253"></a>
<span class="sourceLineNo">254</span>                }<a name="line.254"></a>
<span class="sourceLineNo">255</span><a name="line.255"></a>
<span class="sourceLineNo">256</span>                if (getRank() == 0 &amp;&amp; !getClass().equals(obj.getClass())) // already true for zero-rank dataset<a name="line.256"></a>
<span class="sourceLineNo">257</span>                        return true;<a name="line.257"></a>
<span class="sourceLineNo">258</span><a name="line.258"></a>
<span class="sourceLineNo">259</span>                CompoundByteDataset other = (CompoundByteDataset) obj;<a name="line.259"></a>
<span class="sourceLineNo">260</span>                IndexIterator iter = getIterator();<a name="line.260"></a>
<span class="sourceLineNo">261</span>                IndexIterator oiter = other.getIterator();<a name="line.261"></a>
<span class="sourceLineNo">262</span>                while (iter.hasNext() &amp;&amp; oiter.hasNext()) {<a name="line.262"></a>
<span class="sourceLineNo">263</span>                        for (int j = 0; j &lt; isize; j++) {<a name="line.263"></a>
<span class="sourceLineNo">264</span>                                if (data[iter.index+j] != other.data[oiter.index+j])<a name="line.264"></a>
<span class="sourceLineNo">265</span>                                        return false;<a name="line.265"></a>
<span class="sourceLineNo">266</span>                        }<a name="line.266"></a>
<span class="sourceLineNo">267</span>                }<a name="line.267"></a>
<span class="sourceLineNo">268</span>                return true;<a name="line.268"></a>
<span class="sourceLineNo">269</span>        }<a name="line.269"></a>
<span class="sourceLineNo">270</span><a name="line.270"></a>
<span class="sourceLineNo">271</span>        @Override<a name="line.271"></a>
<span class="sourceLineNo">272</span>        public int hashCode() {<a name="line.272"></a>
<span class="sourceLineNo">273</span>                return super.hashCode();<a name="line.273"></a>
<span class="sourceLineNo">274</span>        }<a name="line.274"></a>
<span class="sourceLineNo">275</span><a name="line.275"></a>
<span class="sourceLineNo">276</span>        @Override<a name="line.276"></a>
<span class="sourceLineNo">277</span>        public CompoundByteDataset clone() {<a name="line.277"></a>
<span class="sourceLineNo">278</span>                return new CompoundByteDataset(this);<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>        /**<a name="line.281"></a>
<span class="sourceLineNo">282</span>         * Create a dataset from an object which could be a Java list, array (of arrays...) or Number. Ragged<a name="line.282"></a>
<span class="sourceLineNo">283</span>         * sequences or arrays are padded with zeros. The item size is the last dimension of the corresponding<a name="line.283"></a>
<span class="sourceLineNo">284</span>         * elemental dataset<a name="line.284"></a>
<span class="sourceLineNo">285</span>         *<a name="line.285"></a>
<span class="sourceLineNo">286</span>         * @param obj<a name="line.286"></a>
<span class="sourceLineNo">287</span>         * @return dataset with contents given by input<a name="line.287"></a>
<span class="sourceLineNo">288</span>         */<a name="line.288"></a>
<span class="sourceLineNo">289</span>        static CompoundByteDataset createFromObject(final Object obj) {<a name="line.289"></a>
<span class="sourceLineNo">290</span>                ByteDataset result = ByteDataset.createFromObject(obj); // CLASS_TYPE<a name="line.290"></a>
<span class="sourceLineNo">291</span>                return (CompoundByteDataset) DatasetUtils.createCompoundDatasetFromLastAxis(result, true);<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>        /**<a name="line.294"></a>
<span class="sourceLineNo">295</span>         * Create a 1D dataset from an object which could be a Java list, array (of arrays...) or Number. Ragged<a name="line.295"></a>
<span class="sourceLineNo">296</span>         * sequences or arrays are padded with zeros.<a name="line.296"></a>
<span class="sourceLineNo">297</span>         *<a name="line.297"></a>
<span class="sourceLineNo">298</span>         * @param itemSize<a name="line.298"></a>
<span class="sourceLineNo">299</span>         * @param obj<a name="line.299"></a>
<span class="sourceLineNo">300</span>         * @return dataset with contents given by input<a name="line.300"></a>
<span class="sourceLineNo">301</span>         */<a name="line.301"></a>
<span class="sourceLineNo">302</span>        public static CompoundByteDataset createFromObject(final int itemSize, final Object obj) {<a name="line.302"></a>
<span class="sourceLineNo">303</span>                ByteDataset result = ByteDataset.createFromObject(obj); // CLASS_TYPE<a name="line.303"></a>
<span class="sourceLineNo">304</span>                return new CompoundByteDataset(itemSize, result.getData(), null);<a name="line.304"></a>
<span class="sourceLineNo">305</span>        }<a name="line.305"></a>
<span class="sourceLineNo">306</span><a name="line.306"></a>
<span class="sourceLineNo">307</span>        /**<a name="line.307"></a>
<span class="sourceLineNo">308</span>         * @param stop<a name="line.308"></a>
<span class="sourceLineNo">309</span>         * @return a new 1D dataset, filled with values determined by parameters<a name="line.309"></a>
<span class="sourceLineNo">310</span>         */<a name="line.310"></a>
<span class="sourceLineNo">311</span>        static CompoundByteDataset createRange(final int itemSize, final double stop) {<a name="line.311"></a>
<span class="sourceLineNo">312</span>                return createRange(itemSize, 0., stop, 1.);<a name="line.312"></a>
<span class="sourceLineNo">313</span>        }<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>         * @param start<a name="line.316"></a>
<span class="sourceLineNo">317</span>         * @param stop<a name="line.317"></a>
<span class="sourceLineNo">318</span>         * @param step<a name="line.318"></a>
<span class="sourceLineNo">319</span>         * @return a new 1D dataset, filled with values determined by parameters<a name="line.319"></a>
<span class="sourceLineNo">320</span>         */<a name="line.320"></a>
<span class="sourceLineNo">321</span>        static CompoundByteDataset createRange(final int itemSize, final double start, final double stop,<a name="line.321"></a>
<span class="sourceLineNo">322</span>                        final double step) {<a name="line.322"></a>
<span class="sourceLineNo">323</span>                int size = calcSteps(start, stop, step);<a name="line.323"></a>
<span class="sourceLineNo">324</span>                CompoundByteDataset result = new CompoundByteDataset(itemSize, new int[] { size });<a name="line.324"></a>
<span class="sourceLineNo">325</span>                for (int i = 0; i &lt; size; i++) {<a name="line.325"></a>
<span class="sourceLineNo">326</span>                        result.data[i * result.isize] = (byte) (start + i * step); // PRIM_TYPE // ADD_CAST<a name="line.326"></a>
<span class="sourceLineNo">327</span>                }<a name="line.327"></a>
<span class="sourceLineNo">328</span>                return result;<a name="line.328"></a>
<span class="sourceLineNo">329</span>        }<a name="line.329"></a>
<span class="sourceLineNo">330</span><a name="line.330"></a>
<span class="sourceLineNo">331</span>        /**<a name="line.331"></a>
<span class="sourceLineNo">332</span>         * @param shape<a name="line.332"></a>
<span class="sourceLineNo">333</span>         * @return a dataset filled with ones<a name="line.333"></a>
<span class="sourceLineNo">334</span>         */<a name="line.334"></a>
<span class="sourceLineNo">335</span>        static CompoundByteDataset ones(final int itemSize, final int... shape) {<a name="line.335"></a>
<span class="sourceLineNo">336</span>                return new CompoundByteDataset(itemSize, shape).fill(1);<a name="line.336"></a>
<span class="sourceLineNo">337</span>        }<a name="line.337"></a>
<span class="sourceLineNo">338</span><a name="line.338"></a>
<span class="sourceLineNo">339</span>        /**<a name="line.339"></a>
<span class="sourceLineNo">340</span>         * Create a compound dataset using last dimension of given dataset<a name="line.340"></a>
<span class="sourceLineNo">341</span>         * @param a<a name="line.341"></a>
<span class="sourceLineNo">342</span>         * @param shareData<a name="line.342"></a>
<span class="sourceLineNo">343</span>         * @return compound dataset<a name="line.343"></a>
<span class="sourceLineNo">344</span>         */<a name="line.344"></a>
<span class="sourceLineNo">345</span>        public static CompoundByteDataset createCompoundDatasetWithLastDimension(final Dataset a, final boolean shareData) {<a name="line.345"></a>
<span class="sourceLineNo">346</span>                if (a.getElementsPerItem() != 1) {<a name="line.346"></a>
<span class="sourceLineNo">347</span>                        logger.error("Need a single-element dataset");<a name="line.347"></a>
<span class="sourceLineNo">348</span>                        throw new IllegalArgumentException("Need a single-element dataset");<a name="line.348"></a>
<span class="sourceLineNo">349</span>                }<a name="line.349"></a>
<span class="sourceLineNo">350</span>                if (a.getDType() != Dataset.INT8) { // DATA_TYPE<a name="line.350"></a>
<span class="sourceLineNo">351</span>                        logger.error("Dataset type must be byte"); // PRIM_TYPE<a name="line.351"></a>
<span class="sourceLineNo">352</span>                        throw new IllegalArgumentException("Dataset type must be byte"); // PRIM_TYPE<a name="line.352"></a>
<span class="sourceLineNo">353</span>                }<a name="line.353"></a>
<span class="sourceLineNo">354</span><a name="line.354"></a>
<span class="sourceLineNo">355</span>                final int[] shape = a.getShapeRef();<a name="line.355"></a>
<span class="sourceLineNo">356</span>                if (shape == null) {<a name="line.356"></a>
<span class="sourceLineNo">357</span>                        return new CompoundByteDataset(0);<a name="line.357"></a>
<span class="sourceLineNo">358</span>                }<a name="line.358"></a>
<span class="sourceLineNo">359</span><a name="line.359"></a>
<span class="sourceLineNo">360</span>                final int rank = shape.length - 1;<a name="line.360"></a>
<span class="sourceLineNo">361</span>                final int is = rank &lt; 0 ? 1 : shape[rank];<a name="line.361"></a>
<span class="sourceLineNo">362</span><a name="line.362"></a>
<span class="sourceLineNo">363</span>                CompoundByteDataset result = new CompoundByteDataset(is);<a name="line.363"></a>
<span class="sourceLineNo">364</span><a name="line.364"></a>
<span class="sourceLineNo">365</span>                result.shape = rank &gt; 0 ? Arrays.copyOf(shape, rank) : (rank &lt; 0 ? new int[] {} : new int[] {1});<a name="line.365"></a>
<span class="sourceLineNo">366</span>                result.size = ShapeUtils.calcSize(result.shape);<a name="line.366"></a>
<span class="sourceLineNo">367</span>                result.odata = shareData ? a.getBuffer() : a.clone().getBuffer();<a name="line.367"></a>
<span class="sourceLineNo">368</span>                result.setName(a.getName());<a name="line.368"></a>
<span class="sourceLineNo">369</span>                result.setData();<a name="line.369"></a>
<span class="sourceLineNo">370</span>                return result;<a name="line.370"></a>
<span class="sourceLineNo">371</span>        }<a name="line.371"></a>
<span class="sourceLineNo">372</span><a name="line.372"></a>
<span class="sourceLineNo">373</span>        @Override<a name="line.373"></a>
<span class="sourceLineNo">374</span>        public ByteDataset asNonCompoundDataset(final boolean shareData) { // CLASS_TYPE<a name="line.374"></a>
<span class="sourceLineNo">375</span>                ByteDataset result = new ByteDataset(); // CLASS_TYPE<a name="line.375"></a>
<span class="sourceLineNo">376</span>                final int is = getElementsPerItem();<a name="line.376"></a>
<span class="sourceLineNo">377</span>                final int rank = is == 1 ? shape.length : shape.length + 1;<a name="line.377"></a>
<span class="sourceLineNo">378</span>                final int[] nshape = Arrays.copyOf(shape, rank);<a name="line.378"></a>
<span class="sourceLineNo">379</span>                if (is != 1)<a name="line.379"></a>
<span class="sourceLineNo">380</span>                        nshape[rank-1] = is;<a name="line.380"></a>
<span class="sourceLineNo">381</span><a name="line.381"></a>
<span class="sourceLineNo">382</span>                result.shape = nshape;<a name="line.382"></a>
<span class="sourceLineNo">383</span>                result.size = ShapeUtils.calcSize(nshape);<a name="line.383"></a>
<span class="sourceLineNo">384</span>                result.odata = shareData ? data : data.clone();<a name="line.384"></a>
<span class="sourceLineNo">385</span>                result.setName(name);<a name="line.385"></a>
<span class="sourceLineNo">386</span>                result.setData();<a name="line.386"></a>
<span class="sourceLineNo">387</span>                return result;<a name="line.387"></a>
<span class="sourceLineNo">388</span>        }<a name="line.388"></a>
<span class="sourceLineNo">389</span><a name="line.389"></a>
<span class="sourceLineNo">390</span>        @Override<a name="line.390"></a>
<span class="sourceLineNo">391</span>        public CompoundByteDataset fill(final Object obj) {<a name="line.391"></a>
<span class="sourceLineNo">392</span>                setDirty();<a name="line.392"></a>
<span class="sourceLineNo">393</span>                byte[] vr = DTypeUtils.toByteArray(obj, isize); // PRIM_TYPE // CLASS_TYPE<a name="line.393"></a>
<span class="sourceLineNo">394</span>                IndexIterator iter = getIterator();<a name="line.394"></a>
<span class="sourceLineNo">395</span><a name="line.395"></a>
<span class="sourceLineNo">396</span>                while (iter.hasNext()) {<a name="line.396"></a>
<span class="sourceLineNo">397</span>                        for (int i = 0; i &lt; isize; i++) {<a name="line.397"></a>
<span class="sourceLineNo">398</span>                                data[iter.index + i] = vr[i]; // PRIM_TYPE<a name="line.398"></a>
<span class="sourceLineNo">399</span>                        }<a name="line.399"></a>
<span class="sourceLineNo">400</span>                }<a name="line.400"></a>
<span class="sourceLineNo">401</span><a name="line.401"></a>
<span class="sourceLineNo">402</span>                return this;<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>         * This is a typed version of {@link #getBuffer()}<a name="line.406"></a>
<span class="sourceLineNo">407</span>         * @return data buffer as linear array<a name="line.407"></a>
<span class="sourceLineNo">408</span>         */<a name="line.408"></a>
<span class="sourceLineNo">409</span>        public byte[] getData() { // PRIM_TYPE<a name="line.409"></a>
<span class="sourceLineNo">410</span>                return data;<a name="line.410"></a>
<span class="sourceLineNo">411</span>        }<a name="line.411"></a>
<span class="sourceLineNo">412</span><a name="line.412"></a>
<span class="sourceLineNo">413</span>        @Override<a name="line.413"></a>
<span class="sourceLineNo">414</span>        protected int getBufferLength() {<a name="line.414"></a>
<span class="sourceLineNo">415</span>                if (data == null)<a name="line.415"></a>
<span class="sourceLineNo">416</span>                        return 0;<a name="line.416"></a>
<span class="sourceLineNo">417</span>                return data.length;<a name="line.417"></a>
<span class="sourceLineNo">418</span>        }<a name="line.418"></a>
<span class="sourceLineNo">419</span><a name="line.419"></a>
<span class="sourceLineNo">420</span>        @Override<a name="line.420"></a>
<span class="sourceLineNo">421</span>        public CompoundByteDataset getView(boolean deepCopyMetadata) {<a name="line.421"></a>
<span class="sourceLineNo">422</span>                CompoundByteDataset view = new CompoundByteDataset(isize);<a name="line.422"></a>
<span class="sourceLineNo">423</span>                copyToView(this, view, true, deepCopyMetadata);<a name="line.423"></a>
<span class="sourceLineNo">424</span>                view.setData();<a name="line.424"></a>
<span class="sourceLineNo">425</span>                return view;<a name="line.425"></a>
<span class="sourceLineNo">426</span>        }<a name="line.426"></a>
<span class="sourceLineNo">427</span><a name="line.427"></a>
<span class="sourceLineNo">428</span>        /**<a name="line.428"></a>
<span class="sourceLineNo">429</span>         * Get values at absolute index in the internal array. This is an internal method with no checks so can be<a name="line.429"></a>
<span class="sourceLineNo">430</span>         * dangerous. Use with care or ideally with an iterator.<a name="line.430"></a>
<span class="sourceLineNo">431</span>         *<a name="line.431"></a>
<span class="sourceLineNo">432</span>         * @param index<a name="line.432"></a>
<span class="sourceLineNo">433</span>         *            absolute index<a name="line.433"></a>
<span class="sourceLineNo">434</span>         * @return values<a name="line.434"></a>
<span class="sourceLineNo">435</span>         */<a name="line.435"></a>
<span class="sourceLineNo">436</span>        public byte[] getAbs(final int index) { // PRIM_TYPE<a name="line.436"></a>
<span class="sourceLineNo">437</span>                byte[] result = new byte[isize]; // PRIM_TYPE<a name="line.437"></a>
<span class="sourceLineNo">438</span>                for (int i = 0; i &lt; isize; i++) {<a name="line.438"></a>
<span class="sourceLineNo">439</span>                        result[i] = data[index + i];<a name="line.439"></a>
<span class="sourceLineNo">440</span>                }<a name="line.440"></a>
<span class="sourceLineNo">441</span>                return result;<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>         * Get values at absolute index in the internal array. This is an internal method with no checks so can be<a name="line.445"></a>
<span class="sourceLineNo">446</span>         * dangerous. Use with care or ideally with an iterator.<a name="line.446"></a>
<span class="sourceLineNo">447</span>         *<a name="line.447"></a>
<span class="sourceLineNo">448</span>         * @param index<a name="line.448"></a>
<span class="sourceLineNo">449</span>         *            absolute index<a name="line.449"></a>
<span class="sourceLineNo">450</span>         * @param values<a name="line.450"></a>
<span class="sourceLineNo">451</span>         */<a name="line.451"></a>
<span class="sourceLineNo">452</span>        public void getAbs(final int index, final byte[] values) { // PRIM_TYPE<a name="line.452"></a>
<span class="sourceLineNo">453</span>                for (int i = 0; i &lt; isize; i++) {<a name="line.453"></a>
<span class="sourceLineNo">454</span>                        values[i] = data[index + i];<a name="line.454"></a>
<span class="sourceLineNo">455</span>                }<a name="line.455"></a>
<span class="sourceLineNo">456</span>        }<a name="line.456"></a>
<span class="sourceLineNo">457</span><a name="line.457"></a>
<span class="sourceLineNo">458</span>        @Override<a name="line.458"></a>
<span class="sourceLineNo">459</span>        public boolean getElementBooleanAbs(final int index) {<a name="line.459"></a>
<span class="sourceLineNo">460</span>                return data[index] != 0;<a name="line.460"></a>
<span class="sourceLineNo">461</span>        }<a name="line.461"></a>
<span class="sourceLineNo">462</span><a name="line.462"></a>
<span class="sourceLineNo">463</span>        @Override<a name="line.463"></a>
<span class="sourceLineNo">464</span>        public double getElementDoubleAbs(final int index) {<a name="line.464"></a>
<span class="sourceLineNo">465</span>                return data[index];<a name="line.465"></a>
<span class="sourceLineNo">466</span>        }<a name="line.466"></a>
<span class="sourceLineNo">467</span><a name="line.467"></a>
<span class="sourceLineNo">468</span>        @Override<a name="line.468"></a>
<span class="sourceLineNo">469</span>        public long getElementLongAbs(final int index) {<a name="line.469"></a>
<span class="sourceLineNo">470</span>                return data[index]; // OMIT_TOLONG_INT<a name="line.470"></a>
<span class="sourceLineNo">471</span>        }<a name="line.471"></a>
<span class="sourceLineNo">472</span><a name="line.472"></a>
<span class="sourceLineNo">473</span>        @Override<a name="line.473"></a>
<span class="sourceLineNo">474</span>        protected void setItemDirect(final int dindex, final int sindex, final Object src) {<a name="line.474"></a>
<span class="sourceLineNo">475</span>                setDirty();<a name="line.475"></a>
<span class="sourceLineNo">476</span>                byte[] dsrc = (byte[]) src; // PRIM_TYPE<a name="line.476"></a>
<span class="sourceLineNo">477</span>                for (int i = 0; i &lt; isize; i++) {<a name="line.477"></a>
<span class="sourceLineNo">478</span>                        data[dindex + i] = dsrc[sindex + i];<a name="line.478"></a>
<span class="sourceLineNo">479</span>                }<a name="line.479"></a>
<span class="sourceLineNo">480</span>        }<a name="line.480"></a>
<span class="sourceLineNo">481</span><a name="line.481"></a>
<span class="sourceLineNo">482</span>        /**<a name="line.482"></a>
<span class="sourceLineNo">483</span>         * Set values at absolute index in the internal array. This is an internal method with no checks so can be<a name="line.483"></a>
<span class="sourceLineNo">484</span>         * dangerous. Use with care or ideally with an iterator.<a name="line.484"></a>
<span class="sourceLineNo">485</span>         *<a name="line.485"></a>
<span class="sourceLineNo">486</span>         * @param index<a name="line.486"></a>
<span class="sourceLineNo">487</span>         *            absolute index<a name="line.487"></a>
<span class="sourceLineNo">488</span>         * @param val<a name="line.488"></a>
<span class="sourceLineNo">489</span>         *            new values<a name="line.489"></a>
<span class="sourceLineNo">490</span>         */<a name="line.490"></a>
<span class="sourceLineNo">491</span>        public void setAbs(final int index, final byte[] val) { // PRIM_TYPE<a name="line.491"></a>
<span class="sourceLineNo">492</span>                setDirty();<a name="line.492"></a>
<span class="sourceLineNo">493</span>                for (int i = 0; i &lt; isize; i++) {<a name="line.493"></a>
<span class="sourceLineNo">494</span>                        data[index + i] = val[i];<a name="line.494"></a>
<span class="sourceLineNo">495</span>                }<a name="line.495"></a>
<span class="sourceLineNo">496</span>        }<a name="line.496"></a>
<span class="sourceLineNo">497</span><a name="line.497"></a>
<span class="sourceLineNo">498</span>        /**<a name="line.498"></a>
<span class="sourceLineNo">499</span>         * Set element value at absolute index in the internal array. This is an internal method with no checks so can be<a name="line.499"></a>
<span class="sourceLineNo">500</span>         * dangerous. Use with care or ideally with an iterator.<a name="line.500"></a>
<span class="sourceLineNo">501</span>         *<a name="line.501"></a>
<span class="sourceLineNo">502</span>         * @param index<a name="line.502"></a>
<span class="sourceLineNo">503</span>         *            absolute index<a name="line.503"></a>
<span class="sourceLineNo">504</span>         * @param val<a name="line.504"></a>
<span class="sourceLineNo">505</span>         *            new value<a name="line.505"></a>
<span class="sourceLineNo">506</span>         */<a name="line.506"></a>
<span class="sourceLineNo">507</span>        public void setAbs(final int index, final byte val) { // PRIM_TYPE<a name="line.507"></a>
<span class="sourceLineNo">508</span>                setDirty();<a name="line.508"></a>
<span class="sourceLineNo">509</span>                data[index] = val;<a name="line.509"></a>
<span class="sourceLineNo">510</span>        }<a name="line.510"></a>
<span class="sourceLineNo">511</span><a name="line.511"></a>
<span class="sourceLineNo">512</span>        @Override<a name="line.512"></a>
<span class="sourceLineNo">513</span>        public Object getObject() {<a name="line.513"></a>
<span class="sourceLineNo">514</span>                return getByteArray(); // PRIM_TYPE<a name="line.514"></a>
<span class="sourceLineNo">515</span>        }<a name="line.515"></a>
<span class="sourceLineNo">516</span><a name="line.516"></a>
<span class="sourceLineNo">517</span>        @Override<a name="line.517"></a>
<span class="sourceLineNo">518</span>        public Object getObject(final int i) {<a name="line.518"></a>
<span class="sourceLineNo">519</span>                return getByteArray(i); // PRIM_TYPE<a name="line.519"></a>
<span class="sourceLineNo">520</span>        }<a name="line.520"></a>
<span class="sourceLineNo">521</span><a name="line.521"></a>
<span class="sourceLineNo">522</span>        @Override<a name="line.522"></a>
<span class="sourceLineNo">523</span>        public Object getObject(final int i, final int j) {<a name="line.523"></a>
<span class="sourceLineNo">524</span>                return getByteArray(i, j); // PRIM_TYPE<a name="line.524"></a>
<span class="sourceLineNo">525</span>        }<a name="line.525"></a>
<span class="sourceLineNo">526</span><a name="line.526"></a>
<span class="sourceLineNo">527</span>        @Override<a name="line.527"></a>
<span class="sourceLineNo">528</span>        public Object getObject(final int... pos) {<a name="line.528"></a>
<span class="sourceLineNo">529</span>                return getByteArray(pos); // PRIM_TYPE<a name="line.529"></a>
<span class="sourceLineNo">530</span>        }<a name="line.530"></a>
<span class="sourceLineNo">531</span><a name="line.531"></a>
<span class="sourceLineNo">532</span>        @Override<a name="line.532"></a>
<span class="sourceLineNo">533</span>        public byte[] getByteArray() {<a name="line.533"></a>
<span class="sourceLineNo">534</span>                byte[] result = new byte[isize];<a name="line.534"></a>
<span class="sourceLineNo">535</span>                int index = getFirst1DIndex();<a name="line.535"></a>
<span class="sourceLineNo">536</span>                for (int k = 0; k &lt; isize; k++) {<a name="line.536"></a>
<span class="sourceLineNo">537</span>                        result[k] = data[index + k]; // OMIT_UPCAST<a name="line.537"></a>
<span class="sourceLineNo">538</span>                }<a name="line.538"></a>
<span class="sourceLineNo">539</span>                return result;<a name="line.539"></a>
<span class="sourceLineNo">540</span>        }<a name="line.540"></a>
<span class="sourceLineNo">541</span><a name="line.541"></a>
<span class="sourceLineNo">542</span>        @Override<a name="line.542"></a>
<span class="sourceLineNo">543</span>        public byte[] getByteArray(final int i) {<a name="line.543"></a>
<span class="sourceLineNo">544</span>                byte[] result = new byte[isize];<a name="line.544"></a>
<span class="sourceLineNo">545</span>                int index = get1DIndex(i);<a name="line.545"></a>
<span class="sourceLineNo">546</span>                for (int k = 0; k &lt; isize; k++) {<a name="line.546"></a>
<span class="sourceLineNo">547</span>                        result[k] = data[index + k]; // OMIT_UPCAST<a name="line.547"></a>
<span class="sourceLineNo">548</span>                }<a name="line.548"></a>
<span class="sourceLineNo">549</span>                return result;<a name="line.549"></a>
<span class="sourceLineNo">550</span>        }<a name="line.550"></a>
<span class="sourceLineNo">551</span><a name="line.551"></a>
<span class="sourceLineNo">552</span>        @Override<a name="line.552"></a>
<span class="sourceLineNo">553</span>        public byte[] getByteArray(final int i, final int j) {<a name="line.553"></a>
<span class="sourceLineNo">554</span>                byte[] result = new byte[isize];<a name="line.554"></a>
<span class="sourceLineNo">555</span>                int index = get1DIndex(i, j);<a name="line.555"></a>
<span class="sourceLineNo">556</span>                for (int k = 0; k &lt; isize; k++) {<a name="line.556"></a>
<span class="sourceLineNo">557</span>                        result[k] = data[index + k]; // OMIT_UPCAST<a name="line.557"></a>
<span class="sourceLineNo">558</span>                }<a name="line.558"></a>
<span class="sourceLineNo">559</span>                return result;<a name="line.559"></a>
<span class="sourceLineNo">560</span>        }<a name="line.560"></a>
<span class="sourceLineNo">561</span><a name="line.561"></a>
<span class="sourceLineNo">562</span>        @Override<a name="line.562"></a>
<span class="sourceLineNo">563</span>        public byte[] getByteArray(final int... pos) {<a name="line.563"></a>
<span class="sourceLineNo">564</span>                byte[] result = new byte[isize];<a name="line.564"></a>
<span class="sourceLineNo">565</span>                int index = get1DIndex(pos);<a name="line.565"></a>
<span class="sourceLineNo">566</span>                for (int k = 0; k &lt; isize; k++) {<a name="line.566"></a>
<span class="sourceLineNo">567</span>                        result[k] = data[index + k]; // OMIT_UPCAST<a name="line.567"></a>
<span class="sourceLineNo">568</span>                }<a name="line.568"></a>
<span class="sourceLineNo">569</span>                return result;<a name="line.569"></a>
<span class="sourceLineNo">570</span>        }<a name="line.570"></a>
<span class="sourceLineNo">571</span><a name="line.571"></a>
<span class="sourceLineNo">572</span>        @Override<a name="line.572"></a>
<span class="sourceLineNo">573</span>        public short[] getShortArray() {<a name="line.573"></a>
<span class="sourceLineNo">574</span>                short[] result = new short[isize];<a name="line.574"></a>
<span class="sourceLineNo">575</span>                int index = getFirst1DIndex();<a name="line.575"></a>
<span class="sourceLineNo">576</span>                for (int k = 0; k &lt; isize; k++) {<a name="line.576"></a>
<span class="sourceLineNo">577</span>                        result[k] = data[index + k]; // OMIT_UPCAST<a name="line.577"></a>
<span class="sourceLineNo">578</span>                }<a name="line.578"></a>
<span class="sourceLineNo">579</span>                return result;<a name="line.579"></a>
<span class="sourceLineNo">580</span>        }<a name="line.580"></a>
<span class="sourceLineNo">581</span><a name="line.581"></a>
<span class="sourceLineNo">582</span>        @Override<a name="line.582"></a>
<span class="sourceLineNo">583</span>        public short[] getShortArray(final int i) {<a name="line.583"></a>
<span class="sourceLineNo">584</span>                short[] result = new short[isize];<a name="line.584"></a>
<span class="sourceLineNo">585</span>                int index = get1DIndex(i);<a name="line.585"></a>
<span class="sourceLineNo">586</span>                for (int k = 0; k &lt; isize; k++) {<a name="line.586"></a>
<span class="sourceLineNo">587</span>                        result[k] = data[index + k]; // OMIT_UPCAST<a name="line.587"></a>
<span class="sourceLineNo">588</span>                }<a name="line.588"></a>
<span class="sourceLineNo">589</span>                return result;<a name="line.589"></a>
<span class="sourceLineNo">590</span>        }<a name="line.590"></a>
<span class="sourceLineNo">591</span><a name="line.591"></a>
<span class="sourceLineNo">592</span>        @Override<a name="line.592"></a>
<span class="sourceLineNo">593</span>        public short[] getShortArray(final int i, final int j) {<a name="line.593"></a>
<span class="sourceLineNo">594</span>                short[] result = new short[isize];<a name="line.594"></a>
<span class="sourceLineNo">595</span>                int index = get1DIndex(i, j);<a name="line.595"></a>
<span class="sourceLineNo">596</span>                for (int k = 0; k &lt; isize; k++) {<a name="line.596"></a>
<span class="sourceLineNo">597</span>                        result[k] = data[index + k]; // OMIT_UPCAST<a name="line.597"></a>
<span class="sourceLineNo">598</span>                }<a name="line.598"></a>
<span class="sourceLineNo">599</span>                return result;<a name="line.599"></a>
<span class="sourceLineNo">600</span>        }<a name="line.600"></a>
<span class="sourceLineNo">601</span><a name="line.601"></a>
<span class="sourceLineNo">602</span>        @Override<a name="line.602"></a>
<span class="sourceLineNo">603</span>        public short[] getShortArray(final int... pos) {<a name="line.603"></a>
<span class="sourceLineNo">604</span>                short[] result = new short[isize];<a name="line.604"></a>
<span class="sourceLineNo">605</span>                int index = get1DIndex(pos);<a name="line.605"></a>
<span class="sourceLineNo">606</span>                for (int k = 0; k &lt; isize; k++) {<a name="line.606"></a>
<span class="sourceLineNo">607</span>                        result[k] = data[index + k]; // OMIT_UPCAST<a name="line.607"></a>
<span class="sourceLineNo">608</span>                }<a name="line.608"></a>
<span class="sourceLineNo">609</span>                return result;<a name="line.609"></a>
<span class="sourceLineNo">610</span>        }<a name="line.610"></a>
<span class="sourceLineNo">611</span><a name="line.611"></a>
<span class="sourceLineNo">612</span>        @Override<a name="line.612"></a>
<span class="sourceLineNo">613</span>        public int[] getIntArray() {<a name="line.613"></a>
<span class="sourceLineNo">614</span>                int[] result = new int[isize];<a name="line.614"></a>
<span class="sourceLineNo">615</span>                int index = getFirst1DIndex();<a name="line.615"></a>
<span class="sourceLineNo">616</span>                for (int k = 0; k &lt; isize; k++) {<a name="line.616"></a>
<span class="sourceLineNo">617</span>                        result[k] = data[index + k]; // OMIT_UPCAST<a name="line.617"></a>
<span class="sourceLineNo">618</span>                }<a name="line.618"></a>
<span class="sourceLineNo">619</span>                return result;<a name="line.619"></a>
<span class="sourceLineNo">620</span>        }<a name="line.620"></a>
<span class="sourceLineNo">621</span><a name="line.621"></a>
<span class="sourceLineNo">622</span>        @Override<a name="line.622"></a>
<span class="sourceLineNo">623</span>        public int[] getIntArray(final int i) {<a name="line.623"></a>
<span class="sourceLineNo">624</span>                int[] result = new int[isize];<a name="line.624"></a>
<span class="sourceLineNo">625</span>                int index = get1DIndex(i);<a name="line.625"></a>
<span class="sourceLineNo">626</span>                for (int k = 0; k &lt; isize; k++) {<a name="line.626"></a>
<span class="sourceLineNo">627</span>                        result[k] = data[index + k]; // OMIT_UPCAST<a name="line.627"></a>
<span class="sourceLineNo">628</span>                }<a name="line.628"></a>
<span class="sourceLineNo">629</span>                return result;<a name="line.629"></a>
<span class="sourceLineNo">630</span>        }<a name="line.630"></a>
<span class="sourceLineNo">631</span><a name="line.631"></a>
<span class="sourceLineNo">632</span>        @Override<a name="line.632"></a>
<span class="sourceLineNo">633</span>        public int[] getIntArray(final int i, final int j) {<a name="line.633"></a>
<span class="sourceLineNo">634</span>                int[] result = new int[isize];<a name="line.634"></a>
<span class="sourceLineNo">635</span>                int index = get1DIndex(i, j);<a name="line.635"></a>
<span class="sourceLineNo">636</span>                for (int k = 0; k &lt; isize; k++) {<a name="line.636"></a>
<span class="sourceLineNo">637</span>                        result[k] = data[index + k]; // OMIT_UPCAST<a name="line.637"></a>
<span class="sourceLineNo">638</span>                }<a name="line.638"></a>
<span class="sourceLineNo">639</span>                return result;<a name="line.639"></a>
<span class="sourceLineNo">640</span>        }<a name="line.640"></a>
<span class="sourceLineNo">641</span><a name="line.641"></a>
<span class="sourceLineNo">642</span>        @Override<a name="line.642"></a>
<span class="sourceLineNo">643</span>        public int[] getIntArray(final int... pos) {<a name="line.643"></a>
<span class="sourceLineNo">644</span>                int[] result = new int[isize];<a name="line.644"></a>
<span class="sourceLineNo">645</span>                int index = get1DIndex(pos);<a name="line.645"></a>
<span class="sourceLineNo">646</span>                for (int k = 0; k &lt; isize; k++) {<a name="line.646"></a>
<span class="sourceLineNo">647</span>                        result[k] = data[index + k]; // OMIT_UPCAST<a name="line.647"></a>
<span class="sourceLineNo">648</span>                }<a name="line.648"></a>
<span class="sourceLineNo">649</span>                return result;<a name="line.649"></a>
<span class="sourceLineNo">650</span>        }<a name="line.650"></a>
<span class="sourceLineNo">651</span><a name="line.651"></a>
<span class="sourceLineNo">652</span>        @Override<a name="line.652"></a>
<span class="sourceLineNo">653</span>        public long[] getLongArray() {<a name="line.653"></a>
<span class="sourceLineNo">654</span>                long[] result = new long[isize];<a name="line.654"></a>
<span class="sourceLineNo">655</span>                int index = getFirst1DIndex();<a name="line.655"></a>
<span class="sourceLineNo">656</span>                for (int k = 0; k &lt; isize; k++) {<a name="line.656"></a>
<span class="sourceLineNo">657</span>                        result[k] = data[index + k]; // OMIT_UPCAST<a name="line.657"></a>
<span class="sourceLineNo">658</span>                }<a name="line.658"></a>
<span class="sourceLineNo">659</span>                return result;<a name="line.659"></a>
<span class="sourceLineNo">660</span>        }<a name="line.660"></a>
<span class="sourceLineNo">661</span><a name="line.661"></a>
<span class="sourceLineNo">662</span>        @Override<a name="line.662"></a>
<span class="sourceLineNo">663</span>        public long[] getLongArray(final int i) {<a name="line.663"></a>
<span class="sourceLineNo">664</span>                long[] result = new long[isize];<a name="line.664"></a>
<span class="sourceLineNo">665</span>                int index = get1DIndex(i);<a name="line.665"></a>
<span class="sourceLineNo">666</span>                for (int k = 0; k &lt; isize; k++) {<a name="line.666"></a>
<span class="sourceLineNo">667</span>                        result[k] = data[index + k]; // OMIT_UPCAST<a name="line.667"></a>
<span class="sourceLineNo">668</span>                }<a name="line.668"></a>
<span class="sourceLineNo">669</span>                return result;<a name="line.669"></a>
<span class="sourceLineNo">670</span>        }<a name="line.670"></a>
<span class="sourceLineNo">671</span><a name="line.671"></a>
<span class="sourceLineNo">672</span>        @Override<a name="line.672"></a>
<span class="sourceLineNo">673</span>        public long[] getLongArray(final int i, final int j) {<a name="line.673"></a>
<span class="sourceLineNo">674</span>                long[] result = new long[isize];<a name="line.674"></a>
<span class="sourceLineNo">675</span>                int index = get1DIndex(i, j);<a name="line.675"></a>
<span class="sourceLineNo">676</span>                for (int k = 0; k &lt; isize; k++) {<a name="line.676"></a>
<span class="sourceLineNo">677</span>                        result[k] = data[index + k]; // OMIT_UPCAST<a name="line.677"></a>
<span class="sourceLineNo">678</span>                }<a name="line.678"></a>
<span class="sourceLineNo">679</span>                return result;<a name="line.679"></a>
<span class="sourceLineNo">680</span>        }<a name="line.680"></a>
<span class="sourceLineNo">681</span><a name="line.681"></a>
<span class="sourceLineNo">682</span>        @Override<a name="line.682"></a>
<span class="sourceLineNo">683</span>        public long[] getLongArray(final int... pos) {<a name="line.683"></a>
<span class="sourceLineNo">684</span>                long[] result = new long[isize];<a name="line.684"></a>
<span class="sourceLineNo">685</span>                int index = get1DIndex(pos);<a name="line.685"></a>
<span class="sourceLineNo">686</span>                for (int k = 0; k &lt; isize; k++) {<a name="line.686"></a>
<span class="sourceLineNo">687</span>                        result[k] = data[index + k]; // OMIT_UPCAST<a name="line.687"></a>
<span class="sourceLineNo">688</span>                }<a name="line.688"></a>
<span class="sourceLineNo">689</span>                return result;<a name="line.689"></a>
<span class="sourceLineNo">690</span>        }<a name="line.690"></a>
<span class="sourceLineNo">691</span><a name="line.691"></a>
<span class="sourceLineNo">692</span>        @Override<a name="line.692"></a>
<span class="sourceLineNo">693</span>        public float[] getFloatArray() {<a name="line.693"></a>
<span class="sourceLineNo">694</span>                float[] result = new float[isize];<a name="line.694"></a>
<span class="sourceLineNo">695</span>                int index = getFirst1DIndex();<a name="line.695"></a>
<span class="sourceLineNo">696</span>                for (int k = 0; k &lt; isize; k++) {<a name="line.696"></a>
<span class="sourceLineNo">697</span>                        result[k] = data[index + k]; // OMIT_REAL_CAST<a name="line.697"></a>
<span class="sourceLineNo">698</span>                }<a name="line.698"></a>
<span class="sourceLineNo">699</span>                return result;<a name="line.699"></a>
<span class="sourceLineNo">700</span>        }<a name="line.700"></a>
<span class="sourceLineNo">701</span><a name="line.701"></a>
<span class="sourceLineNo">702</span>        @Override<a name="line.702"></a>
<span class="sourceLineNo">703</span>        public float[] getFloatArray(final int i) {<a name="line.703"></a>
<span class="sourceLineNo">704</span>                float[] result = new float[isize];<a name="line.704"></a>
<span class="sourceLineNo">705</span>                int index = get1DIndex(i);<a name="line.705"></a>
<span class="sourceLineNo">706</span>                for (int k = 0; k &lt; isize; k++) {<a name="line.706"></a>
<span class="sourceLineNo">707</span>                        result[k] = data[index + k]; // OMIT_REAL_CAST<a name="line.707"></a>
<span class="sourceLineNo">708</span>                }<a name="line.708"></a>
<span class="sourceLineNo">709</span>                return result;<a name="line.709"></a>
<span class="sourceLineNo">710</span>        }<a name="line.710"></a>
<span class="sourceLineNo">711</span><a name="line.711"></a>
<span class="sourceLineNo">712</span>        @Override<a name="line.712"></a>
<span class="sourceLineNo">713</span>        public float[] getFloatArray(final int i, final int j) {<a name="line.713"></a>
<span class="sourceLineNo">714</span>                float[] result = new float[isize];<a name="line.714"></a>
<span class="sourceLineNo">715</span>                int index = get1DIndex(i, j);<a name="line.715"></a>
<span class="sourceLineNo">716</span>                for (int k = 0; k &lt; isize; k++) {<a name="line.716"></a>
<span class="sourceLineNo">717</span>                        result[k] = data[index + k]; // OMIT_REAL_CAST<a name="line.717"></a>
<span class="sourceLineNo">718</span>                }<a name="line.718"></a>
<span class="sourceLineNo">719</span>                return result;<a name="line.719"></a>
<span class="sourceLineNo">720</span>        }<a name="line.720"></a>
<span class="sourceLineNo">721</span><a name="line.721"></a>
<span class="sourceLineNo">722</span>        @Override<a name="line.722"></a>
<span class="sourceLineNo">723</span>        public float[] getFloatArray(final int... pos) {<a name="line.723"></a>
<span class="sourceLineNo">724</span>                float[] result = new float[isize];<a name="line.724"></a>
<span class="sourceLineNo">725</span>                int index = get1DIndex(pos);<a name="line.725"></a>
<span class="sourceLineNo">726</span>                for (int k = 0; k &lt; isize; k++) {<a name="line.726"></a>
<span class="sourceLineNo">727</span>                        result[k] = data[index + k]; // OMIT_REAL_CAST<a name="line.727"></a>
<span class="sourceLineNo">728</span>                }<a name="line.728"></a>
<span class="sourceLineNo">729</span>                return result;<a name="line.729"></a>
<span class="sourceLineNo">730</span>        }<a name="line.730"></a>
<span class="sourceLineNo">731</span><a name="line.731"></a>
<span class="sourceLineNo">732</span>        @Override<a name="line.732"></a>
<span class="sourceLineNo">733</span>        public double[] getDoubleArray() {<a name="line.733"></a>
<span class="sourceLineNo">734</span>                double[] result = new double[isize];<a name="line.734"></a>
<span class="sourceLineNo">735</span>                int index = getFirst1DIndex();<a name="line.735"></a>
<span class="sourceLineNo">736</span>                for (int k = 0; k &lt; isize; k++) {<a name="line.736"></a>
<span class="sourceLineNo">737</span>                        result[k] = data[index + k]; // OMIT_REAL_CAST<a name="line.737"></a>
<span class="sourceLineNo">738</span>                }<a name="line.738"></a>
<span class="sourceLineNo">739</span>                return result;<a name="line.739"></a>
<span class="sourceLineNo">740</span>        }<a name="line.740"></a>
<span class="sourceLineNo">741</span><a name="line.741"></a>
<span class="sourceLineNo">742</span>        @Override<a name="line.742"></a>
<span class="sourceLineNo">743</span>        public double[] getDoubleArray(final int i) {<a name="line.743"></a>
<span class="sourceLineNo">744</span>                double[] result = new double[isize];<a name="line.744"></a>
<span class="sourceLineNo">745</span>                int index = get1DIndex(i);<a name="line.745"></a>
<span class="sourceLineNo">746</span>                for (int k = 0; k &lt; isize; k++) {<a name="line.746"></a>
<span class="sourceLineNo">747</span>                        result[k] = data[index + k]; // OMIT_REAL_CAST<a name="line.747"></a>
<span class="sourceLineNo">748</span>                }<a name="line.748"></a>
<span class="sourceLineNo">749</span>                return result;<a name="line.749"></a>
<span class="sourceLineNo">750</span>        }<a name="line.750"></a>
<span class="sourceLineNo">751</span><a name="line.751"></a>
<span class="sourceLineNo">752</span>        @Override<a name="line.752"></a>
<span class="sourceLineNo">753</span>        public double[] getDoubleArray(final int i, final int j) {<a name="line.753"></a>
<span class="sourceLineNo">754</span>                double[] result = new double[isize];<a name="line.754"></a>
<span class="sourceLineNo">755</span>                int index = get1DIndex(i, j);<a name="line.755"></a>
<span class="sourceLineNo">756</span>                for (int k = 0; k &lt; isize; k++) {<a name="line.756"></a>
<span class="sourceLineNo">757</span>                        result[k] = data[index + k]; // OMIT_REAL_CAST<a name="line.757"></a>
<span class="sourceLineNo">758</span>                }<a name="line.758"></a>
<span class="sourceLineNo">759</span>                return result;<a name="line.759"></a>
<span class="sourceLineNo">760</span>        }<a name="line.760"></a>
<span class="sourceLineNo">761</span><a name="line.761"></a>
<span class="sourceLineNo">762</span>        @Override<a name="line.762"></a>
<span class="sourceLineNo">763</span>        public double[] getDoubleArray(final int... pos) {<a name="line.763"></a>
<span class="sourceLineNo">764</span>                double[] result = new double[isize];<a name="line.764"></a>
<span class="sourceLineNo">765</span>                int index = get1DIndex(pos);<a name="line.765"></a>
<span class="sourceLineNo">766</span>                for (int k = 0; k &lt; isize; k++) {<a name="line.766"></a>
<span class="sourceLineNo">767</span>                        result[k] = data[index + k]; // OMIT_REAL_CAST<a name="line.767"></a>
<span class="sourceLineNo">768</span>                }<a name="line.768"></a>
<span class="sourceLineNo">769</span>                return result;<a name="line.769"></a>
<span class="sourceLineNo">770</span>        }<a name="line.770"></a>
<span class="sourceLineNo">771</span><a name="line.771"></a>
<span class="sourceLineNo">772</span>        @Override<a name="line.772"></a>
<span class="sourceLineNo">773</span>        public void getDoubleArrayAbs(final int index, final double[] darray) {<a name="line.773"></a>
<span class="sourceLineNo">774</span>                for (int i = 0; i &lt; isize; i++) {<a name="line.774"></a>
<span class="sourceLineNo">775</span>                        darray[i] = data[index + i];<a name="line.775"></a>
<span class="sourceLineNo">776</span>                }<a name="line.776"></a>
<span class="sourceLineNo">777</span>        }<a name="line.777"></a>
<span class="sourceLineNo">778</span><a name="line.778"></a>
<span class="sourceLineNo">779</span>        @Override<a name="line.779"></a>
<span class="sourceLineNo">780</span>        public String getString() {<a name="line.780"></a>
<span class="sourceLineNo">781</span>                return getStringAbs(getFirst1DIndex());<a name="line.781"></a>
<span class="sourceLineNo">782</span>        }<a name="line.782"></a>
<span class="sourceLineNo">783</span><a name="line.783"></a>
<span class="sourceLineNo">784</span>        @Override<a name="line.784"></a>
<span class="sourceLineNo">785</span>        public String getString(final int i) {<a name="line.785"></a>
<span class="sourceLineNo">786</span>                return getStringAbs(get1DIndex(i));<a name="line.786"></a>
<span class="sourceLineNo">787</span>        }<a name="line.787"></a>
<span class="sourceLineNo">788</span><a name="line.788"></a>
<span class="sourceLineNo">789</span>        @Override<a name="line.789"></a>
<span class="sourceLineNo">790</span>        public String getString(final int i, final int j) {<a name="line.790"></a>
<span class="sourceLineNo">791</span>                return getStringAbs(get1DIndex(i, j));<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>        @Override<a name="line.794"></a>
<span class="sourceLineNo">795</span>        public String getString(final int... pos) {<a name="line.795"></a>
<span class="sourceLineNo">796</span>                return getStringAbs(get1DIndex(pos));<a name="line.796"></a>
<span class="sourceLineNo">797</span>        }<a name="line.797"></a>
<span class="sourceLineNo">798</span><a name="line.798"></a>
<span class="sourceLineNo">799</span>        @Override<a name="line.799"></a>
<span class="sourceLineNo">800</span>        protected double getFirstValue() {<a name="line.800"></a>
<span class="sourceLineNo">801</span>                return data[getFirst1DIndex()];<a name="line.801"></a>
<span class="sourceLineNo">802</span>        }<a name="line.802"></a>
<span class="sourceLineNo">803</span><a name="line.803"></a>
<span class="sourceLineNo">804</span>        @Override<a name="line.804"></a>
<span class="sourceLineNo">805</span>        protected double getFirstValue(int i) {<a name="line.805"></a>
<span class="sourceLineNo">806</span>                return data[get1DIndex(i)];<a name="line.806"></a>
<span class="sourceLineNo">807</span>        }<a name="line.807"></a>
<span class="sourceLineNo">808</span><a name="line.808"></a>
<span class="sourceLineNo">809</span>        @Override<a name="line.809"></a>
<span class="sourceLineNo">810</span>        protected double getFirstValue(int i, int j) {<a name="line.810"></a>
<span class="sourceLineNo">811</span>                return data[get1DIndex(i, j)];<a name="line.811"></a>
<span class="sourceLineNo">812</span>        }<a name="line.812"></a>
<span class="sourceLineNo">813</span><a name="line.813"></a>
<span class="sourceLineNo">814</span>        @Override<a name="line.814"></a>
<span class="sourceLineNo">815</span>        protected double getFirstValue(final int... pos) {<a name="line.815"></a>
<span class="sourceLineNo">816</span>                return data[get1DIndex(pos)];<a name="line.816"></a>
<span class="sourceLineNo">817</span>        }<a name="line.817"></a>
<span class="sourceLineNo">818</span><a name="line.818"></a>
<span class="sourceLineNo">819</span>        @Override<a name="line.819"></a>
<span class="sourceLineNo">820</span>        public Object getObjectAbs(final int index) {<a name="line.820"></a>
<span class="sourceLineNo">821</span>                byte[] result = new byte[isize]; // PRIM_TYPE<a name="line.821"></a>
<span class="sourceLineNo">822</span>                for (int i = 0; i &lt; isize; i++) {<a name="line.822"></a>
<span class="sourceLineNo">823</span>                        result[i] = data[index + i];<a name="line.823"></a>
<span class="sourceLineNo">824</span>                }<a name="line.824"></a>
<span class="sourceLineNo">825</span>                return result;<a name="line.825"></a>
<span class="sourceLineNo">826</span>        }<a name="line.826"></a>
<span class="sourceLineNo">827</span><a name="line.827"></a>
<span class="sourceLineNo">828</span>        @Override<a name="line.828"></a>
<span class="sourceLineNo">829</span>        public String getStringAbs(final int index) {<a name="line.829"></a>
<span class="sourceLineNo">830</span>                StringBuilder s = new StringBuilder();<a name="line.830"></a>
<span class="sourceLineNo">831</span>                s.append('(');<a name="line.831"></a>
<span class="sourceLineNo">832</span>                s.append(stringFormat == null ? String.format("%d", data[index]) : // FORMAT_STRING<a name="line.832"></a>
<span class="sourceLineNo">833</span>                        stringFormat.format(data[index]));<a name="line.833"></a>
<span class="sourceLineNo">834</span>                for (int i = 1; i &lt; isize; i++) {<a name="line.834"></a>
<span class="sourceLineNo">835</span>                        s.append(' ');<a name="line.835"></a>
<span class="sourceLineNo">836</span>                        s.append(stringFormat == null ? String.format("%d", data[index + i]) : // FORMAT_STRING<a name="line.836"></a>
<span class="sourceLineNo">837</span>                                stringFormat.format(data[index + i]));<a name="line.837"></a>
<span class="sourceLineNo">838</span>                }<a name="line.838"></a>
<span class="sourceLineNo">839</span>                s.append(')');<a name="line.839"></a>
<span class="sourceLineNo">840</span>                return s.toString();<a name="line.840"></a>
<span class="sourceLineNo">841</span>        }<a name="line.841"></a>
<span class="sourceLineNo">842</span><a name="line.842"></a>
<span class="sourceLineNo">843</span>        @Override<a name="line.843"></a>
<span class="sourceLineNo">844</span>        public void setObjectAbs(final int index, final Object obj) {<a name="line.844"></a>
<span class="sourceLineNo">845</span>                byte[] oa = DTypeUtils.toByteArray(obj, isize); // PRIM_TYPE // CLASS_TYPE<a name="line.845"></a>
<span class="sourceLineNo">846</span>                setAbs(index, oa);<a name="line.846"></a>
<span class="sourceLineNo">847</span>        }<a name="line.847"></a>
<span class="sourceLineNo">848</span><a name="line.848"></a>
<span class="sourceLineNo">849</span>        @Override<a name="line.849"></a>
<span class="sourceLineNo">850</span>        public void set(final Object obj) {<a name="line.850"></a>
<span class="sourceLineNo">851</span>                setItem(DTypeUtils.toByteArray(obj, isize)); // CLASS_TYPE<a name="line.851"></a>
<span class="sourceLineNo">852</span>        }<a name="line.852"></a>
<span class="sourceLineNo">853</span><a name="line.853"></a>
<span class="sourceLineNo">854</span>        @Override<a name="line.854"></a>
<span class="sourceLineNo">855</span>        public void set(final Object obj, final int i) {<a name="line.855"></a>
<span class="sourceLineNo">856</span>                setItem(DTypeUtils.toByteArray(obj, isize), i); // CLASS_TYPE<a name="line.856"></a>
<span class="sourceLineNo">857</span>        }<a name="line.857"></a>
<span class="sourceLineNo">858</span><a name="line.858"></a>
<span class="sourceLineNo">859</span>        @Override<a name="line.859"></a>
<span class="sourceLineNo">860</span>        public void set(final Object obj, final int i, final int j) {<a name="line.860"></a>
<span class="sourceLineNo">861</span>                setItem(DTypeUtils.toByteArray(obj, isize), i, j); // CLASS_TYPE<a name="line.861"></a>
<span class="sourceLineNo">862</span>        }<a name="line.862"></a>
<span class="sourceLineNo">863</span><a name="line.863"></a>
<span class="sourceLineNo">864</span>        @Override<a name="line.864"></a>
<span class="sourceLineNo">865</span>        public void set(final Object obj, int... pos) {<a name="line.865"></a>
<span class="sourceLineNo">866</span>                if (pos == null || (pos.length == 0 &amp;&amp; shape.length &gt; 0)) {<a name="line.866"></a>
<span class="sourceLineNo">867</span>                        pos = new int[shape.length];<a name="line.867"></a>
<span class="sourceLineNo">868</span>                }<a name="line.868"></a>
<span class="sourceLineNo">869</span><a name="line.869"></a>
<span class="sourceLineNo">870</span>                setItem(DTypeUtils.toByteArray(obj, isize), pos); // CLASS_TYPE<a name="line.870"></a>
<span class="sourceLineNo">871</span>        }<a name="line.871"></a>
<span class="sourceLineNo">872</span><a name="line.872"></a>
<span class="sourceLineNo">873</span>        /**<a name="line.873"></a>
<span class="sourceLineNo">874</span>         * Set values at first position. The dataset must not be null<a name="line.874"></a>
<span class="sourceLineNo">875</span>         *<a name="line.875"></a>
<span class="sourceLineNo">876</span>         * @param d<a name="line.876"></a>
<span class="sourceLineNo">877</span>         * @since 2.0<a name="line.877"></a>
<span class="sourceLineNo">878</span>         */<a name="line.878"></a>
<span class="sourceLineNo">879</span>        public void setItem(final byte[] d) { // PRIM_TYPE<a name="line.879"></a>
<span class="sourceLineNo">880</span>                if (d.length &gt; isize) {<a name="line.880"></a>
<span class="sourceLineNo">881</span>                        throw new IllegalArgumentException("Array is larger than number of elements in an item");<a name="line.881"></a>
<span class="sourceLineNo">882</span>                }<a name="line.882"></a>
<span class="sourceLineNo">883</span>                setAbs(getFirst1DIndex(), d);<a name="line.883"></a>
<span class="sourceLineNo">884</span>        }<a name="line.884"></a>
<span class="sourceLineNo">885</span><a name="line.885"></a>
<span class="sourceLineNo">886</span>        /**<a name="line.886"></a>
<span class="sourceLineNo">887</span>         * Set values at given position. The dataset must be 1D<a name="line.887"></a>
<span class="sourceLineNo">888</span>         *<a name="line.888"></a>
<span class="sourceLineNo">889</span>         * @param d<a name="line.889"></a>
<span class="sourceLineNo">890</span>         * @param i<a name="line.890"></a>
<span class="sourceLineNo">891</span>         */<a name="line.891"></a>
<span class="sourceLineNo">892</span>        public void setItem(final byte[] d, final int i) { // PRIM_TYPE<a name="line.892"></a>
<span class="sourceLineNo">893</span>                if (d.length &gt; isize) {<a name="line.893"></a>
<span class="sourceLineNo">894</span>                        throw new IllegalArgumentException("Array is larger than number of elements in an item");<a name="line.894"></a>
<span class="sourceLineNo">895</span>                }<a name="line.895"></a>
<span class="sourceLineNo">896</span>                setAbs(get1DIndex(i), d);<a name="line.896"></a>
<span class="sourceLineNo">897</span>        }<a name="line.897"></a>
<span class="sourceLineNo">898</span><a name="line.898"></a>
<span class="sourceLineNo">899</span>        /**<a name="line.899"></a>
<span class="sourceLineNo">900</span>         * Set values at given position. The dataset must be 1D<a name="line.900"></a>
<span class="sourceLineNo">901</span>         *<a name="line.901"></a>
<span class="sourceLineNo">902</span>         * @param d<a name="line.902"></a>
<span class="sourceLineNo">903</span>         * @param i<a name="line.903"></a>
<span class="sourceLineNo">904</span>         * @param j<a name="line.904"></a>
<span class="sourceLineNo">905</span>         */<a name="line.905"></a>
<span class="sourceLineNo">906</span>        public void setItem(final byte[] d, final int i, final int j) { // PRIM_TYPE<a name="line.906"></a>
<span class="sourceLineNo">907</span>                if (d.length &gt; isize) {<a name="line.907"></a>
<span class="sourceLineNo">908</span>                        throw new IllegalArgumentException("Array is larger than number of elements in an item");<a name="line.908"></a>
<span class="sourceLineNo">909</span>                }<a name="line.909"></a>
<span class="sourceLineNo">910</span>                setAbs(get1DIndex(i, j), d);<a name="line.910"></a>
<span class="sourceLineNo">911</span>        }<a name="line.911"></a>
<span class="sourceLineNo">912</span><a name="line.912"></a>
<span class="sourceLineNo">913</span>        /**<a name="line.913"></a>
<span class="sourceLineNo">914</span>         * Set values at given position<a name="line.914"></a>
<span class="sourceLineNo">915</span>         *<a name="line.915"></a>
<span class="sourceLineNo">916</span>         * @param d<a name="line.916"></a>
<span class="sourceLineNo">917</span>         * @param pos<a name="line.917"></a>
<span class="sourceLineNo">918</span>         */<a name="line.918"></a>
<span class="sourceLineNo">919</span>        public void setItem(final byte[] d, final int... pos) { // PRIM_TYPE<a name="line.919"></a>
<span class="sourceLineNo">920</span>                if (d.length &gt; isize) {<a name="line.920"></a>
<span class="sourceLineNo">921</span>                        throw new IllegalArgumentException("Array is larger than number of elements in an item");<a name="line.921"></a>
<span class="sourceLineNo">922</span>                }<a name="line.922"></a>
<span class="sourceLineNo">923</span>                setAbs(get1DIndex(pos), d);<a name="line.923"></a>
<span class="sourceLineNo">924</span>        }<a name="line.924"></a>
<span class="sourceLineNo">925</span><a name="line.925"></a>
<span class="sourceLineNo">926</span>        private void setDoubleArrayAbs(final int index, final double[] d) {<a name="line.926"></a>
<span class="sourceLineNo">927</span>                for (int i = 0; i &lt; isize; i++)<a name="line.927"></a>
<span class="sourceLineNo">928</span>                        data[index + i] = (byte) d[i]; // ADD_CAST<a name="line.928"></a>
<span class="sourceLineNo">929</span>        }<a name="line.929"></a>
<span class="sourceLineNo">930</span><a name="line.930"></a>
<span class="sourceLineNo">931</span>        @Override<a name="line.931"></a>
<span class="sourceLineNo">932</span>        public void resize(int... newShape) {<a name="line.932"></a>
<span class="sourceLineNo">933</span>                setDirty();<a name="line.933"></a>
<span class="sourceLineNo">934</span>                IndexIterator iter = getIterator();<a name="line.934"></a>
<span class="sourceLineNo">935</span>                int nsize = ShapeUtils.calcSize(newShape);<a name="line.935"></a>
<span class="sourceLineNo">936</span>                byte[] ndata; // PRIM_TYPE<a name="line.936"></a>
<span class="sourceLineNo">937</span>                try {<a name="line.937"></a>
<span class="sourceLineNo">938</span>                        ndata = createArray(nsize);<a name="line.938"></a>
<span class="sourceLineNo">939</span>                } catch (Throwable t) {<a name="line.939"></a>
<span class="sourceLineNo">940</span>                        logger.error("Could not create a dataset of shape {}", Arrays.toString(shape), t);<a name="line.940"></a>
<span class="sourceLineNo">941</span>                        throw new IllegalArgumentException(t);<a name="line.941"></a>
<span class="sourceLineNo">942</span>                }<a name="line.942"></a>
<span class="sourceLineNo">943</span><a name="line.943"></a>
<span class="sourceLineNo">944</span>                int i = 0;<a name="line.944"></a>
<span class="sourceLineNo">945</span>                while (iter.hasNext() &amp;&amp; i &lt; nsize) {<a name="line.945"></a>
<span class="sourceLineNo">946</span>                        for (int j = 0; j &lt; isize; j++) {<a name="line.946"></a>
<span class="sourceLineNo">947</span>                                ndata[i++] = data[iter.index + j];<a name="line.947"></a>
<span class="sourceLineNo">948</span>                        }<a name="line.948"></a>
<span class="sourceLineNo">949</span>                }<a name="line.949"></a>
<span class="sourceLineNo">950</span><a name="line.950"></a>
<span class="sourceLineNo">951</span>                odata = data = ndata;<a name="line.951"></a>
<span class="sourceLineNo">952</span>                size = nsize;<a name="line.952"></a>
<span class="sourceLineNo">953</span>                shape = newShape;<a name="line.953"></a>
<span class="sourceLineNo">954</span>                stride = null;<a name="line.954"></a>
<span class="sourceLineNo">955</span>                offset = 0;<a name="line.955"></a>
<span class="sourceLineNo">956</span>                base = null;<a name="line.956"></a>
<span class="sourceLineNo">957</span>        }<a name="line.957"></a>
<span class="sourceLineNo">958</span><a name="line.958"></a>
<span class="sourceLineNo">959</span>        @Override<a name="line.959"></a>
<span class="sourceLineNo">960</span>        public CompoundByteDataset getSlice(final SliceIterator siter) {<a name="line.960"></a>
<span class="sourceLineNo">961</span>                CompoundByteDataset result = new CompoundByteDataset(isize, siter.getShape());<a name="line.961"></a>
<span class="sourceLineNo">962</span>                byte[] rdata = result.data; // PRIM_TYPE<a name="line.962"></a>
<span class="sourceLineNo">963</span>                IndexIterator riter = result.getIterator();<a name="line.963"></a>
<span class="sourceLineNo">964</span><a name="line.964"></a>
<span class="sourceLineNo">965</span>                while (siter.hasNext() &amp;&amp; riter.hasNext()) {<a name="line.965"></a>
<span class="sourceLineNo">966</span>                        for (int i = 0; i &lt; isize; i++)<a name="line.966"></a>
<span class="sourceLineNo">967</span>                                rdata[riter.index + i] = data[siter.index + i];<a name="line.967"></a>
<span class="sourceLineNo">968</span>                }<a name="line.968"></a>
<span class="sourceLineNo">969</span><a name="line.969"></a>
<span class="sourceLineNo">970</span>                result.setName(name + BLOCK_OPEN + Slice.createString(siter.shape, siter.start, siter.stop, siter.step) + BLOCK_CLOSE);<a name="line.970"></a>
<span class="sourceLineNo">971</span>                return result;<a name="line.971"></a>
<span class="sourceLineNo">972</span>        }<a name="line.972"></a>
<span class="sourceLineNo">973</span><a name="line.973"></a>
<span class="sourceLineNo">974</span>        @Override<a name="line.974"></a>
<span class="sourceLineNo">975</span>        public ByteDataset getElementsView(int element) { // CLASS_TYPE<a name="line.975"></a>
<span class="sourceLineNo">976</span>                if (element &lt; 0)<a name="line.976"></a>
<span class="sourceLineNo">977</span>                        element += isize;<a name="line.977"></a>
<span class="sourceLineNo">978</span>                if (element &lt; 0 || element &gt; isize) {<a name="line.978"></a>
<span class="sourceLineNo">979</span>                        throw new IllegalArgumentException(String.format("Invalid choice of element: %d/%d", element, isize));<a name="line.979"></a>
<span class="sourceLineNo">980</span>                }<a name="line.980"></a>
<span class="sourceLineNo">981</span><a name="line.981"></a>
<span class="sourceLineNo">982</span>                ByteDataset view = new ByteDataset(shape); // CLASS_TYPE<a name="line.982"></a>
<span class="sourceLineNo">983</span><a name="line.983"></a>
<span class="sourceLineNo">984</span>                copyToView(this, view, true, true);<a name="line.984"></a>
<span class="sourceLineNo">985</span>                view.setData();<a name="line.985"></a>
<span class="sourceLineNo">986</span>                if (view.stride == null) {<a name="line.986"></a>
<span class="sourceLineNo">987</span>                        int[] offset = new int[1];<a name="line.987"></a>
<span class="sourceLineNo">988</span>                        view.stride = createStrides(this, offset);<a name="line.988"></a>
<span class="sourceLineNo">989</span>                        view.offset = offset[0] + element;<a name="line.989"></a>
<span class="sourceLineNo">990</span>                        view.base = base == null ? this : base;<a name="line.990"></a>
<span class="sourceLineNo">991</span>                } else {<a name="line.991"></a>
<span class="sourceLineNo">992</span>                        view.offset += element;<a name="line.992"></a>
<span class="sourceLineNo">993</span>                }<a name="line.993"></a>
<span class="sourceLineNo">994</span><a name="line.994"></a>
<span class="sourceLineNo">995</span>                return view;<a name="line.995"></a>
<span class="sourceLineNo">996</span>        }<a name="line.996"></a>
<span class="sourceLineNo">997</span><a name="line.997"></a>
<span class="sourceLineNo">998</span>        @Override<a name="line.998"></a>
<span class="sourceLineNo">999</span>        public ByteDataset getElements(int element) { // CLASS_TYPE<a name="line.999"></a>
<span class="sourceLineNo">1000</span>                final ByteDataset elements = new ByteDataset(shape); // CLASS_TYPE<a name="line.1000"></a>
<span class="sourceLineNo">1001</span><a name="line.1001"></a>
<span class="sourceLineNo">1002</span>                copyElements(elements, element);<a name="line.1002"></a>
<span class="sourceLineNo">1003</span>                return elements;<a name="line.1003"></a>
<span class="sourceLineNo">1004</span>        }<a name="line.1004"></a>
<span class="sourceLineNo">1005</span><a name="line.1005"></a>
<span class="sourceLineNo">1006</span>        @Override<a name="line.1006"></a>
<span class="sourceLineNo">1007</span>        public void copyElements(Dataset destination, int element) {<a name="line.1007"></a>
<span class="sourceLineNo">1008</span>                if (element &lt; 0)<a name="line.1008"></a>
<span class="sourceLineNo">1009</span>                        element += isize;<a name="line.1009"></a>
<span class="sourceLineNo">1010</span>                if (element &lt; 0 || element &gt; isize) {<a name="line.1010"></a>
<span class="sourceLineNo">1011</span>                        throw new IllegalArgumentException(String.format("Invalid choice of element: %d/%d", element, isize));<a name="line.1011"></a>
<span class="sourceLineNo">1012</span>                }<a name="line.1012"></a>
<span class="sourceLineNo">1013</span>                if (getElementClass() != destination.getElementClass()) {<a name="line.1013"></a>
<span class="sourceLineNo">1014</span>                        throw new IllegalArgumentException("Element class of destination does not match this dataset");<a name="line.1014"></a>
<span class="sourceLineNo">1015</span>                }<a name="line.1015"></a>
<span class="sourceLineNo">1016</span><a name="line.1016"></a>
<span class="sourceLineNo">1017</span>                final IndexIterator it = getIterator(element);<a name="line.1017"></a>
<span class="sourceLineNo">1018</span>                final byte[] elements = ((ByteDataset) destination).data; // CLASS_TYPE // PRIM_TYPE<a name="line.1018"></a>
<span class="sourceLineNo">1019</span>                destination.setDirty();<a name="line.1019"></a>
<span class="sourceLineNo">1020</span><a name="line.1020"></a>
<span class="sourceLineNo">1021</span>                int n = 0;<a name="line.1021"></a>
<span class="sourceLineNo">1022</span>                while (it.hasNext()) {<a name="line.1022"></a>
<span class="sourceLineNo">1023</span>                        elements[n] = data[it.index];<a name="line.1023"></a>
<span class="sourceLineNo">1024</span>                        n++;<a name="line.1024"></a>
<span class="sourceLineNo">1025</span>                }<a name="line.1025"></a>
<span class="sourceLineNo">1026</span>        }<a name="line.1026"></a>
<span class="sourceLineNo">1027</span><a name="line.1027"></a>
<span class="sourceLineNo">1028</span>        @Override<a name="line.1028"></a>
<span class="sourceLineNo">1029</span>        public void setElements(Dataset source, int element) {<a name="line.1029"></a>
<span class="sourceLineNo">1030</span>                setDirty();<a name="line.1030"></a>
<span class="sourceLineNo">1031</span>                if (element &lt; 0)<a name="line.1031"></a>
<span class="sourceLineNo">1032</span>                        element += isize;<a name="line.1032"></a>
<span class="sourceLineNo">1033</span>                if (element &lt; 0 || element &gt; isize) {<a name="line.1033"></a>
<span class="sourceLineNo">1034</span>                        throw new IllegalArgumentException(String.format("Invalid choice of element: %d/%d", element, isize));<a name="line.1034"></a>
<span class="sourceLineNo">1035</span>                }<a name="line.1035"></a>
<span class="sourceLineNo">1036</span>                if (getElementClass() != source.getElementClass()) {<a name="line.1036"></a>
<span class="sourceLineNo">1037</span>                        throw new IllegalArgumentException("Element class of destination does not match this dataset");<a name="line.1037"></a>
<span class="sourceLineNo">1038</span>                }<a name="line.1038"></a>
<span class="sourceLineNo">1039</span><a name="line.1039"></a>
<span class="sourceLineNo">1040</span>                final IndexIterator it = getIterator(element);<a name="line.1040"></a>
<span class="sourceLineNo">1041</span>                final byte[] elements = ((ByteDataset) source).data; // CLASS_TYPE // PRIM_TYPE<a name="line.1041"></a>
<span class="sourceLineNo">1042</span><a name="line.1042"></a>
<span class="sourceLineNo">1043</span>                int n = 0;<a name="line.1043"></a>
<span class="sourceLineNo">1044</span>                while (it.hasNext()) {<a name="line.1044"></a>
<span class="sourceLineNo">1045</span>                        data[it.index] = elements[n];<a name="line.1045"></a>
<span class="sourceLineNo">1046</span>                        n++;<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><a name="line.1049"></a>
<span class="sourceLineNo">1050</span>        @Override<a name="line.1050"></a>
<span class="sourceLineNo">1051</span>        public void fillDataset(Dataset result, IndexIterator iter) {<a name="line.1051"></a>
<span class="sourceLineNo">1052</span>                IndexIterator riter = result.getIterator();<a name="line.1052"></a>
<span class="sourceLineNo">1053</span>                result.setDirty();<a name="line.1053"></a>
<span class="sourceLineNo">1054</span><a name="line.1054"></a>
<span class="sourceLineNo">1055</span>                byte[] rdata = ((CompoundByteDataset) result).data; // PRIM_TYPE<a name="line.1055"></a>
<span class="sourceLineNo">1056</span><a name="line.1056"></a>
<span class="sourceLineNo">1057</span>                while (riter.hasNext() &amp;&amp; iter.hasNext()) {<a name="line.1057"></a>
<span class="sourceLineNo">1058</span>                        for (int i = 0; i &lt; isize; i++) {<a name="line.1058"></a>
<span class="sourceLineNo">1059</span>                                rdata[riter.index + i] = data[iter.index + i];<a name="line.1059"></a>
<span class="sourceLineNo">1060</span>                        }<a name="line.1060"></a>
<span class="sourceLineNo">1061</span>                }<a name="line.1061"></a>
<span class="sourceLineNo">1062</span>        }<a name="line.1062"></a>
<span class="sourceLineNo">1063</span><a name="line.1063"></a>
<span class="sourceLineNo">1064</span>        @Override<a name="line.1064"></a>
<span class="sourceLineNo">1065</span>        public CompoundByteDataset setByBoolean(final Object o, Dataset selection) {<a name="line.1065"></a>
<span class="sourceLineNo">1066</span>                setDirty();<a name="line.1066"></a>
<span class="sourceLineNo">1067</span>                if (o instanceof Dataset) {<a name="line.1067"></a>
<span class="sourceLineNo">1068</span>                        Dataset ds = (Dataset) o;<a name="line.1068"></a>
<span class="sourceLineNo">1069</span>                        final int length = ((Number) selection.sum()).intValue();<a name="line.1069"></a>
<span class="sourceLineNo">1070</span>                        if (length != ds.getSize()) {<a name="line.1070"></a>
<span class="sourceLineNo">1071</span>                                throw new IllegalArgumentException(<a name="line.1071"></a>
<span class="sourceLineNo">1072</span>                                                "Number of true items in selection does not match number of items in dataset");<a name="line.1072"></a>
<span class="sourceLineNo">1073</span>                        }<a name="line.1073"></a>
<span class="sourceLineNo">1074</span><a name="line.1074"></a>
<span class="sourceLineNo">1075</span>                        IndexIterator iter = ds.getIterator();<a name="line.1075"></a>
<span class="sourceLineNo">1076</span>                        BooleanIterator biter = getBooleanIterator(selection);<a name="line.1076"></a>
<span class="sourceLineNo">1077</span><a name="line.1077"></a>
<span class="sourceLineNo">1078</span>                        if (ds instanceof AbstractCompoundDataset) {<a name="line.1078"></a>
<span class="sourceLineNo">1079</span>                                if (isize != ds.getElementsPerItem()) {<a name="line.1079"></a>
<span class="sourceLineNo">1080</span>                                        throw new IllegalArgumentException("Input dataset is not compatible with slice");<a name="line.1080"></a>
<span class="sourceLineNo">1081</span>                                }<a name="line.1081"></a>
<span class="sourceLineNo">1082</span><a name="line.1082"></a>
<span class="sourceLineNo">1083</span>                                while (biter.hasNext() &amp;&amp; iter.hasNext()) {<a name="line.1083"></a>
<span class="sourceLineNo">1084</span>                                        for (int i = 0; i &lt; isize; i++) {<a name="line.1084"></a>
<span class="sourceLineNo">1085</span>                                                data[biter.index + i] = (byte) ds.getElementLongAbs(iter.index + i); // GET_ELEMENT_WITH_CAST<a name="line.1085"></a>
<span class="sourceLineNo">1086</span>                                        }<a name="line.1086"></a>
<span class="sourceLineNo">1087</span>                                }<a name="line.1087"></a>
<span class="sourceLineNo">1088</span>                        } else {<a name="line.1088"></a>
<span class="sourceLineNo">1089</span>                                while (biter.hasNext() &amp;&amp; iter.hasNext()) {<a name="line.1089"></a>
<span class="sourceLineNo">1090</span>                                        data[biter.index] = (byte) ds.getElementLongAbs(iter.index); // GET_ELEMENT_WITH_CAST<a name="line.1090"></a>
<span class="sourceLineNo">1091</span>                                        for (int i = 1; i &lt; isize; i++) {<a name="line.1091"></a>
<span class="sourceLineNo">1092</span>                                                data[biter.index + i] = 0;<a name="line.1092"></a>
<span class="sourceLineNo">1093</span>                                        }<a name="line.1093"></a>
<span class="sourceLineNo">1094</span>                                }<a name="line.1094"></a>
<span class="sourceLineNo">1095</span>                        }<a name="line.1095"></a>
<span class="sourceLineNo">1096</span>                } else {<a name="line.1096"></a>
<span class="sourceLineNo">1097</span>                        try {<a name="line.1097"></a>
<span class="sourceLineNo">1098</span>                                final byte[] vr = DTypeUtils.toByteArray(o, isize); // PRIM_TYPE // CLASS_TYPE<a name="line.1098"></a>
<span class="sourceLineNo">1099</span><a name="line.1099"></a>
<span class="sourceLineNo">1100</span>                                final BooleanIterator biter = getBooleanIterator(selection);<a name="line.1100"></a>
<span class="sourceLineNo">1101</span><a name="line.1101"></a>
<span class="sourceLineNo">1102</span>                                while (biter.hasNext()) {<a name="line.1102"></a>
<span class="sourceLineNo">1103</span>                                        for (int i = 0; i &lt; isize; i++) {<a name="line.1103"></a>
<span class="sourceLineNo">1104</span>                                                data[biter.index + i] = vr[i];<a name="line.1104"></a>
<span class="sourceLineNo">1105</span>                                        }<a name="line.1105"></a>
<span class="sourceLineNo">1106</span>                                }<a name="line.1106"></a>
<span class="sourceLineNo">1107</span>                        } catch (IllegalArgumentException e) {<a name="line.1107"></a>
<span class="sourceLineNo">1108</span>                                throw new IllegalArgumentException("Object for setting is not a dataset or number");<a name="line.1108"></a>
<span class="sourceLineNo">1109</span>                        }<a name="line.1109"></a>
<span class="sourceLineNo">1110</span>                }<a name="line.1110"></a>
<span class="sourceLineNo">1111</span>                return this;<a name="line.1111"></a>
<span class="sourceLineNo">1112</span>        }<a name="line.1112"></a>
<span class="sourceLineNo">1113</span><a name="line.1113"></a>
<span class="sourceLineNo">1114</span>        @Override<a name="line.1114"></a>
<span class="sourceLineNo">1115</span>        public CompoundByteDataset setBy1DIndex(final Object o, Dataset index) {<a name="line.1115"></a>
<span class="sourceLineNo">1116</span>                setDirty();<a name="line.1116"></a>
<span class="sourceLineNo">1117</span>                if (o instanceof Dataset) {<a name="line.1117"></a>
<span class="sourceLineNo">1118</span>                        Dataset ds = (Dataset) o;<a name="line.1118"></a>
<span class="sourceLineNo">1119</span>                        if (index.getSize() != ds.getSize()) {<a name="line.1119"></a>
<span class="sourceLineNo">1120</span>                                throw new IllegalArgumentException(<a name="line.1120"></a>
<span class="sourceLineNo">1121</span>                                                "Number of items in selection does not match number of items in dataset");<a name="line.1121"></a>
<span class="sourceLineNo">1122</span>                        }<a name="line.1122"></a>
<span class="sourceLineNo">1123</span><a name="line.1123"></a>
<span class="sourceLineNo">1124</span>                        IndexIterator oiter = ds.getIterator();<a name="line.1124"></a>
<span class="sourceLineNo">1125</span>                        final IntegerIterator iter = new IntegerIterator(index, size, isize);<a name="line.1125"></a>
<span class="sourceLineNo">1126</span><a name="line.1126"></a>
<span class="sourceLineNo">1127</span>                        if (ds instanceof AbstractCompoundDataset) {<a name="line.1127"></a>
<span class="sourceLineNo">1128</span>                                if (isize != ds.getElementsPerItem()) {<a name="line.1128"></a>
<span class="sourceLineNo">1129</span>                                        throw new IllegalArgumentException("Input dataset is not compatible with slice");<a name="line.1129"></a>
<span class="sourceLineNo">1130</span>                                }<a name="line.1130"></a>
<span class="sourceLineNo">1131</span><a name="line.1131"></a>
<span class="sourceLineNo">1132</span>                                double[] temp = new double[isize];<a name="line.1132"></a>
<span class="sourceLineNo">1133</span>                                while (iter.hasNext() &amp;&amp; oiter.hasNext()) {<a name="line.1133"></a>
<span class="sourceLineNo">1134</span>                                        ((AbstractCompoundDataset) ds).getDoubleArrayAbs(oiter.index, temp);<a name="line.1134"></a>
<span class="sourceLineNo">1135</span>                                        setDoubleArrayAbs(iter.index, temp);<a name="line.1135"></a>
<span class="sourceLineNo">1136</span>                                }<a name="line.1136"></a>
<span class="sourceLineNo">1137</span>                                while (iter.hasNext() &amp;&amp; oiter.hasNext()) {<a name="line.1137"></a>
<span class="sourceLineNo">1138</span>                                        for (int i = 0; i &lt; isize; i++) {<a name="line.1138"></a>
<span class="sourceLineNo">1139</span>                                                data[iter.index + i] = (byte) ds.getElementLongAbs(oiter.index + i); // GET_ELEMENT_WITH_CAST<a name="line.1139"></a>
<span class="sourceLineNo">1140</span>                                        }<a name="line.1140"></a>
<span class="sourceLineNo">1141</span>                                }<a name="line.1141"></a>
<span class="sourceLineNo">1142</span>                        } else {<a name="line.1142"></a>
<span class="sourceLineNo">1143</span>                                while (iter.hasNext() &amp;&amp; oiter.hasNext()) {<a name="line.1143"></a>
<span class="sourceLineNo">1144</span>                                        data[iter.index] = (byte) ds.getElementLongAbs(oiter.index); // GET_ELEMENT_WITH_CAST<a name="line.1144"></a>
<span class="sourceLineNo">1145</span>                                        for (int i = 1; i &lt; isize; i++) {<a name="line.1145"></a>
<span class="sourceLineNo">1146</span>                                                data[iter.index + i] = 0;<a name="line.1146"></a>
<span class="sourceLineNo">1147</span>                                        }<a name="line.1147"></a>
<span class="sourceLineNo">1148</span>                                }<a name="line.1148"></a>
<span class="sourceLineNo">1149</span>                        }<a name="line.1149"></a>
<span class="sourceLineNo">1150</span>                } else {<a name="line.1150"></a>
<span class="sourceLineNo">1151</span>                        try {<a name="line.1151"></a>
<span class="sourceLineNo">1152</span>                                final byte[] vr = DTypeUtils.toByteArray(o, isize); // PRIM_TYPE // CLASS_TYPE<a name="line.1152"></a>
<span class="sourceLineNo">1153</span><a name="line.1153"></a>
<span class="sourceLineNo">1154</span>                                final IntegerIterator iter = new IntegerIterator(index, size, isize);<a name="line.1154"></a>
<span class="sourceLineNo">1155</span><a name="line.1155"></a>
<span class="sourceLineNo">1156</span>                                while (iter.hasNext()) {<a name="line.1156"></a>
<span class="sourceLineNo">1157</span>                                        setAbs(iter.index, vr);<a name="line.1157"></a>
<span class="sourceLineNo">1158</span>                                }<a name="line.1158"></a>
<span class="sourceLineNo">1159</span>                        } catch (IllegalArgumentException e) {<a name="line.1159"></a>
<span class="sourceLineNo">1160</span>                                throw new IllegalArgumentException("Object for setting is not a dataset or number");<a name="line.1160"></a>
<span class="sourceLineNo">1161</span>                        }<a name="line.1161"></a>
<span class="sourceLineNo">1162</span>                }<a name="line.1162"></a>
<span class="sourceLineNo">1163</span>                return this;<a name="line.1163"></a>
<span class="sourceLineNo">1164</span>        }<a name="line.1164"></a>
<span class="sourceLineNo">1165</span><a name="line.1165"></a>
<span class="sourceLineNo">1166</span>        @Override<a name="line.1166"></a>
<span class="sourceLineNo">1167</span>        public CompoundByteDataset setByIndexes(final Object o, final Object... indexes) {<a name="line.1167"></a>
<span class="sourceLineNo">1168</span>                setDirty();<a name="line.1168"></a>
<span class="sourceLineNo">1169</span>                final IntegersIterator iter = new IntegersIterator(shape, indexes);<a name="line.1169"></a>
<span class="sourceLineNo">1170</span>                final int[] pos = iter.getPos();<a name="line.1170"></a>
<span class="sourceLineNo">1171</span><a name="line.1171"></a>
<span class="sourceLineNo">1172</span>                if (o instanceof Dataset) {<a name="line.1172"></a>
<span class="sourceLineNo">1173</span>                        Dataset ds = (Dataset) o;<a name="line.1173"></a>
<span class="sourceLineNo">1174</span>                        if (ShapeUtils.calcSize(iter.getShape()) != ds.getSize()) {<a name="line.1174"></a>
<span class="sourceLineNo">1175</span>                                throw new IllegalArgumentException(<a name="line.1175"></a>
<span class="sourceLineNo">1176</span>                                                "Number of items in selection does not match number of items in dataset");<a name="line.1176"></a>
<span class="sourceLineNo">1177</span>                        }<a name="line.1177"></a>
<span class="sourceLineNo">1178</span><a name="line.1178"></a>
<span class="sourceLineNo">1179</span>                        IndexIterator oiter = ds.getIterator();<a name="line.1179"></a>
<span class="sourceLineNo">1180</span><a name="line.1180"></a>
<span class="sourceLineNo">1181</span>                        if (ds instanceof AbstractCompoundDataset) {<a name="line.1181"></a>
<span class="sourceLineNo">1182</span>                                if (isize != ds.getElementsPerItem()) {<a name="line.1182"></a>
<span class="sourceLineNo">1183</span>                                        throw new IllegalArgumentException("Input dataset is not compatible with slice");<a name="line.1183"></a>
<span class="sourceLineNo">1184</span>                                }<a name="line.1184"></a>
<span class="sourceLineNo">1185</span><a name="line.1185"></a>
<span class="sourceLineNo">1186</span>                                double[] temp = new double[isize];<a name="line.1186"></a>
<span class="sourceLineNo">1187</span>                                while (iter.hasNext() &amp;&amp; oiter.hasNext()) {<a name="line.1187"></a>
<span class="sourceLineNo">1188</span>                                        ((AbstractCompoundDataset) ds).getDoubleArray(temp, pos);<a name="line.1188"></a>
<span class="sourceLineNo">1189</span>                                        setDoubleArrayAbs(get1DIndex(pos), temp);<a name="line.1189"></a>
<span class="sourceLineNo">1190</span>                                }<a name="line.1190"></a>
<span class="sourceLineNo">1191</span>                        } else {<a name="line.1191"></a>
<span class="sourceLineNo">1192</span>                                while (iter.hasNext() &amp;&amp; oiter.hasNext()) {<a name="line.1192"></a>
<span class="sourceLineNo">1193</span>                                        int n = get1DIndex(pos);<a name="line.1193"></a>
<span class="sourceLineNo">1194</span>                                        data[n] = (byte) ds.getElementLongAbs(oiter.index); // GET_ELEMENT_WITH_CAST<a name="line.1194"></a>
<span class="sourceLineNo">1195</span>                                        for (int i = 1; i &lt; isize; i++) {<a name="line.1195"></a>
<span class="sourceLineNo">1196</span>                                                data[n + i] = 0;<a name="line.1196"></a>
<span class="sourceLineNo">1197</span>                                        }<a name="line.1197"></a>
<span class="sourceLineNo">1198</span>                                }<a name="line.1198"></a>
<span class="sourceLineNo">1199</span>                        }<a name="line.1199"></a>
<span class="sourceLineNo">1200</span>                } else {<a name="line.1200"></a>
<span class="sourceLineNo">1201</span>                        try {<a name="line.1201"></a>
<span class="sourceLineNo">1202</span>                                final byte[] vr = DTypeUtils.toByteArray(o, isize); // PRIM_TYPE // CLASS_TYPE<a name="line.1202"></a>
<span class="sourceLineNo">1203</span><a name="line.1203"></a>
<span class="sourceLineNo">1204</span>                                while (iter.hasNext()) {<a name="line.1204"></a>
<span class="sourceLineNo">1205</span>                                        setAbs(get1DIndex(pos), vr);<a name="line.1205"></a>
<span class="sourceLineNo">1206</span>                                }<a name="line.1206"></a>
<span class="sourceLineNo">1207</span>                        } catch (IllegalArgumentException e) {<a name="line.1207"></a>
<span class="sourceLineNo">1208</span>                                throw new IllegalArgumentException("Object for setting is not a dataset or number");<a name="line.1208"></a>
<span class="sourceLineNo">1209</span>                        }<a name="line.1209"></a>
<span class="sourceLineNo">1210</span>                }<a name="line.1210"></a>
<span class="sourceLineNo">1211</span>                return this;<a name="line.1211"></a>
<span class="sourceLineNo">1212</span>        }<a name="line.1212"></a>
<span class="sourceLineNo">1213</span><a name="line.1213"></a>
<span class="sourceLineNo">1214</span>        @Override<a name="line.1214"></a>
<span class="sourceLineNo">1215</span>        CompoundByteDataset setSlicedView(Dataset view, Dataset d) {<a name="line.1215"></a>
<span class="sourceLineNo">1216</span>                setDirty();<a name="line.1216"></a>
<span class="sourceLineNo">1217</span>                final BroadcastSelfIterator it = BroadcastSelfIterator.createIterator(view, d);<a name="line.1217"></a>
<span class="sourceLineNo">1218</span><a name="line.1218"></a>
<span class="sourceLineNo">1219</span>                final int is = view.getElementsPerItem();<a name="line.1219"></a>
<span class="sourceLineNo">1220</span><a name="line.1220"></a>
<span class="sourceLineNo">1221</span>                if (is &gt; 1) {<a name="line.1221"></a>
<span class="sourceLineNo">1222</span>                        if (d.getElementsPerItem() == 1) {<a name="line.1222"></a>
<span class="sourceLineNo">1223</span>                                while (it.hasNext()) {<a name="line.1223"></a>
<span class="sourceLineNo">1224</span>                                        final byte bv = (byte) it.bLong; // PRIM_TYPE // BCAST_WITH_CAST d.getElementLongAbs(it.bIndex);<a name="line.1224"></a>
<span class="sourceLineNo">1225</span>                                        data[it.aIndex] = bv;<a name="line.1225"></a>
<span class="sourceLineNo">1226</span>                                        for (int j = 1; j &lt; is; j++) {<a name="line.1226"></a>
<span class="sourceLineNo">1227</span>                                                data[it.aIndex + j] = bv;<a name="line.1227"></a>
<span class="sourceLineNo">1228</span>                                        }<a name="line.1228"></a>
<span class="sourceLineNo">1229</span>                                }<a name="line.1229"></a>
<span class="sourceLineNo">1230</span>                        } else {<a name="line.1230"></a>
<span class="sourceLineNo">1231</span>                                while (it.hasNext()) {<a name="line.1231"></a>
<span class="sourceLineNo">1232</span>                                        data[it.aIndex] = (byte) it.bLong; // BCAST_WITH_CAST d.getElementLongAbs(it.bIndex);<a name="line.1232"></a>
<span class="sourceLineNo">1233</span>                                        for (int j = 1; j &lt; is; j++) {<a name="line.1233"></a>
<span class="sourceLineNo">1234</span>                                                data[it.aIndex + j] = (byte) d.getElementLongAbs(it.bIndex + j); // GET_ELEMENT_WITH_CAST<a name="line.1234"></a>
<span class="sourceLineNo">1235</span>                                        }<a name="line.1235"></a>
<span class="sourceLineNo">1236</span>                                }<a name="line.1236"></a>
<span class="sourceLineNo">1237</span>                        }<a name="line.1237"></a>
<span class="sourceLineNo">1238</span>                } else {<a name="line.1238"></a>
<span class="sourceLineNo">1239</span>                        while (it.hasNext()) {<a name="line.1239"></a>
<span class="sourceLineNo">1240</span>                                data[it.aIndex] = (byte) it.bLong; // BCAST_WITH_CAST d.getElementLongAbs(it.bIndex);<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>                return this;<a name="line.1243"></a>
<span class="sourceLineNo">1244</span>        }<a name="line.1244"></a>
<span class="sourceLineNo">1245</span><a name="line.1245"></a>
<span class="sourceLineNo">1246</span>        @Override<a name="line.1246"></a>
<span class="sourceLineNo">1247</span>        public CompoundByteDataset setSlice(final Object o, final IndexIterator siter) {<a name="line.1247"></a>
<span class="sourceLineNo">1248</span>                setDirty();<a name="line.1248"></a>
<span class="sourceLineNo">1249</span>                if (o instanceof IDataset) {<a name="line.1249"></a>
<span class="sourceLineNo">1250</span>                        final IDataset ds = (IDataset) o;<a name="line.1250"></a>
<span class="sourceLineNo">1251</span>                        final int[] oshape = ds.getShape();<a name="line.1251"></a>
<span class="sourceLineNo">1252</span><a name="line.1252"></a>
<span class="sourceLineNo">1253</span>                        if (!ShapeUtils.areShapesCompatible(siter.getShape(), oshape)) {<a name="line.1253"></a>
<span class="sourceLineNo">1254</span>                                throw new IllegalArgumentException(String.format(<a name="line.1254"></a>
<span class="sourceLineNo">1255</span>                                                "Input dataset is not compatible with slice: %s cf %s", Arrays.toString(oshape),<a name="line.1255"></a>
<span class="sourceLineNo">1256</span>                                                Arrays.toString(siter.getShape())));<a name="line.1256"></a>
<span class="sourceLineNo">1257</span>                        }<a name="line.1257"></a>
<span class="sourceLineNo">1258</span><a name="line.1258"></a>
<span class="sourceLineNo">1259</span>                        if (ds instanceof Dataset) {<a name="line.1259"></a>
<span class="sourceLineNo">1260</span>                                final Dataset ads = (Dataset) ds;<a name="line.1260"></a>
<span class="sourceLineNo">1261</span>                                IndexIterator oiter = ads.getIterator();<a name="line.1261"></a>
<span class="sourceLineNo">1262</span><a name="line.1262"></a>
<span class="sourceLineNo">1263</span>                                if (ds instanceof AbstractCompoundDataset) {<a name="line.1263"></a>
<span class="sourceLineNo">1264</span>                                        if (isize != ads.getElementsPerItem()) {<a name="line.1264"></a>
<span class="sourceLineNo">1265</span>                                                throw new IllegalArgumentException("Input dataset is not compatible with slice");<a name="line.1265"></a>
<span class="sourceLineNo">1266</span>                                        }<a name="line.1266"></a>
<span class="sourceLineNo">1267</span><a name="line.1267"></a>
<span class="sourceLineNo">1268</span>                                        while (siter.hasNext() &amp;&amp; oiter.hasNext()) {<a name="line.1268"></a>
<span class="sourceLineNo">1269</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1269"></a>
<span class="sourceLineNo">1270</span>                                                        data[siter.index + i] = (byte) ads.getElementLongAbs(oiter.index + i); // GET_ELEMENT_WITH_CAST<a name="line.1270"></a>
<span class="sourceLineNo">1271</span>                                                }<a name="line.1271"></a>
<span class="sourceLineNo">1272</span>                                        }<a name="line.1272"></a>
<span class="sourceLineNo">1273</span>                                } else {<a name="line.1273"></a>
<span class="sourceLineNo">1274</span>                                        while (siter.hasNext() &amp;&amp; oiter.hasNext()) {<a name="line.1274"></a>
<span class="sourceLineNo">1275</span>                                                data[siter.index] = (byte) ads.getElementLongAbs(oiter.index); // GET_ELEMENT_WITH_CAST<a name="line.1275"></a>
<span class="sourceLineNo">1276</span>                                                for (int i = 1; i &lt; isize; i++) {<a name="line.1276"></a>
<span class="sourceLineNo">1277</span>                                                        data[siter.index + i] = 0;<a name="line.1277"></a>
<span class="sourceLineNo">1278</span>                                                }<a name="line.1278"></a>
<span class="sourceLineNo">1279</span>                                        }<a name="line.1279"></a>
<span class="sourceLineNo">1280</span>                                }<a name="line.1280"></a>
<span class="sourceLineNo">1281</span>                        } else {<a name="line.1281"></a>
<span class="sourceLineNo">1282</span>                                final IndexIterator oiter = new PositionIterator(oshape);<a name="line.1282"></a>
<span class="sourceLineNo">1283</span>                                final int[] pos = oiter.getPos();<a name="line.1283"></a>
<span class="sourceLineNo">1284</span><a name="line.1284"></a>
<span class="sourceLineNo">1285</span>                                if (ds.getElementsPerItem() == 1) {<a name="line.1285"></a>
<span class="sourceLineNo">1286</span>                                        while (siter.hasNext() &amp;&amp; oiter.hasNext()) {<a name="line.1286"></a>
<span class="sourceLineNo">1287</span>                                                data[siter.index] = ds.getByte(pos); // PRIM_TYPE<a name="line.1287"></a>
<span class="sourceLineNo">1288</span>                                                for (int i = 1; i &lt; isize; i++) {<a name="line.1288"></a>
<span class="sourceLineNo">1289</span>                                                        data[siter.index + i] = 0;<a name="line.1289"></a>
<span class="sourceLineNo">1290</span>                                                }<a name="line.1290"></a>
<span class="sourceLineNo">1291</span>                                        }<a name="line.1291"></a>
<span class="sourceLineNo">1292</span>                                } else {<a name="line.1292"></a>
<span class="sourceLineNo">1293</span>                                        while (siter.hasNext() &amp;&amp; oiter.hasNext()) {<a name="line.1293"></a>
<span class="sourceLineNo">1294</span>                                                final byte[] val = DTypeUtils.toByteArray(ds.getObject(pos), isize); // PRIM_TYPE // CLASS_TYPE<a name="line.1294"></a>
<span class="sourceLineNo">1295</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1295"></a>
<span class="sourceLineNo">1296</span>                                                        data[siter.index + i] = val[i];<a name="line.1296"></a>
<span class="sourceLineNo">1297</span>                                                }<a name="line.1297"></a>
<span class="sourceLineNo">1298</span>                                        }<a name="line.1298"></a>
<span class="sourceLineNo">1299</span>                                }<a name="line.1299"></a>
<span class="sourceLineNo">1300</span>                        }<a name="line.1300"></a>
<span class="sourceLineNo">1301</span>                } else {<a name="line.1301"></a>
<span class="sourceLineNo">1302</span>                        try {<a name="line.1302"></a>
<span class="sourceLineNo">1303</span>                                final byte[] vr = DTypeUtils.toByteArray(o, isize); // PRIM_TYPE // CLASS_TYPE<a name="line.1303"></a>
<span class="sourceLineNo">1304</span><a name="line.1304"></a>
<span class="sourceLineNo">1305</span>                                while (siter.hasNext()) {<a name="line.1305"></a>
<span class="sourceLineNo">1306</span>                                        for (int i = 0; i &lt; isize; i++) {<a name="line.1306"></a>
<span class="sourceLineNo">1307</span>                                                data[siter.index + i] = vr[i];<a name="line.1307"></a>
<span class="sourceLineNo">1308</span>                                        }<a name="line.1308"></a>
<span class="sourceLineNo">1309</span>                                }<a name="line.1309"></a>
<span class="sourceLineNo">1310</span>                        } catch (IllegalArgumentException e) {<a name="line.1310"></a>
<span class="sourceLineNo">1311</span>                                throw new IllegalArgumentException("Object for setting slice is not a dataset or number");<a name="line.1311"></a>
<span class="sourceLineNo">1312</span>                        }<a name="line.1312"></a>
<span class="sourceLineNo">1313</span>                }<a name="line.1313"></a>
<span class="sourceLineNo">1314</span>                return this;<a name="line.1314"></a>
<span class="sourceLineNo">1315</span>        }<a name="line.1315"></a>
<span class="sourceLineNo">1316</span><a name="line.1316"></a>
<span class="sourceLineNo">1317</span>        @Override<a name="line.1317"></a>
<span class="sourceLineNo">1318</span>        public void copyItemsFromAxes(final int[] pos, final boolean[] axes, final Dataset dest) {<a name="line.1318"></a>
<span class="sourceLineNo">1319</span>                byte[] ddata = (byte[]) dest.getBuffer(); // PRIM_TYPE<a name="line.1319"></a>
<span class="sourceLineNo">1320</span><a name="line.1320"></a>
<span class="sourceLineNo">1321</span>                if (dest.getElementsPerItem() != isize) {<a name="line.1321"></a>
<span class="sourceLineNo">1322</span>                        throw new IllegalArgumentException(String.format(<a name="line.1322"></a>
<span class="sourceLineNo">1323</span>                                        "Destination dataset is incompatible as it has %d elements per item not %d",<a name="line.1323"></a>
<span class="sourceLineNo">1324</span>                                        dest.getElementsPerItem(), isize));<a name="line.1324"></a>
<span class="sourceLineNo">1325</span>                }<a name="line.1325"></a>
<span class="sourceLineNo">1326</span><a name="line.1326"></a>
<span class="sourceLineNo">1327</span>                SliceIterator siter = getSliceIteratorFromAxes(pos, axes);<a name="line.1327"></a>
<span class="sourceLineNo">1328</span>                int[] sshape = ShapeUtils.squeezeShape(siter.getShape(), false);<a name="line.1328"></a>
<span class="sourceLineNo">1329</span><a name="line.1329"></a>
<span class="sourceLineNo">1330</span>                IndexIterator diter = dest.getSliceIterator(null, sshape, null);<a name="line.1330"></a>
<span class="sourceLineNo">1331</span><a name="line.1331"></a>
<span class="sourceLineNo">1332</span>                if (ddata.length &lt; ShapeUtils.calcSize(sshape)) {<a name="line.1332"></a>
<span class="sourceLineNo">1333</span>                        throw new IllegalArgumentException("destination array is not large enough");<a name="line.1333"></a>
<span class="sourceLineNo">1334</span>                }<a name="line.1334"></a>
<span class="sourceLineNo">1335</span><a name="line.1335"></a>
<span class="sourceLineNo">1336</span>                dest.setDirty();<a name="line.1336"></a>
<span class="sourceLineNo">1337</span>                while (siter.hasNext() &amp;&amp; diter.hasNext()) {<a name="line.1337"></a>
<span class="sourceLineNo">1338</span>                        for (int i = 0; i &lt; isize; i++) {<a name="line.1338"></a>
<span class="sourceLineNo">1339</span>                                ddata[diter.index + i] = data[siter.index + i];<a name="line.1339"></a>
<span class="sourceLineNo">1340</span>                        }<a name="line.1340"></a>
<span class="sourceLineNo">1341</span>                }<a name="line.1341"></a>
<span class="sourceLineNo">1342</span>        }<a name="line.1342"></a>
<span class="sourceLineNo">1343</span><a name="line.1343"></a>
<span class="sourceLineNo">1344</span>        @Override<a name="line.1344"></a>
<span class="sourceLineNo">1345</span>        public void setItemsOnAxes(final int[] pos, final boolean[] axes, final Object src) {<a name="line.1345"></a>
<span class="sourceLineNo">1346</span>                setDirty();<a name="line.1346"></a>
<span class="sourceLineNo">1347</span>                byte[] sdata = (byte[]) src; // PRIM_TYPE<a name="line.1347"></a>
<span class="sourceLineNo">1348</span><a name="line.1348"></a>
<span class="sourceLineNo">1349</span>                SliceIterator siter = getSliceIteratorFromAxes(pos, axes);<a name="line.1349"></a>
<span class="sourceLineNo">1350</span><a name="line.1350"></a>
<span class="sourceLineNo">1351</span>                if (sdata.length &lt; ShapeUtils.calcSize(siter.getShape())) {<a name="line.1351"></a>
<span class="sourceLineNo">1352</span>                        throw new IllegalArgumentException("source array is not large enough");<a name="line.1352"></a>
<span class="sourceLineNo">1353</span>                }<a name="line.1353"></a>
<span class="sourceLineNo">1354</span><a name="line.1354"></a>
<span class="sourceLineNo">1355</span>                for (int i = 0; siter.hasNext(); i++) {<a name="line.1355"></a>
<span class="sourceLineNo">1356</span>                        for (int j = 0; j &lt; isize; j++) {<a name="line.1356"></a>
<span class="sourceLineNo">1357</span>                                data[siter.index + j] = sdata[isize * i + j];<a name="line.1357"></a>
<span class="sourceLineNo">1358</span>                        }<a name="line.1358"></a>
<span class="sourceLineNo">1359</span>                }<a name="line.1359"></a>
<span class="sourceLineNo">1360</span>        }<a name="line.1360"></a>
<span class="sourceLineNo">1361</span><a name="line.1361"></a>
<span class="sourceLineNo">1362</span>        @Override<a name="line.1362"></a>
<span class="sourceLineNo">1363</span>        public boolean containsNans() {<a name="line.1363"></a>
<span class="sourceLineNo">1364</span>                return false;<a name="line.1364"></a>
<span class="sourceLineNo">1365</span>        }<a name="line.1365"></a>
<span class="sourceLineNo">1366</span><a name="line.1366"></a>
<span class="sourceLineNo">1367</span>        @Override<a name="line.1367"></a>
<span class="sourceLineNo">1368</span>        public boolean containsInfs() {<a name="line.1368"></a>
<span class="sourceLineNo">1369</span>                return false;<a name="line.1369"></a>
<span class="sourceLineNo">1370</span>        }<a name="line.1370"></a>
<span class="sourceLineNo">1371</span><a name="line.1371"></a>
<span class="sourceLineNo">1372</span>        @Override<a name="line.1372"></a>
<span class="sourceLineNo">1373</span>        public boolean containsInvalidNumbers() {<a name="line.1373"></a>
<span class="sourceLineNo">1374</span>                return false;<a name="line.1374"></a>
<span class="sourceLineNo">1375</span>        }<a name="line.1375"></a>
<span class="sourceLineNo">1376</span><a name="line.1376"></a>
<span class="sourceLineNo">1377</span>        @Override<a name="line.1377"></a>
<span class="sourceLineNo">1378</span>        public CompoundByteDataset iadd(final Object b) {<a name="line.1378"></a>
<span class="sourceLineNo">1379</span>                setDirty();<a name="line.1379"></a>
<span class="sourceLineNo">1380</span>                Dataset bds = b instanceof Dataset ? (Dataset) b : DatasetFactory.createFromObject(b);<a name="line.1380"></a>
<span class="sourceLineNo">1381</span>                boolean useLong = bds.getElementClass().equals(Long.class);<a name="line.1381"></a>
<span class="sourceLineNo">1382</span>                int is = bds.getElementsPerItem();<a name="line.1382"></a>
<span class="sourceLineNo">1383</span>                if (bds.getSize() == 1) {<a name="line.1383"></a>
<span class="sourceLineNo">1384</span>                        final IndexIterator it = getIterator();<a name="line.1384"></a>
<span class="sourceLineNo">1385</span>                        final int bOffset = bds.getOffset();<a name="line.1385"></a>
<span class="sourceLineNo">1386</span>                        if (is == 1) {<a name="line.1386"></a>
<span class="sourceLineNo">1387</span>                                if (useLong) {<a name="line.1387"></a>
<span class="sourceLineNo">1388</span>                                        final long lb = bds.getElementLongAbs(bOffset);<a name="line.1388"></a>
<span class="sourceLineNo">1389</span>                                        while (it.hasNext()) {<a name="line.1389"></a>
<span class="sourceLineNo">1390</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1390"></a>
<span class="sourceLineNo">1391</span>                                                        data[it.index + i] += lb;<a name="line.1391"></a>
<span class="sourceLineNo">1392</span>                                                }<a name="line.1392"></a>
<span class="sourceLineNo">1393</span>                                        }<a name="line.1393"></a>
<span class="sourceLineNo">1394</span>                                } else {<a name="line.1394"></a>
<span class="sourceLineNo">1395</span>                                        final double db = bds.getElementDoubleAbs(bOffset);<a name="line.1395"></a>
<span class="sourceLineNo">1396</span>                                        while (it.hasNext()) {<a name="line.1396"></a>
<span class="sourceLineNo">1397</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1397"></a>
<span class="sourceLineNo">1398</span>                                                        data[it.index + i] += db;<a name="line.1398"></a>
<span class="sourceLineNo">1399</span>                                                }<a name="line.1399"></a>
<span class="sourceLineNo">1400</span>                                        }<a name="line.1400"></a>
<span class="sourceLineNo">1401</span>                                }<a name="line.1401"></a>
<span class="sourceLineNo">1402</span>                        } else if (is == isize) {<a name="line.1402"></a>
<span class="sourceLineNo">1403</span>                                if (useLong) {<a name="line.1403"></a>
<span class="sourceLineNo">1404</span>                                        while (it.hasNext()) {<a name="line.1404"></a>
<span class="sourceLineNo">1405</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1405"></a>
<span class="sourceLineNo">1406</span>                                                        data[it.index + i] += bds.getElementLongAbs(i);<a name="line.1406"></a>
<span class="sourceLineNo">1407</span>                                                }<a name="line.1407"></a>
<span class="sourceLineNo">1408</span>                                        }<a name="line.1408"></a>
<span class="sourceLineNo">1409</span>                                } else {<a name="line.1409"></a>
<span class="sourceLineNo">1410</span>                                        while (it.hasNext()) {<a name="line.1410"></a>
<span class="sourceLineNo">1411</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1411"></a>
<span class="sourceLineNo">1412</span>                                                        data[it.index + i] += bds.getElementDoubleAbs(i);<a name="line.1412"></a>
<span class="sourceLineNo">1413</span>                                                }<a name="line.1413"></a>
<span class="sourceLineNo">1414</span>                                        }<a name="line.1414"></a>
<span class="sourceLineNo">1415</span>                                }<a name="line.1415"></a>
<span class="sourceLineNo">1416</span>                        } else {<a name="line.1416"></a>
<span class="sourceLineNo">1417</span>                                throw new IllegalArgumentException("Argument does not have same number of elements per item or is not a non-compound dataset");<a name="line.1417"></a>
<span class="sourceLineNo">1418</span>                        }<a name="line.1418"></a>
<span class="sourceLineNo">1419</span>                } else {<a name="line.1419"></a>
<span class="sourceLineNo">1420</span>                        final BroadcastSelfIterator it = BroadcastSelfIterator.createIterator(this, bds);<a name="line.1420"></a>
<span class="sourceLineNo">1421</span>                        it.setOutputDouble(!useLong);<a name="line.1421"></a>
<span class="sourceLineNo">1422</span>                        if (is == 1) {<a name="line.1422"></a>
<span class="sourceLineNo">1423</span>                                if (useLong) {<a name="line.1423"></a>
<span class="sourceLineNo">1424</span>                                        while (it.hasNext()) {<a name="line.1424"></a>
<span class="sourceLineNo">1425</span>                                                final long lb = it.bLong;<a name="line.1425"></a>
<span class="sourceLineNo">1426</span>                                                data[it.aIndex] += lb;<a name="line.1426"></a>
<span class="sourceLineNo">1427</span>                                                for (int i = 1; i &lt; isize; i++) {<a name="line.1427"></a>
<span class="sourceLineNo">1428</span>                                                        data[it.aIndex + i] += lb;<a name="line.1428"></a>
<span class="sourceLineNo">1429</span>                                                }<a name="line.1429"></a>
<span class="sourceLineNo">1430</span>                                        }<a name="line.1430"></a>
<span class="sourceLineNo">1431</span>                                } else {<a name="line.1431"></a>
<span class="sourceLineNo">1432</span>                                        while (it.hasNext()) {<a name="line.1432"></a>
<span class="sourceLineNo">1433</span>                                                final double db = it.bDouble;<a name="line.1433"></a>
<span class="sourceLineNo">1434</span>                                                data[it.aIndex] += db;<a name="line.1434"></a>
<span class="sourceLineNo">1435</span>                                                for (int i = 1; i &lt; isize; i++) {<a name="line.1435"></a>
<span class="sourceLineNo">1436</span>                                                        data[it.aIndex + i] += db;<a name="line.1436"></a>
<span class="sourceLineNo">1437</span>                                                }<a name="line.1437"></a>
<span class="sourceLineNo">1438</span>                                        }<a name="line.1438"></a>
<span class="sourceLineNo">1439</span>                                }<a name="line.1439"></a>
<span class="sourceLineNo">1440</span>                        } else if (is == isize) {<a name="line.1440"></a>
<span class="sourceLineNo">1441</span>                                if (useLong) {<a name="line.1441"></a>
<span class="sourceLineNo">1442</span>                                        while (it.hasNext()) {<a name="line.1442"></a>
<span class="sourceLineNo">1443</span>                                                data[it.aIndex] += it.bLong;<a name="line.1443"></a>
<span class="sourceLineNo">1444</span>                                                for (int i = 1; i &lt; isize; i++) {<a name="line.1444"></a>
<span class="sourceLineNo">1445</span>                                                        data[it.aIndex + i] += bds.getElementLongAbs(it.bIndex + i);<a name="line.1445"></a>
<span class="sourceLineNo">1446</span>                                                }<a name="line.1446"></a>
<span class="sourceLineNo">1447</span>                                        }<a name="line.1447"></a>
<span class="sourceLineNo">1448</span>                                } else {<a name="line.1448"></a>
<span class="sourceLineNo">1449</span>                                        while (it.hasNext()) {<a name="line.1449"></a>
<span class="sourceLineNo">1450</span>                                                data[it.aIndex] += it.bDouble;<a name="line.1450"></a>
<span class="sourceLineNo">1451</span>                                                for (int i = 1; i &lt; isize; i++) {<a name="line.1451"></a>
<span class="sourceLineNo">1452</span>                                                        data[it.aIndex + i] += bds.getElementDoubleAbs(it.bIndex + i);<a name="line.1452"></a>
<span class="sourceLineNo">1453</span>                                                }<a name="line.1453"></a>
<span class="sourceLineNo">1454</span>                                        }<a name="line.1454"></a>
<span class="sourceLineNo">1455</span>                                }<a name="line.1455"></a>
<span class="sourceLineNo">1456</span>                        } else {<a name="line.1456"></a>
<span class="sourceLineNo">1457</span>                                throw new IllegalArgumentException("Argument does not have same number of elements per item or is not a non-compound dataset");<a name="line.1457"></a>
<span class="sourceLineNo">1458</span>                        }<a name="line.1458"></a>
<span class="sourceLineNo">1459</span>                }<a name="line.1459"></a>
<span class="sourceLineNo">1460</span>                return this;<a name="line.1460"></a>
<span class="sourceLineNo">1461</span>        }<a name="line.1461"></a>
<span class="sourceLineNo">1462</span><a name="line.1462"></a>
<span class="sourceLineNo">1463</span>        @Override<a name="line.1463"></a>
<span class="sourceLineNo">1464</span>        public CompoundByteDataset isubtract(final Object b) {<a name="line.1464"></a>
<span class="sourceLineNo">1465</span>                setDirty();<a name="line.1465"></a>
<span class="sourceLineNo">1466</span>                Dataset bds = b instanceof Dataset ? (Dataset) b : DatasetFactory.createFromObject(b);<a name="line.1466"></a>
<span class="sourceLineNo">1467</span>                boolean useLong = bds.getElementClass().equals(Long.class);<a name="line.1467"></a>
<span class="sourceLineNo">1468</span>                int is = bds.getElementsPerItem();<a name="line.1468"></a>
<span class="sourceLineNo">1469</span>                if (bds.getSize() == 1) {<a name="line.1469"></a>
<span class="sourceLineNo">1470</span>                        final IndexIterator it = getIterator();<a name="line.1470"></a>
<span class="sourceLineNo">1471</span>                        final int bOffset = bds.getOffset();<a name="line.1471"></a>
<span class="sourceLineNo">1472</span>                        if (is == 1) {<a name="line.1472"></a>
<span class="sourceLineNo">1473</span>                                if (useLong) {<a name="line.1473"></a>
<span class="sourceLineNo">1474</span>                                        final long lb = bds.getElementLongAbs(bOffset);<a name="line.1474"></a>
<span class="sourceLineNo">1475</span>                                        while (it.hasNext()) {<a name="line.1475"></a>
<span class="sourceLineNo">1476</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1476"></a>
<span class="sourceLineNo">1477</span>                                                        data[it.index + i] -= lb;<a name="line.1477"></a>
<span class="sourceLineNo">1478</span>                                                }<a name="line.1478"></a>
<span class="sourceLineNo">1479</span>                                        }<a name="line.1479"></a>
<span class="sourceLineNo">1480</span>                                } else {<a name="line.1480"></a>
<span class="sourceLineNo">1481</span>                                        final double db = bds.getElementDoubleAbs(bOffset);<a name="line.1481"></a>
<span class="sourceLineNo">1482</span>                                        while (it.hasNext()) {<a name="line.1482"></a>
<span class="sourceLineNo">1483</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1483"></a>
<span class="sourceLineNo">1484</span>                                                        data[it.index + i] -= db;<a name="line.1484"></a>
<span class="sourceLineNo">1485</span>                                                }<a name="line.1485"></a>
<span class="sourceLineNo">1486</span>                                        }<a name="line.1486"></a>
<span class="sourceLineNo">1487</span>                                }<a name="line.1487"></a>
<span class="sourceLineNo">1488</span>                        } else if (is == isize) {<a name="line.1488"></a>
<span class="sourceLineNo">1489</span>                                if (useLong) {<a name="line.1489"></a>
<span class="sourceLineNo">1490</span>                                        while (it.hasNext()) {<a name="line.1490"></a>
<span class="sourceLineNo">1491</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1491"></a>
<span class="sourceLineNo">1492</span>                                                        data[it.index + i] -= bds.getElementLongAbs(i);<a name="line.1492"></a>
<span class="sourceLineNo">1493</span>                                                }<a name="line.1493"></a>
<span class="sourceLineNo">1494</span>                                        }<a name="line.1494"></a>
<span class="sourceLineNo">1495</span>                                } else {<a name="line.1495"></a>
<span class="sourceLineNo">1496</span>                                        while (it.hasNext()) {<a name="line.1496"></a>
<span class="sourceLineNo">1497</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1497"></a>
<span class="sourceLineNo">1498</span>                                                        data[it.index + i] -= bds.getElementDoubleAbs(i);<a name="line.1498"></a>
<span class="sourceLineNo">1499</span>                                                }<a name="line.1499"></a>
<span class="sourceLineNo">1500</span>                                        }<a name="line.1500"></a>
<span class="sourceLineNo">1501</span>                                }<a name="line.1501"></a>
<span class="sourceLineNo">1502</span>                        } else {<a name="line.1502"></a>
<span class="sourceLineNo">1503</span>                                throw new IllegalArgumentException("Argument does not have same number of elements per item or is not a non-compound dataset");<a name="line.1503"></a>
<span class="sourceLineNo">1504</span>                        }<a name="line.1504"></a>
<span class="sourceLineNo">1505</span>                } else {<a name="line.1505"></a>
<span class="sourceLineNo">1506</span>                        final BroadcastSelfIterator it = BroadcastSelfIterator.createIterator(this, bds);<a name="line.1506"></a>
<span class="sourceLineNo">1507</span>                        it.setOutputDouble(!useLong);<a name="line.1507"></a>
<span class="sourceLineNo">1508</span>                        if (is == 1) {<a name="line.1508"></a>
<span class="sourceLineNo">1509</span>                                if (useLong) {<a name="line.1509"></a>
<span class="sourceLineNo">1510</span>                                        while (it.hasNext()) {<a name="line.1510"></a>
<span class="sourceLineNo">1511</span>                                                final long lb = it.bLong;<a name="line.1511"></a>
<span class="sourceLineNo">1512</span>                                                data[it.aIndex] += lb;<a name="line.1512"></a>
<span class="sourceLineNo">1513</span>                                                for (int i = 1; i &lt; isize; i++) {<a name="line.1513"></a>
<span class="sourceLineNo">1514</span>                                                        data[it.aIndex + i] -= lb;<a name="line.1514"></a>
<span class="sourceLineNo">1515</span>                                                }<a name="line.1515"></a>
<span class="sourceLineNo">1516</span>                                        }<a name="line.1516"></a>
<span class="sourceLineNo">1517</span>                                } else {<a name="line.1517"></a>
<span class="sourceLineNo">1518</span>                                        while (it.hasNext()) {<a name="line.1518"></a>
<span class="sourceLineNo">1519</span>                                                final double db = it.bDouble;<a name="line.1519"></a>
<span class="sourceLineNo">1520</span>                                                data[it.aIndex] += db;<a name="line.1520"></a>
<span class="sourceLineNo">1521</span>                                                for (int i = 1; i &lt; isize; i++) {<a name="line.1521"></a>
<span class="sourceLineNo">1522</span>                                                        data[it.aIndex + i] -= db;<a name="line.1522"></a>
<span class="sourceLineNo">1523</span>                                                }<a name="line.1523"></a>
<span class="sourceLineNo">1524</span>                                        }<a name="line.1524"></a>
<span class="sourceLineNo">1525</span>                                }<a name="line.1525"></a>
<span class="sourceLineNo">1526</span>                        } else if (is == isize) {<a name="line.1526"></a>
<span class="sourceLineNo">1527</span>                                if (useLong) {<a name="line.1527"></a>
<span class="sourceLineNo">1528</span>                                        while (it.hasNext()) {<a name="line.1528"></a>
<span class="sourceLineNo">1529</span>                                                data[it.aIndex] += it.bLong;<a name="line.1529"></a>
<span class="sourceLineNo">1530</span>                                                for (int i = 1; i &lt; isize; i++) {<a name="line.1530"></a>
<span class="sourceLineNo">1531</span>                                                        data[it.aIndex + i] -= bds.getElementLongAbs(it.bIndex + i);<a name="line.1531"></a>
<span class="sourceLineNo">1532</span>                                                }<a name="line.1532"></a>
<span class="sourceLineNo">1533</span>                                        }<a name="line.1533"></a>
<span class="sourceLineNo">1534</span>                                } else {<a name="line.1534"></a>
<span class="sourceLineNo">1535</span>                                        while (it.hasNext()) {<a name="line.1535"></a>
<span class="sourceLineNo">1536</span>                                                data[it.aIndex] += it.bDouble;<a name="line.1536"></a>
<span class="sourceLineNo">1537</span>                                                for (int i = 1; i &lt; isize; i++) {<a name="line.1537"></a>
<span class="sourceLineNo">1538</span>                                                        data[it.aIndex + i] -= bds.getElementDoubleAbs(it.bIndex + i);<a name="line.1538"></a>
<span class="sourceLineNo">1539</span>                                                }<a name="line.1539"></a>
<span class="sourceLineNo">1540</span>                                        }<a name="line.1540"></a>
<span class="sourceLineNo">1541</span>                                }<a name="line.1541"></a>
<span class="sourceLineNo">1542</span>                        } else {<a name="line.1542"></a>
<span class="sourceLineNo">1543</span>                                throw new IllegalArgumentException("Argument does not have same number of elements per item or is not a non-compound dataset");<a name="line.1543"></a>
<span class="sourceLineNo">1544</span>                        }<a name="line.1544"></a>
<span class="sourceLineNo">1545</span>                }<a name="line.1545"></a>
<span class="sourceLineNo">1546</span>                return this;<a name="line.1546"></a>
<span class="sourceLineNo">1547</span>        }<a name="line.1547"></a>
<span class="sourceLineNo">1548</span><a name="line.1548"></a>
<span class="sourceLineNo">1549</span>        @Override<a name="line.1549"></a>
<span class="sourceLineNo">1550</span>        public CompoundByteDataset imultiply(final Object b) {<a name="line.1550"></a>
<span class="sourceLineNo">1551</span>                setDirty();<a name="line.1551"></a>
<span class="sourceLineNo">1552</span>                Dataset bds = b instanceof Dataset ? (Dataset) b : DatasetFactory.createFromObject(b);<a name="line.1552"></a>
<span class="sourceLineNo">1553</span>                boolean useLong = bds.getElementClass().equals(Long.class);<a name="line.1553"></a>
<span class="sourceLineNo">1554</span>                int is = bds.getElementsPerItem();<a name="line.1554"></a>
<span class="sourceLineNo">1555</span>                if (bds.getSize() == 1) {<a name="line.1555"></a>
<span class="sourceLineNo">1556</span>                        final IndexIterator it = getIterator();<a name="line.1556"></a>
<span class="sourceLineNo">1557</span>                        final int bOffset = bds.getOffset();<a name="line.1557"></a>
<span class="sourceLineNo">1558</span>                        if (useLong) {<a name="line.1558"></a>
<span class="sourceLineNo">1559</span>                                if (is == 1) {<a name="line.1559"></a>
<span class="sourceLineNo">1560</span>                                        final long lb = bds.getElementLongAbs(bOffset);<a name="line.1560"></a>
<span class="sourceLineNo">1561</span>                                        while (it.hasNext()) {<a name="line.1561"></a>
<span class="sourceLineNo">1562</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1562"></a>
<span class="sourceLineNo">1563</span>                                                        data[it.index + i] *= lb;<a name="line.1563"></a>
<span class="sourceLineNo">1564</span>                                                }<a name="line.1564"></a>
<span class="sourceLineNo">1565</span>                                        }<a name="line.1565"></a>
<span class="sourceLineNo">1566</span>                                } else if (is == isize) {<a name="line.1566"></a>
<span class="sourceLineNo">1567</span>                                        while (it.hasNext()) {<a name="line.1567"></a>
<span class="sourceLineNo">1568</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1568"></a>
<span class="sourceLineNo">1569</span>                                                        data[it.index + i] *= bds.getElementLongAbs(i);<a name="line.1569"></a>
<span class="sourceLineNo">1570</span>                                                }<a name="line.1570"></a>
<span class="sourceLineNo">1571</span>                                        }<a name="line.1571"></a>
<span class="sourceLineNo">1572</span>                                } else {<a name="line.1572"></a>
<span class="sourceLineNo">1573</span>                                        throw new IllegalArgumentException("Argument does not have same number of elements per item or is not a non-compound dataset");<a name="line.1573"></a>
<span class="sourceLineNo">1574</span>                                }<a name="line.1574"></a>
<span class="sourceLineNo">1575</span>                        } else {<a name="line.1575"></a>
<span class="sourceLineNo">1576</span>                                if (is == 1) {<a name="line.1576"></a>
<span class="sourceLineNo">1577</span>                                        final double db = bds.getElementDoubleAbs(bOffset);<a name="line.1577"></a>
<span class="sourceLineNo">1578</span>                                        while (it.hasNext()) {<a name="line.1578"></a>
<span class="sourceLineNo">1579</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1579"></a>
<span class="sourceLineNo">1580</span>                                                        data[it.index + i] *= db;<a name="line.1580"></a>
<span class="sourceLineNo">1581</span>                                                }<a name="line.1581"></a>
<span class="sourceLineNo">1582</span>                                        }<a name="line.1582"></a>
<span class="sourceLineNo">1583</span>                                } else if (is == isize) {<a name="line.1583"></a>
<span class="sourceLineNo">1584</span>                                        while (it.hasNext()) {<a name="line.1584"></a>
<span class="sourceLineNo">1585</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1585"></a>
<span class="sourceLineNo">1586</span>                                                        data[it.index + i] *= bds.getElementDoubleAbs(i);<a name="line.1586"></a>
<span class="sourceLineNo">1587</span>                                                }<a name="line.1587"></a>
<span class="sourceLineNo">1588</span>                                        }<a name="line.1588"></a>
<span class="sourceLineNo">1589</span>                                } else {<a name="line.1589"></a>
<span class="sourceLineNo">1590</span>                                        throw new IllegalArgumentException("Argument does not have same number of elements per item or is not a non-compound dataset");<a name="line.1590"></a>
<span class="sourceLineNo">1591</span>                                }<a name="line.1591"></a>
<span class="sourceLineNo">1592</span>                        }<a name="line.1592"></a>
<span class="sourceLineNo">1593</span>                } else {<a name="line.1593"></a>
<span class="sourceLineNo">1594</span>                        final BroadcastSelfIterator it = BroadcastSelfIterator.createIterator(this, bds);<a name="line.1594"></a>
<span class="sourceLineNo">1595</span>                        it.setOutputDouble(!useLong);<a name="line.1595"></a>
<span class="sourceLineNo">1596</span>                        if (useLong) {<a name="line.1596"></a>
<span class="sourceLineNo">1597</span>                                if (is == 1) {<a name="line.1597"></a>
<span class="sourceLineNo">1598</span>                                        while (it.hasNext()) {<a name="line.1598"></a>
<span class="sourceLineNo">1599</span>                                                final double lb = it.bLong;<a name="line.1599"></a>
<span class="sourceLineNo">1600</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1600"></a>
<span class="sourceLineNo">1601</span>                                                        data[it.aIndex + i] *= lb;<a name="line.1601"></a>
<span class="sourceLineNo">1602</span>                                                }<a name="line.1602"></a>
<span class="sourceLineNo">1603</span>                                        }<a name="line.1603"></a>
<span class="sourceLineNo">1604</span>                                } else if (is == isize) {<a name="line.1604"></a>
<span class="sourceLineNo">1605</span>                                        while (it.hasNext()) {<a name="line.1605"></a>
<span class="sourceLineNo">1606</span>                                                data[it.aIndex] *= it.bLong;<a name="line.1606"></a>
<span class="sourceLineNo">1607</span>                                                for (int i = 1; i &lt; isize; i++) {<a name="line.1607"></a>
<span class="sourceLineNo">1608</span>                                                        data[it.aIndex + i] *= bds.getElementLongAbs(it.bIndex + i);<a name="line.1608"></a>
<span class="sourceLineNo">1609</span>                                                }<a name="line.1609"></a>
<span class="sourceLineNo">1610</span>                                        }<a name="line.1610"></a>
<span class="sourceLineNo">1611</span>                                } else {<a name="line.1611"></a>
<span class="sourceLineNo">1612</span>                                        throw new IllegalArgumentException("Argument does not have same number of elements per item or is not a non-compound dataset");<a name="line.1612"></a>
<span class="sourceLineNo">1613</span>                                }<a name="line.1613"></a>
<span class="sourceLineNo">1614</span>                        } else {<a name="line.1614"></a>
<span class="sourceLineNo">1615</span>                                if (is == 1) {<a name="line.1615"></a>
<span class="sourceLineNo">1616</span>                                        while (it.hasNext()) {<a name="line.1616"></a>
<span class="sourceLineNo">1617</span>                                                final double db = it.bDouble;<a name="line.1617"></a>
<span class="sourceLineNo">1618</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1618"></a>
<span class="sourceLineNo">1619</span>                                                        data[it.aIndex + i] *= db;<a name="line.1619"></a>
<span class="sourceLineNo">1620</span>                                                }<a name="line.1620"></a>
<span class="sourceLineNo">1621</span>                                        }<a name="line.1621"></a>
<span class="sourceLineNo">1622</span>                                } else if (is == isize) {<a name="line.1622"></a>
<span class="sourceLineNo">1623</span>                                        while (it.hasNext()) {<a name="line.1623"></a>
<span class="sourceLineNo">1624</span>                                                data[it.aIndex] *= it.bDouble;<a name="line.1624"></a>
<span class="sourceLineNo">1625</span>                                                for (int i = 1; i &lt; isize; i++) {<a name="line.1625"></a>
<span class="sourceLineNo">1626</span>                                                        data[it.aIndex + i] *= bds.getElementDoubleAbs(it.bIndex + i);<a name="line.1626"></a>
<span class="sourceLineNo">1627</span>                                                }<a name="line.1627"></a>
<span class="sourceLineNo">1628</span>                                        }<a name="line.1628"></a>
<span class="sourceLineNo">1629</span>                                } else {<a name="line.1629"></a>
<span class="sourceLineNo">1630</span>                                        throw new IllegalArgumentException("Argument does not have same number of elements per item or is not a non-compound dataset");<a name="line.1630"></a>
<span class="sourceLineNo">1631</span>                                }<a name="line.1631"></a>
<span class="sourceLineNo">1632</span>                        }<a name="line.1632"></a>
<span class="sourceLineNo">1633</span>                }<a name="line.1633"></a>
<span class="sourceLineNo">1634</span>                return this;<a name="line.1634"></a>
<span class="sourceLineNo">1635</span>        }<a name="line.1635"></a>
<span class="sourceLineNo">1636</span><a name="line.1636"></a>
<span class="sourceLineNo">1637</span>        @Override<a name="line.1637"></a>
<span class="sourceLineNo">1638</span>        public CompoundByteDataset idivide(final Object b) {<a name="line.1638"></a>
<span class="sourceLineNo">1639</span>                setDirty();<a name="line.1639"></a>
<span class="sourceLineNo">1640</span>                Dataset bds = b instanceof Dataset ? (Dataset) b : DatasetFactory.createFromObject(b);<a name="line.1640"></a>
<span class="sourceLineNo">1641</span>                boolean useLong = bds.getElementClass().equals(Long.class);<a name="line.1641"></a>
<span class="sourceLineNo">1642</span>                int is = bds.getElementsPerItem();<a name="line.1642"></a>
<span class="sourceLineNo">1643</span>                if (bds.getSize() == 1) {<a name="line.1643"></a>
<span class="sourceLineNo">1644</span>                        final IndexIterator it = getIterator();<a name="line.1644"></a>
<span class="sourceLineNo">1645</span>                        final int bOffset = bds.getOffset();<a name="line.1645"></a>
<span class="sourceLineNo">1646</span>                        if (useLong) {<a name="line.1646"></a>
<span class="sourceLineNo">1647</span>                                if (is == 1) {<a name="line.1647"></a>
<span class="sourceLineNo">1648</span>                                        final long lb = bds.getElementLongAbs(bOffset);<a name="line.1648"></a>
<span class="sourceLineNo">1649</span>                                        if (lb == 0) { // INT_USE<a name="line.1649"></a>
<span class="sourceLineNo">1650</span>                                                fill(0); // INT_USE<a name="line.1650"></a>
<span class="sourceLineNo">1651</span>                                        } else { // INT_USE<a name="line.1651"></a>
<span class="sourceLineNo">1652</span>                                        while (it.hasNext()) {<a name="line.1652"></a>
<span class="sourceLineNo">1653</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1653"></a>
<span class="sourceLineNo">1654</span>                                                        data[it.index + i] /= lb;<a name="line.1654"></a>
<span class="sourceLineNo">1655</span>                                                }<a name="line.1655"></a>
<span class="sourceLineNo">1656</span>                                        }<a name="line.1656"></a>
<span class="sourceLineNo">1657</span>                                        } // INT_USE<a name="line.1657"></a>
<span class="sourceLineNo">1658</span>                                } else if (is == isize) {<a name="line.1658"></a>
<span class="sourceLineNo">1659</span>                                        while (it.hasNext()) {<a name="line.1659"></a>
<span class="sourceLineNo">1660</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1660"></a>
<span class="sourceLineNo">1661</span>                                                        final long lb = bds.getElementLongAbs(i);<a name="line.1661"></a>
<span class="sourceLineNo">1662</span>                                try {<a name="line.1662"></a>
<span class="sourceLineNo">1663</span>                                                                data[it.index + i] /= lb; // INT_EXCEPTION<a name="line.1663"></a>
<span class="sourceLineNo">1664</span>                                } catch (ArithmeticException e) {<a name="line.1664"></a>
<span class="sourceLineNo">1665</span>                                        data[it.index + i] = 0;<a name="line.1665"></a>
<span class="sourceLineNo">1666</span>                                }<a name="line.1666"></a>
<span class="sourceLineNo">1667</span>                                                }<a name="line.1667"></a>
<span class="sourceLineNo">1668</span>                                        }<a name="line.1668"></a>
<span class="sourceLineNo">1669</span>                                } else {<a name="line.1669"></a>
<span class="sourceLineNo">1670</span>                                        throw new IllegalArgumentException("Argument does not have same number of elements per item or is not a non-compound dataset");<a name="line.1670"></a>
<span class="sourceLineNo">1671</span>                                }<a name="line.1671"></a>
<span class="sourceLineNo">1672</span>                        } else {<a name="line.1672"></a>
<span class="sourceLineNo">1673</span>                                if (is == 1) {<a name="line.1673"></a>
<span class="sourceLineNo">1674</span>                                        final double db = bds.getElementDoubleAbs(bOffset);<a name="line.1674"></a>
<span class="sourceLineNo">1675</span>                                        if (db == 0) { // INT_USE<a name="line.1675"></a>
<span class="sourceLineNo">1676</span>                                                fill(0); // INT_USE<a name="line.1676"></a>
<span class="sourceLineNo">1677</span>                                        } else { // INT_USE<a name="line.1677"></a>
<span class="sourceLineNo">1678</span>                                        while (it.hasNext()) {<a name="line.1678"></a>
<span class="sourceLineNo">1679</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1679"></a>
<span class="sourceLineNo">1680</span>                                                        data[it.index + i] /= db;<a name="line.1680"></a>
<span class="sourceLineNo">1681</span>                                                }<a name="line.1681"></a>
<span class="sourceLineNo">1682</span>                                        }<a name="line.1682"></a>
<span class="sourceLineNo">1683</span>                                        } // INT_USE<a name="line.1683"></a>
<span class="sourceLineNo">1684</span>                                } else if (is == isize) {<a name="line.1684"></a>
<span class="sourceLineNo">1685</span>                                        while (it.hasNext()) {<a name="line.1685"></a>
<span class="sourceLineNo">1686</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1686"></a>
<span class="sourceLineNo">1687</span>                                                        final double db = bds.getElementDoubleAbs(i);<a name="line.1687"></a>
<span class="sourceLineNo">1688</span>                                try {<a name="line.1688"></a>
<span class="sourceLineNo">1689</span>                                                                data[it.index + i] /= db; // INT_EXCEPTION<a name="line.1689"></a>
<span class="sourceLineNo">1690</span>                                } catch (ArithmeticException e) {<a name="line.1690"></a>
<span class="sourceLineNo">1691</span>                                        data[it.index + i] = 0;<a name="line.1691"></a>
<span class="sourceLineNo">1692</span>                                }<a name="line.1692"></a>
<span class="sourceLineNo">1693</span>                                                }<a name="line.1693"></a>
<span class="sourceLineNo">1694</span>                                        }<a name="line.1694"></a>
<span class="sourceLineNo">1695</span>                                } else {<a name="line.1695"></a>
<span class="sourceLineNo">1696</span>                                        throw new IllegalArgumentException("Argument does not have same number of elements per item or is not a non-compound dataset");<a name="line.1696"></a>
<span class="sourceLineNo">1697</span>                                }<a name="line.1697"></a>
<span class="sourceLineNo">1698</span>                        }<a name="line.1698"></a>
<span class="sourceLineNo">1699</span>                } else {<a name="line.1699"></a>
<span class="sourceLineNo">1700</span>                        final BroadcastSelfIterator it = BroadcastSelfIterator.createIterator(this, bds);<a name="line.1700"></a>
<span class="sourceLineNo">1701</span>                        it.setOutputDouble(!useLong);<a name="line.1701"></a>
<span class="sourceLineNo">1702</span>                        if (useLong) {<a name="line.1702"></a>
<span class="sourceLineNo">1703</span>                                if (is == 1) {<a name="line.1703"></a>
<span class="sourceLineNo">1704</span>                                        while (it.hasNext()) {<a name="line.1704"></a>
<span class="sourceLineNo">1705</span>                                                final long lb = it.bLong;<a name="line.1705"></a>
<span class="sourceLineNo">1706</span>                                                if (lb == 0) { // INT_USE<a name="line.1706"></a>
<span class="sourceLineNo">1707</span>                                                        for (int i = 0; i &lt; isize; i++) { // INT_USE<a name="line.1707"></a>
<span class="sourceLineNo">1708</span>                                                                data[it.aIndex + i] = 0; // INT_USE<a name="line.1708"></a>
<span class="sourceLineNo">1709</span>                                                        }// INT_USE<a name="line.1709"></a>
<span class="sourceLineNo">1710</span>                                                } else { // INT_USE<a name="line.1710"></a>
<span class="sourceLineNo">1711</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1711"></a>
<span class="sourceLineNo">1712</span>                                                        data[it.aIndex + i] /= lb;<a name="line.1712"></a>
<span class="sourceLineNo">1713</span>                                                }<a name="line.1713"></a>
<span class="sourceLineNo">1714</span>                                                } // INT_USE<a name="line.1714"></a>
<span class="sourceLineNo">1715</span>                                        }<a name="line.1715"></a>
<span class="sourceLineNo">1716</span>                                } else if (is == isize) {<a name="line.1716"></a>
<span class="sourceLineNo">1717</span>                                        while (it.hasNext()) {<a name="line.1717"></a>
<span class="sourceLineNo">1718</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1718"></a>
<span class="sourceLineNo">1719</span>                                                        final long lb = bds.getElementLongAbs(it.bIndex + i);<a name="line.1719"></a>
<span class="sourceLineNo">1720</span>                                try {<a name="line.1720"></a>
<span class="sourceLineNo">1721</span>                                                                data[it.aIndex + i] /= lb; // INT_EXCEPTION<a name="line.1721"></a>
<span class="sourceLineNo">1722</span>                                } catch (ArithmeticException e) {<a name="line.1722"></a>
<span class="sourceLineNo">1723</span>                                        data[it.aIndex + i] = 0;<a name="line.1723"></a>
<span class="sourceLineNo">1724</span>                                }<a name="line.1724"></a>
<span class="sourceLineNo">1725</span>                                                }<a name="line.1725"></a>
<span class="sourceLineNo">1726</span>                                        }<a name="line.1726"></a>
<span class="sourceLineNo">1727</span>                                } else {<a name="line.1727"></a>
<span class="sourceLineNo">1728</span>                                        throw new IllegalArgumentException("Argument does not have same number of elements per item or is not a non-compound dataset");<a name="line.1728"></a>
<span class="sourceLineNo">1729</span>                                }<a name="line.1729"></a>
<span class="sourceLineNo">1730</span>                        } else {<a name="line.1730"></a>
<span class="sourceLineNo">1731</span>                                if (is == 1) {<a name="line.1731"></a>
<span class="sourceLineNo">1732</span>                                        while (it.hasNext()) {<a name="line.1732"></a>
<span class="sourceLineNo">1733</span>                                                final double db = it.bDouble;<a name="line.1733"></a>
<span class="sourceLineNo">1734</span>                                                if (db == 0) { // INT_USE<a name="line.1734"></a>
<span class="sourceLineNo">1735</span>                                                        for (int i = 0; i &lt; isize; i++) { // INT_USE<a name="line.1735"></a>
<span class="sourceLineNo">1736</span>                                                                data[it.aIndex + i] = 0; // INT_USE<a name="line.1736"></a>
<span class="sourceLineNo">1737</span>                                                        }// INT_USE<a name="line.1737"></a>
<span class="sourceLineNo">1738</span>                                                } else { // INT_USE<a name="line.1738"></a>
<span class="sourceLineNo">1739</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1739"></a>
<span class="sourceLineNo">1740</span>                                                        data[it.aIndex + i] /= db;<a name="line.1740"></a>
<span class="sourceLineNo">1741</span>                                                }<a name="line.1741"></a>
<span class="sourceLineNo">1742</span>                                                } // INT_USE<a name="line.1742"></a>
<span class="sourceLineNo">1743</span>                                        }<a name="line.1743"></a>
<span class="sourceLineNo">1744</span>                                } else if (is == isize) {<a name="line.1744"></a>
<span class="sourceLineNo">1745</span>                                        while (it.hasNext()) {<a name="line.1745"></a>
<span class="sourceLineNo">1746</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1746"></a>
<span class="sourceLineNo">1747</span>                                                        final double db = bds.getElementDoubleAbs(it.bIndex + i);<a name="line.1747"></a>
<span class="sourceLineNo">1748</span>                                try {<a name="line.1748"></a>
<span class="sourceLineNo">1749</span>                                                                data[it.aIndex + i] /= db; // INT_EXCEPTION<a name="line.1749"></a>
<span class="sourceLineNo">1750</span>                                } catch (ArithmeticException e) {<a name="line.1750"></a>
<span class="sourceLineNo">1751</span>                                        data[it.aIndex + i] = 0;<a name="line.1751"></a>
<span class="sourceLineNo">1752</span>                                }<a name="line.1752"></a>
<span class="sourceLineNo">1753</span>                                                }<a name="line.1753"></a>
<span class="sourceLineNo">1754</span>                                        }<a name="line.1754"></a>
<span class="sourceLineNo">1755</span>                                } else {<a name="line.1755"></a>
<span class="sourceLineNo">1756</span>                                        throw new IllegalArgumentException("Argument does not have same number of elements per item or is not a non-compound dataset");<a name="line.1756"></a>
<span class="sourceLineNo">1757</span>                                }<a name="line.1757"></a>
<span class="sourceLineNo">1758</span>                        }<a name="line.1758"></a>
<span class="sourceLineNo">1759</span>                }<a name="line.1759"></a>
<span class="sourceLineNo">1760</span>                return this;<a name="line.1760"></a>
<span class="sourceLineNo">1761</span>        }<a name="line.1761"></a>
<span class="sourceLineNo">1762</span><a name="line.1762"></a>
<span class="sourceLineNo">1763</span>        @Override<a name="line.1763"></a>
<span class="sourceLineNo">1764</span>        public CompoundByteDataset ifloor() {<a name="line.1764"></a>
<span class="sourceLineNo">1765</span>                return this;<a name="line.1765"></a>
<span class="sourceLineNo">1766</span>        }<a name="line.1766"></a>
<span class="sourceLineNo">1767</span><a name="line.1767"></a>
<span class="sourceLineNo">1768</span>        @Override<a name="line.1768"></a>
<span class="sourceLineNo">1769</span>        public CompoundByteDataset iremainder(final Object b) {<a name="line.1769"></a>
<span class="sourceLineNo">1770</span>                setDirty();<a name="line.1770"></a>
<span class="sourceLineNo">1771</span>                Dataset bds = b instanceof Dataset ? (Dataset) b : DatasetFactory.createFromObject(b);<a name="line.1771"></a>
<span class="sourceLineNo">1772</span>                boolean useLong = bds.getElementClass().equals(Long.class);<a name="line.1772"></a>
<span class="sourceLineNo">1773</span>                int is = bds.getElementsPerItem();<a name="line.1773"></a>
<span class="sourceLineNo">1774</span>                if (bds.getSize() == 1) {<a name="line.1774"></a>
<span class="sourceLineNo">1775</span>                        final IndexIterator it = getIterator();<a name="line.1775"></a>
<span class="sourceLineNo">1776</span>                        final int bOffset = bds.getOffset();<a name="line.1776"></a>
<span class="sourceLineNo">1777</span>                        if (useLong) {<a name="line.1777"></a>
<span class="sourceLineNo">1778</span>                                if (is == 1) {<a name="line.1778"></a>
<span class="sourceLineNo">1779</span>                                        final long lb = bds.getElementLongAbs(bOffset);<a name="line.1779"></a>
<span class="sourceLineNo">1780</span>                                        if (lb == 0) { // INT_USE<a name="line.1780"></a>
<span class="sourceLineNo">1781</span>                                                fill(0); // INT_USE<a name="line.1781"></a>
<span class="sourceLineNo">1782</span>                                        } else { // INT_USE<a name="line.1782"></a>
<span class="sourceLineNo">1783</span>                                        while (it.hasNext()) {<a name="line.1783"></a>
<span class="sourceLineNo">1784</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1784"></a>
<span class="sourceLineNo">1785</span>                                                        data[it.index + i] %= lb;<a name="line.1785"></a>
<span class="sourceLineNo">1786</span>                                                }<a name="line.1786"></a>
<span class="sourceLineNo">1787</span>                                        }<a name="line.1787"></a>
<span class="sourceLineNo">1788</span>                                        } // INT_USE<a name="line.1788"></a>
<span class="sourceLineNo">1789</span>                                } else if (is == isize) {<a name="line.1789"></a>
<span class="sourceLineNo">1790</span>                                        while (it.hasNext()) {<a name="line.1790"></a>
<span class="sourceLineNo">1791</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1791"></a>
<span class="sourceLineNo">1792</span>                                try {<a name="line.1792"></a>
<span class="sourceLineNo">1793</span>                                                                data[it.index + i] %= bds.getElementLongAbs(i); // INT_EXCEPTION<a name="line.1793"></a>
<span class="sourceLineNo">1794</span>                                } catch (ArithmeticException e) {<a name="line.1794"></a>
<span class="sourceLineNo">1795</span>                                        data[it.index + i] = 0;<a name="line.1795"></a>
<span class="sourceLineNo">1796</span>                                }<a name="line.1796"></a>
<span class="sourceLineNo">1797</span>                                                }<a name="line.1797"></a>
<span class="sourceLineNo">1798</span>                                        }<a name="line.1798"></a>
<span class="sourceLineNo">1799</span>                                } else {<a name="line.1799"></a>
<span class="sourceLineNo">1800</span>                                        throw new IllegalArgumentException("Argument does not have same number of elements per item or is not a non-compound dataset");<a name="line.1800"></a>
<span class="sourceLineNo">1801</span>                                }<a name="line.1801"></a>
<span class="sourceLineNo">1802</span>                        } else {<a name="line.1802"></a>
<span class="sourceLineNo">1803</span>                                if (is == 1) {<a name="line.1803"></a>
<span class="sourceLineNo">1804</span>                                        final double db = bds.getElementDoubleAbs(bOffset);<a name="line.1804"></a>
<span class="sourceLineNo">1805</span>                                        if (db == 0) { // INT_USE<a name="line.1805"></a>
<span class="sourceLineNo">1806</span>                                                fill(0); // INT_USE<a name="line.1806"></a>
<span class="sourceLineNo">1807</span>                                        } else { // INT_USE<a name="line.1807"></a>
<span class="sourceLineNo">1808</span>                                        while (it.hasNext()) {<a name="line.1808"></a>
<span class="sourceLineNo">1809</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1809"></a>
<span class="sourceLineNo">1810</span>                                                        data[it.index + i] %= db;<a name="line.1810"></a>
<span class="sourceLineNo">1811</span>                                                }<a name="line.1811"></a>
<span class="sourceLineNo">1812</span>                                        }<a name="line.1812"></a>
<span class="sourceLineNo">1813</span>                                        } // INT_USE<a name="line.1813"></a>
<span class="sourceLineNo">1814</span>                                } else if (is == isize) {<a name="line.1814"></a>
<span class="sourceLineNo">1815</span>                                        while (it.hasNext()) {<a name="line.1815"></a>
<span class="sourceLineNo">1816</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1816"></a>
<span class="sourceLineNo">1817</span>                                try {<a name="line.1817"></a>
<span class="sourceLineNo">1818</span>                                                                data[it.index + i] %= bds.getElementDoubleAbs(i); // INT_EXCEPTION<a name="line.1818"></a>
<span class="sourceLineNo">1819</span>                                } catch (ArithmeticException e) {<a name="line.1819"></a>
<span class="sourceLineNo">1820</span>                                        data[it.index + i] = 0;<a name="line.1820"></a>
<span class="sourceLineNo">1821</span>                                }<a name="line.1821"></a>
<span class="sourceLineNo">1822</span>                                                }<a name="line.1822"></a>
<span class="sourceLineNo">1823</span>                                        }<a name="line.1823"></a>
<span class="sourceLineNo">1824</span>                                } else {<a name="line.1824"></a>
<span class="sourceLineNo">1825</span>                                        throw new IllegalArgumentException("Argument does not have same number of elements per item or is not a non-compound dataset");<a name="line.1825"></a>
<span class="sourceLineNo">1826</span>                                }<a name="line.1826"></a>
<span class="sourceLineNo">1827</span>                        }<a name="line.1827"></a>
<span class="sourceLineNo">1828</span>                } else {<a name="line.1828"></a>
<span class="sourceLineNo">1829</span>                        final BroadcastSelfIterator it = BroadcastSelfIterator.createIterator(this, bds);<a name="line.1829"></a>
<span class="sourceLineNo">1830</span>                        it.setOutputDouble(!useLong);<a name="line.1830"></a>
<span class="sourceLineNo">1831</span>                        if (useLong) {<a name="line.1831"></a>
<span class="sourceLineNo">1832</span>                                if (is == 1) {<a name="line.1832"></a>
<span class="sourceLineNo">1833</span>                                        while (it.hasNext()) {<a name="line.1833"></a>
<span class="sourceLineNo">1834</span>                                                final long lb = it.bLong;<a name="line.1834"></a>
<span class="sourceLineNo">1835</span>                                                if (lb == 0) { // INT_USE<a name="line.1835"></a>
<span class="sourceLineNo">1836</span>                                                        for (int i = 0; i &lt; isize; i++) // INT_USE<a name="line.1836"></a>
<span class="sourceLineNo">1837</span>                                                                data[it.aIndex + i] = 0; // INT_USE<a name="line.1837"></a>
<span class="sourceLineNo">1838</span>                                                } else { // INT_USE<a name="line.1838"></a>
<span class="sourceLineNo">1839</span>                                                for (int i = 0; i &lt; isize; i++)<a name="line.1839"></a>
<span class="sourceLineNo">1840</span>                                                        data[it.aIndex + i] %= lb;<a name="line.1840"></a>
<span class="sourceLineNo">1841</span>                                                } // INT_USE<a name="line.1841"></a>
<span class="sourceLineNo">1842</span>                                        }<a name="line.1842"></a>
<span class="sourceLineNo">1843</span>                                } else if (is == isize) {<a name="line.1843"></a>
<span class="sourceLineNo">1844</span>                                        while (it.hasNext()) {<a name="line.1844"></a>
<span class="sourceLineNo">1845</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1845"></a>
<span class="sourceLineNo">1846</span>                                                        final long lb = bds.getElementLongAbs(it.bIndex + i);<a name="line.1846"></a>
<span class="sourceLineNo">1847</span>                                try {<a name="line.1847"></a>
<span class="sourceLineNo">1848</span>                                                                data[it.aIndex + i] %= lb; // INT_EXCEPTION<a name="line.1848"></a>
<span class="sourceLineNo">1849</span>                                } catch (ArithmeticException e) {<a name="line.1849"></a>
<span class="sourceLineNo">1850</span>                                        data[it.aIndex + i] = 0;<a name="line.1850"></a>
<span class="sourceLineNo">1851</span>                                }<a name="line.1851"></a>
<span class="sourceLineNo">1852</span>                                                }<a name="line.1852"></a>
<span class="sourceLineNo">1853</span>                                        }<a name="line.1853"></a>
<span class="sourceLineNo">1854</span>                                } else {<a name="line.1854"></a>
<span class="sourceLineNo">1855</span>                                        throw new IllegalArgumentException("Argument does not have same number of elements per item or is not a non-compound dataset");<a name="line.1855"></a>
<span class="sourceLineNo">1856</span>                                }<a name="line.1856"></a>
<span class="sourceLineNo">1857</span>                        } else {<a name="line.1857"></a>
<span class="sourceLineNo">1858</span>                                if (is == 1) {<a name="line.1858"></a>
<span class="sourceLineNo">1859</span>                                        while (it.hasNext()) {<a name="line.1859"></a>
<span class="sourceLineNo">1860</span>                                                final double db = it.bDouble;<a name="line.1860"></a>
<span class="sourceLineNo">1861</span>                                                if (db == 0) { // INT_USE<a name="line.1861"></a>
<span class="sourceLineNo">1862</span>                                                        for (int i = 0; i &lt; isize; i++) // INT_USE<a name="line.1862"></a>
<span class="sourceLineNo">1863</span>                                                                data[it.aIndex + i] = 0; // INT_USE<a name="line.1863"></a>
<span class="sourceLineNo">1864</span>                                                } else { // INT_USE<a name="line.1864"></a>
<span class="sourceLineNo">1865</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1865"></a>
<span class="sourceLineNo">1866</span>                                                        data[it.aIndex + i] %= db;<a name="line.1866"></a>
<span class="sourceLineNo">1867</span>                                                }<a name="line.1867"></a>
<span class="sourceLineNo">1868</span>                                                } // INT_USE<a name="line.1868"></a>
<span class="sourceLineNo">1869</span>                                        }<a name="line.1869"></a>
<span class="sourceLineNo">1870</span>                                } else if (is == isize) {<a name="line.1870"></a>
<span class="sourceLineNo">1871</span>                                        while (it.hasNext()) {<a name="line.1871"></a>
<span class="sourceLineNo">1872</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1872"></a>
<span class="sourceLineNo">1873</span>                                                        final double db = bds.getElementDoubleAbs(it.bIndex + i);<a name="line.1873"></a>
<span class="sourceLineNo">1874</span>                                try {<a name="line.1874"></a>
<span class="sourceLineNo">1875</span>                                                                data[it.aIndex + i] %= db; // INT_EXCEPTION<a name="line.1875"></a>
<span class="sourceLineNo">1876</span>                                } catch (ArithmeticException e) {<a name="line.1876"></a>
<span class="sourceLineNo">1877</span>                                        data[it.aIndex + i] = 0;<a name="line.1877"></a>
<span class="sourceLineNo">1878</span>                                }<a name="line.1878"></a>
<span class="sourceLineNo">1879</span>                                                }<a name="line.1879"></a>
<span class="sourceLineNo">1880</span>                                        }<a name="line.1880"></a>
<span class="sourceLineNo">1881</span>                                } else {<a name="line.1881"></a>
<span class="sourceLineNo">1882</span>                                        throw new IllegalArgumentException("Argument does not have same number of elements per item or is not a non-compound dataset");<a name="line.1882"></a>
<span class="sourceLineNo">1883</span>                                }<a name="line.1883"></a>
<span class="sourceLineNo">1884</span>                        }<a name="line.1884"></a>
<span class="sourceLineNo">1885</span>                }<a name="line.1885"></a>
<span class="sourceLineNo">1886</span>                return this;<a name="line.1886"></a>
<span class="sourceLineNo">1887</span>        }<a name="line.1887"></a>
<span class="sourceLineNo">1888</span><a name="line.1888"></a>
<span class="sourceLineNo">1889</span>        @Override<a name="line.1889"></a>
<span class="sourceLineNo">1890</span>        public CompoundByteDataset ipower(final Object b) {<a name="line.1890"></a>
<span class="sourceLineNo">1891</span>                setDirty();<a name="line.1891"></a>
<span class="sourceLineNo">1892</span>                Dataset bds = b instanceof Dataset ? (Dataset) b : DatasetFactory.createFromObject(b);<a name="line.1892"></a>
<span class="sourceLineNo">1893</span>                final int is = bds.getElementsPerItem();<a name="line.1893"></a>
<span class="sourceLineNo">1894</span>                if (bds.getSize() == 1) {<a name="line.1894"></a>
<span class="sourceLineNo">1895</span>                        final int bOffset = bds.getOffset();<a name="line.1895"></a>
<span class="sourceLineNo">1896</span>                        final double vr = bds.getElementDoubleAbs(bOffset);<a name="line.1896"></a>
<span class="sourceLineNo">1897</span>                        final IndexIterator it = getIterator();<a name="line.1897"></a>
<span class="sourceLineNo">1898</span>                        if (bds.isComplex()) {<a name="line.1898"></a>
<span class="sourceLineNo">1899</span>                                final double vi = bds.getElementDoubleAbs(bOffset + 1);<a name="line.1899"></a>
<span class="sourceLineNo">1900</span>                                if (vi == 0) {<a name="line.1900"></a>
<span class="sourceLineNo">1901</span>                                        while (it.hasNext()) {<a name="line.1901"></a>
<span class="sourceLineNo">1902</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1902"></a>
<span class="sourceLineNo">1903</span>                                                        final double v = Math.pow(data[it.index + i], vr);<a name="line.1903"></a>
<span class="sourceLineNo">1904</span>                                                        if (Double.isInfinite(v) || Double.isNaN(v)) { // INT_USE<a name="line.1904"></a>
<span class="sourceLineNo">1905</span>                                                                data[it.index + i] = 0; // INT_USE<a name="line.1905"></a>
<span class="sourceLineNo">1906</span>                                                        } else { // INT_USE<a name="line.1906"></a>
<span class="sourceLineNo">1907</span>                                                        data[it.index + i] = (byte) (long) v; // PRIM_TYPE_LONG // ADD_CAST<a name="line.1907"></a>
<span class="sourceLineNo">1908</span>                                                        } // INT_USE<a name="line.1908"></a>
<span class="sourceLineNo">1909</span>                                                }<a name="line.1909"></a>
<span class="sourceLineNo">1910</span>                                        }<a name="line.1910"></a>
<span class="sourceLineNo">1911</span>                                } else {<a name="line.1911"></a>
<span class="sourceLineNo">1912</span>                                        final Complex zv = new Complex(vr, vi);<a name="line.1912"></a>
<span class="sourceLineNo">1913</span>                                        while (it.hasNext()) {<a name="line.1913"></a>
<span class="sourceLineNo">1914</span>                                                for (int i = 0; i &lt; isize; i++) {<a name="line.1914"></a>
<span class="sourceLineNo">1915</span>                                                        Complex zd = new Complex(data[it.index + i], 0);<a name="line.1915"></a>
<span class="sourceLineNo">1916</span>                                                        final double v = zd.pow(zv).getReal();<a name="line.1916"></a>
<span class="sourceLineNo">1917</span>                                                        if (Double.isInfinite(v) || Double.isNaN(v)) { // INT_USE<a name="line.1917"></a>
<span class="sourceLineNo">1918</span>                                                                data[it.index + i] = 0; // INT_USE<a name="line.1918"></a>
<span class="sourceLineNo">1919</span>                                                        } else { // INT_USE<a name="line.1919"></a>
<span class="sourceLineNo">1920</span>                                                        data[it.index + i] = (byte) (long) v; // PRIM_TYPE_LONG // ADD_CAST<a name="line.1920"></a>
<span class="sourceLineNo">1921</span>                                                        } // INT_USE<a name="line.1921"></a>
<span class="sourceLineNo">1922</span>                                                }<a name="line.1922"></a>
<span class="sourceLineNo">1923</span>                                        }<a name="line.1923"></a>
<span class="sourceLineNo">1924</span>                                }<a name="line.1924"></a>
<span class="sourceLineNo">1925</span>                        } else if (is == 1) {<a name="line.1925"></a>
<span class="sourceLineNo">1926</span>                                while (it.hasNext()) {<a name="line.1926"></a>
<span class="sourceLineNo">1927</span>                                        for (int i = 0; i &lt; isize; i++) {<a name="line.1927"></a>
<span class="sourceLineNo">1928</span>                                                final double v = Math.pow(data[it.index + i], vr);<a name="line.1928"></a>
<span class="sourceLineNo">1929</span>                                                if (Double.isInfinite(v) || Double.isNaN(v)) { // INT_USE<a name="line.1929"></a>
<span class="sourceLineNo">1930</span>                                                        data[it.index + i] = 0; // INT_USE<a name="line.1930"></a>
<span class="sourceLineNo">1931</span>                                                } else { // INT_USE<a name="line.1931"></a>
<span class="sourceLineNo">1932</span>                                                data[it.index + i] = (byte) (long) v; // PRIM_TYPE_LONG // ADD_CAST<a name="line.1932"></a>
<span class="sourceLineNo">1933</span>                                                } // INT_USE<a name="line.1933"></a>
<span class="sourceLineNo">1934</span>                                        }<a name="line.1934"></a>
<span class="sourceLineNo">1935</span>                                }<a name="line.1935"></a>
<span class="sourceLineNo">1936</span>                        } else if (is == isize) {<a name="line.1936"></a>
<span class="sourceLineNo">1937</span>                                while (it.hasNext()) {<a name="line.1937"></a>
<span class="sourceLineNo">1938</span>                                        for (int i = 0; i &lt; isize; i++) {<a name="line.1938"></a>
<span class="sourceLineNo">1939</span>                                                final double v = Math.pow(data[it.index + i], bds.getElementDoubleAbs(i));<a name="line.1939"></a>
<span class="sourceLineNo">1940</span>                                                if (Double.isInfinite(v) || Double.isNaN(v)) { // INT_USE<a name="line.1940"></a>
<span class="sourceLineNo">1941</span>                                                        data[it.index + i] = 0; // INT_USE<a name="line.1941"></a>
<span class="sourceLineNo">1942</span>                                                } else { // INT_USE<a name="line.1942"></a>
<span class="sourceLineNo">1943</span>                                                data[it.index + i] = (byte) (long) v; // PRIM_TYPE_LONG // ADD_CAST<a name="line.1943"></a>
<span class="sourceLineNo">1944</span>                                                } // INT_USE<a name="line.1944"></a>
<span class="sourceLineNo">1945</span>                                        }<a name="line.1945"></a>
<span class="sourceLineNo">1946</span>                                }<a name="line.1946"></a>
<span class="sourceLineNo">1947</span>                        }<a name="line.1947"></a>
<span class="sourceLineNo">1948</span>                } else {<a name="line.1948"></a>
<span class="sourceLineNo">1949</span>                        final BroadcastIterator it = BroadcastIterator.createIterator(this, bds);<a name="line.1949"></a>
<span class="sourceLineNo">1950</span>                        it.setOutputDouble(true);<a name="line.1950"></a>
<span class="sourceLineNo">1951</span>                        if (bds.isComplex()) {<a name="line.1951"></a>
<span class="sourceLineNo">1952</span>                                while (it.hasNext()) {<a name="line.1952"></a>
<span class="sourceLineNo">1953</span>                                        final Complex zv = new Complex(it.bDouble, bds.getElementDoubleAbs(it.bIndex + 1));<a name="line.1953"></a>
<span class="sourceLineNo">1954</span>                                        double v = new Complex(it.aDouble, 0).pow(zv).getReal();<a name="line.1954"></a>
<span class="sourceLineNo">1955</span>                                        if (Double.isInfinite(v) || Double.isNaN(v)) { // INT_USE<a name="line.1955"></a>
<span class="sourceLineNo">1956</span>                                                data[it.aIndex] = 0; // INT_USE<a name="line.1956"></a>
<span class="sourceLineNo">1957</span>                                        } else { // INT_USE<a name="line.1957"></a>
<span class="sourceLineNo">1958</span>                                        data[it.aIndex] = (byte) (long) v; // PRIM_TYPE_LONG // ADD_CAST<a name="line.1958"></a>
<span class="sourceLineNo">1959</span>                                        } // INT_USE<a name="line.1959"></a>
<span class="sourceLineNo">1960</span>                                        for (int i = 1; i &lt; isize; i++) {<a name="line.1960"></a>
<span class="sourceLineNo">1961</span>                                                v = new Complex(data[it.aIndex + i], 0).pow(zv).getReal();<a name="line.1961"></a>
<span class="sourceLineNo">1962</span>                                                if (Double.isInfinite(v) || Double.isNaN(v)) { // INT_USE<a name="line.1962"></a>
<span class="sourceLineNo">1963</span>                                                        data[it.aIndex + i] = 0; // INT_USE<a name="line.1963"></a>
<span class="sourceLineNo">1964</span>                                                } else { // INT_USE<a name="line.1964"></a>
<span class="sourceLineNo">1965</span>                                                data[it.aIndex + i] = (byte) (long) v; // PRIM_TYPE_LONG // ADD_CAST<a name="line.1965"></a>
<span class="sourceLineNo">1966</span>                                                } // INT_USE<a name="line.1966"></a>
<span class="sourceLineNo">1967</span>                                        }<a name="line.1967"></a>
<span class="sourceLineNo">1968</span>                                }<a name="line.1968"></a>
<span class="sourceLineNo">1969</span>                        } else {<a name="line.1969"></a>
<span class="sourceLineNo">1970</span>                                while (it.hasNext()) {<a name="line.1970"></a>
<span class="sourceLineNo">1971</span>                                        double v = Math.pow(it.aDouble, it.bDouble);<a name="line.1971"></a>
<span class="sourceLineNo">1972</span>                                        if (Double.isInfinite(v) || Double.isNaN(v)) { // INT_USE<a name="line.1972"></a>
<span class="sourceLineNo">1973</span>                                                data[it.aIndex] = 0; // INT_USE<a name="line.1973"></a>
<span class="sourceLineNo">1974</span>                                        } else { // INT_USE<a name="line.1974"></a>
<span class="sourceLineNo">1975</span>                                        data[it.aIndex] = (byte) (long) v; // PRIM_TYPE_LONG // ADD_CAST<a name="line.1975"></a>
<span class="sourceLineNo">1976</span>                                        } // INT_USE<a name="line.1976"></a>
<span class="sourceLineNo">1977</span>                                        for (int i = 1; i &lt; isize; i++) {<a name="line.1977"></a>
<span class="sourceLineNo">1978</span>                                                v = Math.pow(data[it.aIndex + i], bds.getElementDoubleAbs(it.bIndex + i));<a name="line.1978"></a>
<span class="sourceLineNo">1979</span>                                                if (Double.isInfinite(v) || Double.isNaN(v)) { // INT_USE<a name="line.1979"></a>
<span class="sourceLineNo">1980</span>                                                        data[it.aIndex + i] = 0; // INT_USE<a name="line.1980"></a>
<span class="sourceLineNo">1981</span>                                                } else { // INT_USE<a name="line.1981"></a>
<span class="sourceLineNo">1982</span>                                                data[it.aIndex + i] = (byte) (long) v; // PRIM_TYPE_LONG // ADD_CAST<a name="line.1982"></a>
<span class="sourceLineNo">1983</span>                                                } // INT_USE<a name="line.1983"></a>
<span class="sourceLineNo">1984</span>                                        }<a name="line.1984"></a>
<span class="sourceLineNo">1985</span>                                }<a name="line.1985"></a>
<span class="sourceLineNo">1986</span>                        }<a name="line.1986"></a>
<span class="sourceLineNo">1987</span>                }<a name="line.1987"></a>
<span class="sourceLineNo">1988</span>                return this;<a name="line.1988"></a>
<span class="sourceLineNo">1989</span>        }<a name="line.1989"></a>
<span class="sourceLineNo">1990</span><a name="line.1990"></a>
<span class="sourceLineNo">1991</span>        @Override<a name="line.1991"></a>
<span class="sourceLineNo">1992</span>        public double residual(final Object b, final Dataset w, boolean ignoreNaNs) {<a name="line.1992"></a>
<span class="sourceLineNo">1993</span>                Dataset bds = b instanceof Dataset ? (Dataset) b : DatasetFactory.createFromObject(b);<a name="line.1993"></a>
<span class="sourceLineNo">1994</span>                final BroadcastIterator it = BroadcastIterator.createIterator(this, bds);<a name="line.1994"></a>
<span class="sourceLineNo">1995</span>                it.setOutputDouble(true);<a name="line.1995"></a>
<span class="sourceLineNo">1996</span>                double sum = 0;<a name="line.1996"></a>
<span class="sourceLineNo">1997</span>                double comp = 0;<a name="line.1997"></a>
<span class="sourceLineNo">1998</span>                final int bis = bds.getElementsPerItem();<a name="line.1998"></a>
<span class="sourceLineNo">1999</span><a name="line.1999"></a>
<span class="sourceLineNo">2000</span>                if (bis == 1) {<a name="line.2000"></a>
<span class="sourceLineNo">2001</span>                        if (w == null) {<a name="line.2001"></a>
<span class="sourceLineNo">2002</span>                                while (it.hasNext()) {<a name="line.2002"></a>
<span class="sourceLineNo">2003</span>                                        final double db = it.bDouble;<a name="line.2003"></a>
<span class="sourceLineNo">2004</span>                                        double diff = it.aDouble - db;<a name="line.2004"></a>
<span class="sourceLineNo">2005</span>                                        double err = diff * diff - comp;<a name="line.2005"></a>
<span class="sourceLineNo">2006</span>                                        double temp = sum + err;<a name="line.2006"></a>
<span class="sourceLineNo">2007</span>                                        comp = (temp - sum) - err;<a name="line.2007"></a>
<span class="sourceLineNo">2008</span>                                        sum = temp;<a name="line.2008"></a>
<span class="sourceLineNo">2009</span>                                        for (int i = 1; i &lt; isize; i++) {<a name="line.2009"></a>
<span class="sourceLineNo">2010</span>                                                diff = data[it.aIndex + i] - db;<a name="line.2010"></a>
<span class="sourceLineNo">2011</span>                                                err = diff * diff - comp;<a name="line.2011"></a>
<span class="sourceLineNo">2012</span>                                                temp = sum + err;<a name="line.2012"></a>
<span class="sourceLineNo">2013</span>                                                comp = (temp - sum) - err;<a name="line.2013"></a>
<span class="sourceLineNo">2014</span>                                                sum = temp;<a name="line.2014"></a>
<span class="sourceLineNo">2015</span>                                        }<a name="line.2015"></a>
<span class="sourceLineNo">2016</span>                                }<a name="line.2016"></a>
<span class="sourceLineNo">2017</span>                        } else {<a name="line.2017"></a>
<span class="sourceLineNo">2018</span>                                IndexIterator itw = w.getIterator();<a name="line.2018"></a>
<span class="sourceLineNo">2019</span>                                while (it.hasNext() &amp;&amp; itw.hasNext()) {<a name="line.2019"></a>
<span class="sourceLineNo">2020</span>                                        final double db = it.bDouble;<a name="line.2020"></a>
<span class="sourceLineNo">2021</span>                                        double diff = it.aDouble - db;<a name="line.2021"></a>
<span class="sourceLineNo">2022</span>                                        final double dw = w.getElementDoubleAbs(itw.index);<a name="line.2022"></a>
<span class="sourceLineNo">2023</span>                                        double err = diff * diff * dw - comp;<a name="line.2023"></a>
<span class="sourceLineNo">2024</span>                                        double temp = sum + err;<a name="line.2024"></a>
<span class="sourceLineNo">2025</span>                                        comp = (temp - sum) - err;<a name="line.2025"></a>
<span class="sourceLineNo">2026</span>                                        sum = temp;<a name="line.2026"></a>
<span class="sourceLineNo">2027</span>                                        for (int i = 1; i &lt; isize; i++) {<a name="line.2027"></a>
<span class="sourceLineNo">2028</span>                                                diff = data[it.aIndex + i] - db;<a name="line.2028"></a>
<span class="sourceLineNo">2029</span>                                                err = diff * diff * dw - comp;<a name="line.2029"></a>
<span class="sourceLineNo">2030</span>                                                temp = sum + err;<a name="line.2030"></a>
<span class="sourceLineNo">2031</span>                                                comp = (temp - sum) - err;<a name="line.2031"></a>
<span class="sourceLineNo">2032</span>                                                sum = temp;<a name="line.2032"></a>
<span class="sourceLineNo">2033</span>                                        }<a name="line.2033"></a>
<span class="sourceLineNo">2034</span>                                }<a name="line.2034"></a>
<span class="sourceLineNo">2035</span>                        }<a name="line.2035"></a>
<span class="sourceLineNo">2036</span>                } else {<a name="line.2036"></a>
<span class="sourceLineNo">2037</span>                        if (w == null) {<a name="line.2037"></a>
<span class="sourceLineNo">2038</span>                                while (it.hasNext()) {<a name="line.2038"></a>
<span class="sourceLineNo">2039</span>                                        double diff = it.aDouble - it.bDouble;<a name="line.2039"></a>
<span class="sourceLineNo">2040</span>                                        double err = diff * diff - comp;<a name="line.2040"></a>
<span class="sourceLineNo">2041</span>                                        double temp = sum + err;<a name="line.2041"></a>
<span class="sourceLineNo">2042</span>                                        comp = (temp - sum) - err;<a name="line.2042"></a>
<span class="sourceLineNo">2043</span>                                        sum = temp;<a name="line.2043"></a>
<span class="sourceLineNo">2044</span>                                        for (int i = 1; i &lt; isize; i++) {<a name="line.2044"></a>
<span class="sourceLineNo">2045</span>                                                diff = data[it.aIndex + i] - bds.getElementDoubleAbs(it.bIndex + i);<a name="line.2045"></a>
<span class="sourceLineNo">2046</span>                                                err = diff * diff - comp;<a name="line.2046"></a>
<span class="sourceLineNo">2047</span>                                                temp = sum + err;<a name="line.2047"></a>
<span class="sourceLineNo">2048</span>                                                comp = (temp - sum) - err;<a name="line.2048"></a>
<span class="sourceLineNo">2049</span>                                                sum = temp;<a name="line.2049"></a>
<span class="sourceLineNo">2050</span>                                        }<a name="line.2050"></a>
<span class="sourceLineNo">2051</span>                                }<a name="line.2051"></a>
<span class="sourceLineNo">2052</span>                        } else {<a name="line.2052"></a>
<span class="sourceLineNo">2053</span>                                IndexIterator itw = w.getIterator();<a name="line.2053"></a>
<span class="sourceLineNo">2054</span>                                while (it.hasNext() &amp;&amp; itw.hasNext()) {<a name="line.2054"></a>
<span class="sourceLineNo">2055</span>                                        double diff = it.aDouble - it.bDouble;<a name="line.2055"></a>
<span class="sourceLineNo">2056</span>                                        final double dw = w.getElementDoubleAbs(itw.index);<a name="line.2056"></a>
<span class="sourceLineNo">2057</span>                                        double err = diff * diff * dw - comp;<a name="line.2057"></a>
<span class="sourceLineNo">2058</span>                                        double temp = sum + err;<a name="line.2058"></a>
<span class="sourceLineNo">2059</span>                                        comp = (temp - sum) - err;<a name="line.2059"></a>
<span class="sourceLineNo">2060</span>                                        sum = temp;<a name="line.2060"></a>
<span class="sourceLineNo">2061</span>                                        for (int i = 1; i &lt; isize; i++) {<a name="line.2061"></a>
<span class="sourceLineNo">2062</span>                                                diff = data[it.aIndex + i] - bds.getElementDoubleAbs(it.bIndex + i);<a name="line.2062"></a>
<span class="sourceLineNo">2063</span>                                                err = diff * diff * dw - comp;<a name="line.2063"></a>
<span class="sourceLineNo">2064</span>                                                temp = sum + err;<a name="line.2064"></a>
<span class="sourceLineNo">2065</span>                                                comp = (temp - sum) - err;<a name="line.2065"></a>
<span class="sourceLineNo">2066</span>                                                sum = temp;<a name="line.2066"></a>
<span class="sourceLineNo">2067</span>                                        }<a name="line.2067"></a>
<span class="sourceLineNo">2068</span>                                }<a name="line.2068"></a>
<span class="sourceLineNo">2069</span>                        }<a name="line.2069"></a>
<span class="sourceLineNo">2070</span>                }<a name="line.2070"></a>
<span class="sourceLineNo">2071</span>                return sum;<a name="line.2071"></a>
<span class="sourceLineNo">2072</span>        }<a name="line.2072"></a>
<span class="sourceLineNo">2073</span>}<a name="line.2073"></a>




























































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