/* * JacORB - a free Java ORB * * Copyright (C) 1999-2014 Gerald Brose / The JacORB Team. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * */ package org.jacorb.collection; import org.jacorb.collection.util.ObjectInvalid; import org.omg.CORBA.Any; import org.omg.CosCollection.ElementInvalid; import org.omg.CosCollection.ElementInvalidReason; import org.omg.CosCollection.EqualityKeySortedCollectionOperations; import org.omg.CosCollection.IteratorInBetween; import org.omg.CosCollection.IteratorInvalid; import org.omg.CosCollection.OperationsOperations; import org.omg.PortableServer.POA; class EqualityKeySortedCollectionImpl extends KeySortedCollectionImpl implements EqualityKeySortedCollectionOperations { /* ========================================================================= */ EqualityKeySortedCollectionImpl( OperationsOperations ops, POA poa, IteratorFactory iterator_factory ) { super( ops, poa, iterator_factory ); } /* ========================================================================= */ public synchronized boolean contains_element(Any element) throws ElementInvalid { check_element( element ); try { return data.indexOf( element ) >= 0; } catch ( ObjectInvalid e ) { throw new ElementInvalid( ElementInvalidReason.element_type_invalid ); } } /* ------------------------------------------------------------------------- */ public synchronized boolean contains_all_from(org.omg.CosCollection.Collection collector) throws ElementInvalid { throw new org.omg.CORBA.NO_IMPLEMENT(); } /* ------------------------------------------------------------------------- */ public synchronized boolean locate_or_add_element(Any element) throws ElementInvalid{ check_element( element ); try { if( data.indexOf( element ) < 0 ){ element_add( element ); return false; } return true; } catch ( ObjectInvalid e ){ throw new ElementInvalid( ElementInvalidReason.element_type_invalid ); } } /* ------------------------------------------------------------------------- */ public synchronized boolean locate_or_add_element_set_iterator(Any element, org.omg.CosCollection.Iterator where) throws ElementInvalid,IteratorInvalid{ check_element( element ); PositionalIteratorImpl i = check_iterator( where ); try { int pos = data.indexOf( element ); if( pos < 0 ){ pos = element_add( element ); i.set_pos( pos ); i.set_in_between( false ); return false; } else { i.set_pos( pos ); i.set_in_between( false ); return true; } } catch ( ObjectInvalid e ){ throw new ElementInvalid( ElementInvalidReason.element_type_invalid ); } } /* ------------------------------------------------------------------------- */ public synchronized boolean locate_element(Any element, org.omg.CosCollection.Iterator where) throws ElementInvalid,IteratorInvalid{ check_element( element ); PositionalIteratorImpl i = check_iterator( where ); try { int pos = data.indexOf( element ); if( pos >= 0 ){ i.set_pos( pos ); i.set_in_between( false ); return true; } else { i.invalidate(); return false; } } catch ( ObjectInvalid e ){ throw new ElementInvalid( ElementInvalidReason.element_type_invalid ); } } /* ------------------------------------------------------------------------- */ public synchronized boolean locate_next_element(Any element, org.omg.CosCollection.Iterator where) throws ElementInvalid,IteratorInvalid{ check_element( element ); PositionalIteratorImpl i = check_iterator( where ); i.check_invalid(); try { int pos = data.indexOf( element ); if( pos >= 0 ){ int new_pos = i.is_in_between()?pos:pos+1; while( new_pos < data.size() && ops.compare( element, (Any)data.elementAt(new_pos) ) == 0 ){ if( ops.equal( element, (Any)data.elementAt( new_pos ) ) ){ i.set_pos( new_pos ); i.set_in_between( false ); return true; } new_pos++; } } i.invalidate(); return false; } catch ( ObjectInvalid e ){ throw new ElementInvalid( ElementInvalidReason.element_type_invalid ); } } /* ------------------------------------------------------------------------- */ public synchronized boolean locate_next_different_element(org.omg.CosCollection.Iterator where) throws IteratorInvalid,IteratorInBetween { PositionalIteratorImpl i = check_iterator( where ); i.check_iterator(); int pos = i.get_pos(); Any element = (Any)data.elementAt( pos ); if( pos >= 0 ){ int new_pos = pos+1; while( new_pos < data.size() ){ if( ops.compare( element, (Any)data.elementAt( new_pos ) ) != 0 || !ops.equal( element, (Any)data.elementAt( new_pos ) ) ){ i.set_pos( new_pos ); i.set_in_between( false ); return true; } new_pos++; } } i.invalidate(); return false; } /* ------------------------------------------------------------------------- */ public synchronized boolean remove_element(Any element) throws ElementInvalid { check_element( element ); try { int pos = data.indexOf( element ); if( pos >= 0 ){ element_remove( 0 ); return true; } return false; } catch ( ObjectInvalid e ){ throw new ElementInvalid( ElementInvalidReason.element_type_invalid ); } catch ( Exception e ){ e.printStackTrace( System.out ); throw new org.omg.CORBA.INTERNAL(); } } /* ------------------------------------------------------------------------- */ public synchronized int remove_all_occurrences(Any element) throws ElementInvalid{ check_element( element ); try { int pos = data.indexOf( element ); int count = 0; while( pos < data.size() && ops.equal( element, (Any)data.elementAt( pos ) ) ){ element_remove( pos ); count++; } return count; } catch ( ObjectInvalid e ){ throw new ElementInvalid( ElementInvalidReason.element_type_invalid ); } catch ( Exception e ){ e.printStackTrace( System.out ); throw new org.omg.CORBA.INTERNAL(); } } /* ------------------------------------------------------------------------ */ public synchronized int number_of_different_elements(){ throw new org.omg.CORBA.NO_IMPLEMENT(); } /* ------------------------------------------------------------------------- */ public synchronized int number_of_occurrences(Any element) throws ElementInvalid{ throw new org.omg.CORBA.NO_IMPLEMENT(); } /* ========================================================================= */ /* Overrided */ /* ========================================================================= */ public synchronized org.omg.CosCollection.Iterator create_iterator(boolean read_only) { return create_ordered_iterator( read_only, false ); } }