From 86b7bd05e5e839f7d70296065f4373098e44669a Mon Sep 17 00:00:00 2001 From: "Brian S. O'Neill" Date: Tue, 19 Sep 2006 06:22:33 +0000 Subject: Added SingletonCursor. --- .../com/amazon/carbonado/cursor/EmptyCursor.java | 1 + .../amazon/carbonado/cursor/SingletonCursor.java | 103 +++++++++++++++++++++ 2 files changed, 104 insertions(+) create mode 100644 src/main/java/com/amazon/carbonado/cursor/SingletonCursor.java (limited to 'src/main/java/com/amazon') diff --git a/src/main/java/com/amazon/carbonado/cursor/EmptyCursor.java b/src/main/java/com/amazon/carbonado/cursor/EmptyCursor.java index e0649cd..d851f0e 100644 --- a/src/main/java/com/amazon/carbonado/cursor/EmptyCursor.java +++ b/src/main/java/com/amazon/carbonado/cursor/EmptyCursor.java @@ -29,6 +29,7 @@ import com.amazon.carbonado.Cursor; * Special cursor implementation that is empty. * * @author Brian S O'Neill + * @see SingletonCursor */ public class EmptyCursor implements Cursor { private static final Cursor EMPTY_CURSOR = new EmptyCursor(); diff --git a/src/main/java/com/amazon/carbonado/cursor/SingletonCursor.java b/src/main/java/com/amazon/carbonado/cursor/SingletonCursor.java new file mode 100644 index 0000000..55b6cb6 --- /dev/null +++ b/src/main/java/com/amazon/carbonado/cursor/SingletonCursor.java @@ -0,0 +1,103 @@ +/* + * Copyright 2006 Amazon Technologies, Inc. or its affiliates. + * Amazon, Amazon.com and Carbonado are trademarks or registered trademarks + * of Amazon Technologies, Inc. or its affiliates. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.amazon.carbonado.cursor; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.NoSuchElementException; + +import com.amazon.carbonado.Cursor; + +/** + * Special cursor implementation that returns only one element. + * + * @author Brian S O'Neill + * @see EmptyCursor + */ +public class SingletonCursor implements Cursor { + private volatile S mObject; + + /** + * @param object single object to return from cursor, must not be null + * @throws IllegalArgumentException if object is null + */ + public SingletonCursor(S object) { + if (object == null) { + throw new IllegalArgumentException(); + } + mObject = object; + } + + public void close() { + mObject = null; + } + + public boolean hasNext() { + return mObject != null; + } + + public S next() { + S object = mObject; + mObject = null; + if (object == null) { + throw new NoSuchElementException(); + } + return object; + } + + public int skipNext(int amount) { + if (amount <= 0) { + if (amount < 0) { + throw new IllegalArgumentException("Cannot skip negative amount: " + amount); + } + return 0; + } + S object = mObject; + mObject = null; + return object == null ? 0 : 1; + } + + public int copyInto(Collection c) { + S object = mObject; + mObject = null; + if (object == null) { + return 0; + } + int originalSize = c.size(); + c.add(object); + return originalSize + 1; + } + + public int copyInto(Collection c, int limit) { + return limit <= 0 ? 0 : copyInto(c); + } + + public List toList() { + List list = new ArrayList(1); + copyInto(list); + return list; + } + + public List toList(int limit) { + List list = new ArrayList(1); + copyInto(list, limit); + return list; + } +} -- cgit v1.2.3