/* * Javolution - Java(TM) Solution for Real-Time and Embedded Systems * Copyright (C) 2012 - Javolution (http://javolution.org/) * All rights reserved. * * Permission to use, copy, modify, and distribute this software is * freely granted, provided that this notice is preserved. */ package javolution.util.internal.table.sorted; import javolution.util.internal.table.TableView; import javolution.util.service.SortedTableService; /** * Sorted table view implementation; can be used as root class for implementations * if target is {@code null}. */ public abstract class SortedTableView<E> extends TableView<E> implements SortedTableService<E> { private static final long serialVersionUID = 0x600L; // Version. /** * The view constructor or root class constructor if target is {@code null}. */ public SortedTableView(SortedTableService<E> target) { super(target); } @Override public boolean add(E element) { int i = positionOf(element); add((i < 0) ? -i-1 : i, element); return true; } @Override public boolean addIfAbsent(E element) { int i = positionOf(element); if (i >= 0) return false; add(-i-1, element); return true; } @SuppressWarnings("unchecked") @Override public int indexOf(Object element) { int i = positionOf((E)element); return (i >= 0) ? i : -1; } @SuppressWarnings("unchecked") @Override public int lastIndexOf(Object o) { int i = positionOf((E) o); if (i < 0) return -1; while ((++i < size()) && comparator().equal((E) o, get(i))) { } return --i; } @Override public abstract int positionOf(E element); @Override public SortedTableService<E>[] split(int n, boolean updateable) { return SubSortedTableImpl.splitOf(this, n, updateable); // Sub-views over this. } @Override protected SortedTableService<E> target() { return (SortedTableService<E>) super.target(); } }