mirror of
https://github.com/meteoinfo/MeteoInfo.git
synced 2025-12-08 20:36:05 +00:00
add flat attribute in NDArray
This commit is contained in:
parent
ec73b697cb
commit
bcf409cf43
@ -1,11 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<MeteoInfo File="milconfig.xml" Type="configurefile">
|
<MeteoInfo File="milconfig.xml" Type="configurefile">
|
||||||
<Path OpenPath="D:\Working\MIScript\Jython\mis\grads">
|
<Path OpenPath="D:\Working\MIScript\Jython\mis\array">
|
||||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\array"/>
|
|
||||||
<RecentFolder Folder="D:\Run\emips\run_meic"/>
|
|
||||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\io"/>
|
|
||||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\traj"/>
|
|
||||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\satellite\calipso"/>
|
|
||||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\satellite\FY"/>
|
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\satellite\FY"/>
|
||||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\satellite\himawari"/>
|
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\satellite\himawari"/>
|
||||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\satellite\modis"/>
|
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\satellite\modis"/>
|
||||||
@ -14,21 +9,26 @@
|
|||||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\satellite"/>
|
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\satellite"/>
|
||||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\chart"/>
|
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\chart"/>
|
||||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\hdf"/>
|
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\hdf"/>
|
||||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis"/>
|
|
||||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\grads"/>
|
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\grads"/>
|
||||||
|
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\toolbox"/>
|
||||||
|
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\toolbox\miml"/>
|
||||||
|
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\toolbox\miml\cluster"/>
|
||||||
|
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\meteo"/>
|
||||||
|
<RecentFolder Folder="D:\Working\MIScript\Jython\mis"/>
|
||||||
|
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\array"/>
|
||||||
</Path>
|
</Path>
|
||||||
<File>
|
<File>
|
||||||
<OpenedFiles>
|
<OpenedFiles>
|
||||||
<OpenedFile File="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl\contourf_1.py"/>
|
<OpenedFile File="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl\contourf_1.py"/>
|
||||||
<OpenedFile File="D:\Working\MIScript\Jython\mis\toolbox\miml\deep_learning\classification\moon.py"/>
|
<OpenedFile File="D:\Working\MIScript\Jython\mis\toolbox\miml\deep_learning\classification\moon.py"/>
|
||||||
<OpenedFile File="D:\Working\MIScript\Jython\mis\traj\hy_conc_minutes.py"/>
|
<OpenedFile File="D:\Working\MIScript\Jython\mis\toolbox\miml\cluster\xmeans_1.py"/>
|
||||||
<OpenedFile File="D:\Working\MIScript\Jython\mis\grads\test_contour.py"/>
|
<OpenedFile File="D:\Working\MIScript\Jython\mis\array\flat.py"/>
|
||||||
</OpenedFiles>
|
</OpenedFiles>
|
||||||
<RecentFiles>
|
<RecentFiles>
|
||||||
<RecentFile File="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl\contourf_1.py"/>
|
<RecentFile File="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl\contourf_1.py"/>
|
||||||
<RecentFile File="D:\Working\MIScript\Jython\mis\toolbox\miml\deep_learning\classification\moon.py"/>
|
<RecentFile File="D:\Working\MIScript\Jython\mis\toolbox\miml\deep_learning\classification\moon.py"/>
|
||||||
<RecentFile File="D:\Working\MIScript\Jython\mis\traj\hy_conc_minutes.py"/>
|
<RecentFile File="D:\Working\MIScript\Jython\mis\toolbox\miml\cluster\xmeans_1.py"/>
|
||||||
<RecentFile File="D:\Working\MIScript\Jython\mis\grads\test_contour.py"/>
|
<RecentFile File="D:\Working\MIScript\Jython\mis\array\flat.py"/>
|
||||||
</RecentFiles>
|
</RecentFiles>
|
||||||
</File>
|
</File>
|
||||||
<Font>
|
<Font>
|
||||||
@ -36,5 +36,5 @@
|
|||||||
</Font>
|
</Font>
|
||||||
<LookFeel DockWindowDecorated="true" LafDecorated="true" Name="FlatDarkLaf"/>
|
<LookFeel DockWindowDecorated="true" LafDecorated="true" Name="FlatDarkLaf"/>
|
||||||
<Figure DoubleBuffering="true"/>
|
<Figure DoubleBuffering="true"/>
|
||||||
<Startup MainFormLocation="-4,2" MainFormSize="1361,774"/>
|
<Startup MainFormLocation="-7,-7" MainFormSize="1293,693"/>
|
||||||
</MeteoInfo>
|
</MeteoInfo>
|
||||||
|
|||||||
52
meteoinfo-lab/pylib/mipylib/numeric/core/_base.py
Normal file
52
meteoinfo-lab/pylib/mipylib/numeric/core/_base.py
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
from org.meteoinfo.ndarray import FlatIndex
|
||||||
|
from org.meteoinfo.ndarray.math import ArrayUtil
|
||||||
|
|
||||||
|
class flatiter(object):
|
||||||
|
|
||||||
|
def __init__(self, array):
|
||||||
|
self.array = array
|
||||||
|
self.flat_index = FlatIndex(array._array)
|
||||||
|
self.size = self.array.size
|
||||||
|
|
||||||
|
def __iter__(self):
|
||||||
|
return self
|
||||||
|
|
||||||
|
def next(self):
|
||||||
|
return self.array.next()
|
||||||
|
|
||||||
|
def __getitem__(self, key):
|
||||||
|
if isinstance(key, int):
|
||||||
|
return self.flat_index.getObject(key)
|
||||||
|
elif isinstance(key, slice):
|
||||||
|
sidx = 0 if key.start is None else key.start
|
||||||
|
if sidx < 0:
|
||||||
|
sidx = self.size + sidx
|
||||||
|
eidx = self.size if key.stop is None else key.stop
|
||||||
|
if eidx < 0:
|
||||||
|
eidx = self.size + eidx
|
||||||
|
eidx -= 1
|
||||||
|
step = 1 if key.step is None else key.step
|
||||||
|
r = self.flat_index.section(sidx, eidx, step)
|
||||||
|
return asarray(r)
|
||||||
|
else:
|
||||||
|
r = self.flat_index.section(key)
|
||||||
|
return asarray(r)
|
||||||
|
|
||||||
|
def __setitem__(self, key, value):
|
||||||
|
if isinstance(value, (list, tuple)):
|
||||||
|
value = ArrayUtil.array(value, None)
|
||||||
|
|
||||||
|
if isinstance(key, int):
|
||||||
|
return self.flat_index.setSection(key, value)
|
||||||
|
elif isinstance(key, slice):
|
||||||
|
sidx = 0 if key.start is None else key.start
|
||||||
|
if sidx < 0:
|
||||||
|
sidx = self.size + sidx
|
||||||
|
eidx = self.size if key.stop is None else key.stop
|
||||||
|
if eidx < 0:
|
||||||
|
eidx = self.size + eidx
|
||||||
|
eidx -= 1
|
||||||
|
step = 1 if key.step is None else key.step
|
||||||
|
self.flat_index.setSection(sidx, eidx, step, value)
|
||||||
|
else:
|
||||||
|
self.flat_index.setSection(key, value)
|
||||||
@ -10,6 +10,7 @@ from org.meteoinfo.ndarray import Array, Range, MAMath, Complex, Dimension
|
|||||||
import datetime
|
import datetime
|
||||||
|
|
||||||
import _dtype
|
import _dtype
|
||||||
|
from ._base import flatiter
|
||||||
|
|
||||||
# The encapsulate class of Array
|
# The encapsulate class of Array
|
||||||
class NDArray(object):
|
class NDArray(object):
|
||||||
@ -20,10 +21,7 @@ class NDArray(object):
|
|||||||
self._array = array
|
self._array = array
|
||||||
self.ndim = array.getRank()
|
self.ndim = array.getRank()
|
||||||
s = array.getShape()
|
s = array.getShape()
|
||||||
s1 = []
|
self._shape = tuple(s)
|
||||||
for i in range(len(s)):
|
|
||||||
s1.append(s[i])
|
|
||||||
self._shape = tuple(s1)
|
|
||||||
self.dtype = _dtype.dtype.fromjava(array.getDataType())
|
self.dtype = _dtype.dtype.fromjava(array.getDataType())
|
||||||
self.size = int(self._array.getSize())
|
self.size = int(self._array.getSize())
|
||||||
self.iterator = array.getIndexIterator()
|
self.iterator = array.getIndexIterator()
|
||||||
@ -51,7 +49,7 @@ class NDArray(object):
|
|||||||
nvalue[idx] = int(self._array.getSize() / l)
|
nvalue[idx] = int(self._array.getSize() / l)
|
||||||
value = tuple(nvalue)
|
value = tuple(nvalue)
|
||||||
self._shape = value
|
self._shape = value
|
||||||
self.__init__(self._array.reshape(value))
|
self.__init__(self._array.reshapeNoCopy(value))
|
||||||
|
|
||||||
shape = property(get_shape, set_shape)
|
shape = property(get_shape, set_shape)
|
||||||
|
|
||||||
@ -82,7 +80,7 @@ class NDArray(object):
|
|||||||
if len(indices) < self.ndim:
|
if len(indices) < self.ndim:
|
||||||
if isinstance(indices, tuple):
|
if isinstance(indices, tuple):
|
||||||
indices = list(indices)
|
indices = list(indices)
|
||||||
for i in range(self.ndim - len(indices)):
|
for _ in range(self.ndim - len(indices)):
|
||||||
indices.append(slice(None))
|
indices.append(slice(None))
|
||||||
|
|
||||||
allint = True
|
allint = True
|
||||||
@ -299,6 +297,7 @@ class NDArray(object):
|
|||||||
else:
|
else:
|
||||||
r = ArrayMath.setSection_Mix(self._array, ranges, value)
|
r = ArrayMath.setSection_Mix(self._array, ranges, value)
|
||||||
self._array = r
|
self._array = r
|
||||||
|
self.iterator = self._array.getIndexIterator()
|
||||||
|
|
||||||
def __value_other(self, other):
|
def __value_other(self, other):
|
||||||
if isinstance(other, NDArray):
|
if isinstance(other, NDArray):
|
||||||
@ -437,8 +436,6 @@ class NDArray(object):
|
|||||||
"""
|
"""
|
||||||
provide iteration over the values of the array
|
provide iteration over the values of the array
|
||||||
"""
|
"""
|
||||||
#self.idx = -1
|
|
||||||
self.iterator = self._array.getIndexIterator()
|
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def next(self):
|
def next(self):
|
||||||
@ -446,10 +443,6 @@ class NDArray(object):
|
|||||||
return self.iterator.getObjectNext()
|
return self.iterator.getObjectNext()
|
||||||
else:
|
else:
|
||||||
raise StopIteration()
|
raise StopIteration()
|
||||||
# self.idx += 1
|
|
||||||
# if self.idx >= self.size:
|
|
||||||
# raise StopIteration()
|
|
||||||
# return self._array.getObject(self.idx)
|
|
||||||
|
|
||||||
def copy(self):
|
def copy(self):
|
||||||
'''
|
'''
|
||||||
@ -524,7 +517,7 @@ class NDArray(object):
|
|||||||
'''
|
'''
|
||||||
return ArrayMath.containsNaN(self._array)
|
return ArrayMath.containsNaN(self._array)
|
||||||
|
|
||||||
def getsize(self):
|
def getsize(self, name='size'):
|
||||||
if name == 'size':
|
if name == 'size':
|
||||||
sizestr = str(self.shape[0])
|
sizestr = str(self.shape[0])
|
||||||
if self.ndim > 1:
|
if self.ndim > 1:
|
||||||
@ -868,7 +861,7 @@ class NDArray(object):
|
|||||||
if not idx is None:
|
if not idx is None:
|
||||||
shape[idx] = self.size / n
|
shape[idx] = self.size / n
|
||||||
|
|
||||||
r = NDArray(self._array.reshape(shape))
|
r = NDArray(self._array.reshapeNoCopy(shape))
|
||||||
r.base = self.get_base()
|
r.base = self.get_base()
|
||||||
return r
|
return r
|
||||||
|
|
||||||
@ -930,13 +923,30 @@ class NDArray(object):
|
|||||||
|
|
||||||
I = property(inv)
|
I = property(inv)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def flat(self):
|
||||||
|
"""
|
||||||
|
A 1-D iterator over the array.
|
||||||
|
:return: 1-D iterator over the array.
|
||||||
|
"""
|
||||||
|
return flatiter(self)
|
||||||
|
|
||||||
|
@flat.setter
|
||||||
|
def flat(self, value):
|
||||||
|
"""
|
||||||
|
flat setter.
|
||||||
|
:param value: The setting value.
|
||||||
|
"""
|
||||||
|
self.flat[:] = value
|
||||||
|
|
||||||
def flatten(self):
|
def flatten(self):
|
||||||
'''
|
'''
|
||||||
Return a copy of the array collapsed into one dimension.
|
Return a copy of the array collapsed into one dimension.
|
||||||
|
|
||||||
:returns: (*NDArray*) A copy of the input array, flattened to one dimension.
|
:returns: (*NDArray*) A copy of the input array, flattened to one dimension.
|
||||||
'''
|
'''
|
||||||
r = self.reshape(int(self._array.getSize()))
|
shape = [self.size]
|
||||||
|
r = NDArray(self._array.reshape(shape))
|
||||||
return r
|
return r
|
||||||
|
|
||||||
def ravel(self):
|
def ravel(self):
|
||||||
@ -945,7 +955,8 @@ class NDArray(object):
|
|||||||
|
|
||||||
:returns: (*NDArray*) A copy of the input array, flattened to one dimension.
|
:returns: (*NDArray*) A copy of the input array, flattened to one dimension.
|
||||||
'''
|
'''
|
||||||
r = self.reshape(int(self._array.getSize()))
|
shape = [self.size]
|
||||||
|
r = NDArray(self._array.reshape(shape))
|
||||||
return r
|
return r
|
||||||
|
|
||||||
def repeat(self, repeats, axis=None):
|
def repeat(self, repeats, axis=None):
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<MeteoInfo File="config.xml" Type="configurefile">
|
<MeteoInfo File="config.xml" Type="configurefile">
|
||||||
<Path OpenPath="D:\Temp\HYSPLIT"/>
|
<Path OpenPath="D:\Temp\traj\Sample"/>
|
||||||
<Font>
|
<Font>
|
||||||
<TextFont FontName="YaHei Consolas Hybrid" FontSize="14"/>
|
<TextFont FontName="YaHei Consolas Hybrid" FontSize="14"/>
|
||||||
<LegendFont FontName="宋体" FontSize="12"/>
|
<LegendFont FontName="宋体" FontSize="12"/>
|
||||||
@ -8,5 +8,5 @@
|
|||||||
<ScriptLanguage Language="Jython"/>
|
<ScriptLanguage Language="Jython"/>
|
||||||
<LookFeel LafDecorated="true" Name="FlatLightLaf"/>
|
<LookFeel LafDecorated="true" Name="FlatLightLaf"/>
|
||||||
<Figure DoubleBuffering="true"/>
|
<Figure DoubleBuffering="true"/>
|
||||||
<Startup MainFormLocation="-6,2" MainFormSize="1293,693" ShowMeteoDataDlg="true"/>
|
<Startup MainFormLocation="-7,-7" MainFormSize="1293,693" ShowMeteoDataDlg="false"/>
|
||||||
</MeteoInfo>
|
</MeteoInfo>
|
||||||
|
|||||||
@ -0,0 +1,148 @@
|
|||||||
|
package org.meteoinfo.ndarray;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class FlatIndex {
|
||||||
|
private Array array;
|
||||||
|
private Index index;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
* @param array The array
|
||||||
|
*/
|
||||||
|
public FlatIndex(Array array) {
|
||||||
|
this.array = array;
|
||||||
|
this.index = this.array.getIndex();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get object
|
||||||
|
* @param idx The flat index
|
||||||
|
* @return The object
|
||||||
|
*/
|
||||||
|
public Object getObject(int idx) {
|
||||||
|
this.index.setCurrentIndex(idx);
|
||||||
|
return this.array.getObject(this.index);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set object
|
||||||
|
* @param idx The flat index
|
||||||
|
* @param value The object
|
||||||
|
*/
|
||||||
|
public void setObject(int idx, Object value) {
|
||||||
|
this.index.setCurrentIndex(idx);
|
||||||
|
this.array.setObject(this.index, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get section array
|
||||||
|
* @param first The first index
|
||||||
|
* @param last The last index
|
||||||
|
* @param stride The stride
|
||||||
|
* @return Array
|
||||||
|
*/
|
||||||
|
public Array section(int first, int last, int stride) {
|
||||||
|
int n = 1 + Math.abs(last - first) / Math.abs(stride);
|
||||||
|
Array r = Array.factory(this.array.dataType, new int[]{n});
|
||||||
|
int ii = 0;
|
||||||
|
if (last >= first) {
|
||||||
|
for (int i = first; i <= last; i += stride) {
|
||||||
|
index.setCurrentIndex(i);
|
||||||
|
r.setObject(ii, this.array.getObject(index));
|
||||||
|
ii += 1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (int i = first; i >= last; i += stride) {
|
||||||
|
index.setCurrentIndex(i);
|
||||||
|
r.setObject(ii, this.array.getObject(index));
|
||||||
|
ii += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set section array
|
||||||
|
* @param idx Index list
|
||||||
|
* @return Section array
|
||||||
|
*/
|
||||||
|
public Array section(List<Integer> idx) {
|
||||||
|
Array r = Array.factory(this.array.dataType, new int[]{idx.size()});
|
||||||
|
int ii = 0;
|
||||||
|
for (int i : idx) {
|
||||||
|
this.index.setCurrentIndex(i);
|
||||||
|
r.setObject(ii, this.array.getObject(this.index));
|
||||||
|
ii += 1;
|
||||||
|
}
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set section array
|
||||||
|
* @param first The first index
|
||||||
|
* @param last The last index
|
||||||
|
* @param stride The stride
|
||||||
|
* @param value The value
|
||||||
|
*/
|
||||||
|
public void setSection(int first, int last, int stride, Object value) {
|
||||||
|
if (last >= first) {
|
||||||
|
for (int i = first; i <= last; i += stride) {
|
||||||
|
index.setCurrentIndex(i);
|
||||||
|
this.array.setObject(index, value);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (int i = first; i >= last; i += stride) {
|
||||||
|
index.setCurrentIndex(i);
|
||||||
|
this.array.setObject(index, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set section array
|
||||||
|
* @param first The first index
|
||||||
|
* @param last The last index
|
||||||
|
* @param stride The stride
|
||||||
|
* @param value The value array
|
||||||
|
*/
|
||||||
|
public void setSection(int first, int last, int stride, Array value) {
|
||||||
|
IndexIterator iterator = value.getIndexIterator();
|
||||||
|
if (last >= first) {
|
||||||
|
for (int i = first; i <= last; i += stride) {
|
||||||
|
index.setCurrentIndex(i);
|
||||||
|
this.array.setObject(index, iterator.getObjectNext());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (int i = first; i >= last; i += stride) {
|
||||||
|
index.setCurrentIndex(i);
|
||||||
|
this.array.setObject(index, iterator.getObjectNext());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set section
|
||||||
|
* @param idx Index list
|
||||||
|
* @param value Value
|
||||||
|
*/
|
||||||
|
public void setSection(List<Integer> idx, Object value) {
|
||||||
|
for (int i : idx) {
|
||||||
|
this.index.setCurrentIndex(i);
|
||||||
|
this.array.setObject(index, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set section
|
||||||
|
* @param idx Index list
|
||||||
|
* @param value Value array
|
||||||
|
*/
|
||||||
|
public void setSection(List<Integer>idx, Array value) {
|
||||||
|
IndexIterator iterator = value.getIndexIterator();
|
||||||
|
for (int i : idx) {
|
||||||
|
this.index.setCurrentIndex(i);
|
||||||
|
this.array.setObject(index, iterator.getObjectNext());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -581,6 +581,28 @@ public class Index implements Cloneable {
|
|||||||
set(current); // transfer to subclass fields
|
set(current); // transfer to subclass fields
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the current index from the 1D "current index" currIndex =
|
||||||
|
* stride[0]*current[0] + ...
|
||||||
|
*
|
||||||
|
* @param currIndex set to this value
|
||||||
|
*/
|
||||||
|
public void setCurrentIndex(int currIndex) {
|
||||||
|
int[] cc = new int[rank];
|
||||||
|
int len;
|
||||||
|
for (int ii = 0; ii < rank; ii++) { // general rank
|
||||||
|
len = 1;
|
||||||
|
for (int i = ii + 1; i < rank; i++) {
|
||||||
|
len *= shape[i];
|
||||||
|
}
|
||||||
|
cc[ii] = currIndex / len;
|
||||||
|
currIndex -= len * cc[ii];
|
||||||
|
if (currIndex == 0)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
set(cc); // transfer to subclass fields
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Increment the current element by 1. Used by IndexIterator. General rank,
|
* Increment the current element by 1. Used by IndexIterator. General rank,
|
||||||
* with subclass specialization. Vlen skipped.
|
* with subclass specialization. Vlen skipped.
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user