@Override public IndexMappingProvider create(final IndexMappingProvider opu, final Tensor from, final Tensor to) { if (from.equals(to)) if (((Complex) from).isZero()) return new PlusMinusIndexMappingProvider(opu); else return new DummyIndexMappingProvider(opu); else if (from.equals(((Complex) to).negate())) return new MinusIndexMappingProvider(opu); return IndexMappingProvider.Util.EMPTY_PROVIDER; } };
@Override public IndexMappingProvider create(IndexMappingProvider opu, Tensor from, Tensor to) { OutputPort<IndexMappingBuffer> mp = IndexMappings.createPortOfBuffers(from.get(0), to.get(0)); IndexMappingBuffer buffer; byte state = 0; while ((buffer = mp.take()) != null) { state |= (byte) (buffer.getSign() ? 0x10 : 0x01); if (state == 0x11) break; } switch (state) { case 0x00: return IndexMappingProvider.Util.EMPTY_PROVIDER; case 0x01: return new DummyIndexMappingProvider(opu); case 0x10: return new MinusIndexMappingProvider(opu); case 0x11: return new PlusMinusIndexMappingProvider(opu); default: throw new RuntimeException("Ups"); } } };