// <copyright company="APX Labs, Inc."> // Copyright (c) APX Labs, Inc. All rights reserved. // </copyright> // // 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. using System; using System.Collections.Generic; namespace ApxLabs.FastAndroidCamera { internal class FastJavaByteArrayEnumerator : IEnumerator<byte> { internal FastJavaByteArrayEnumerator(FastJavaByteArray arr) { if (arr == null) throw new ArgumentNullException(); _arr = arr; _idx = 0; } /// <summary> /// Gets the current byte in the collection. /// </summary> public byte Current { get { byte retval; unsafe { // get value from pointer retval = _arr.Raw[_idx]; } return retval; } } /// <summary> /// Releases all resource used by the <see cref="T:ApxLabs.FastAndroidCamera.FastJavaByteArrayEnumerator"/> object. /// </summary> /// <remarks>Call <see cref="Dispose"/> when you are finished using the /// <see cref="T:ApxLabs.FastAndroidCamera.FastJavaByteArrayEnumerator"/>. The <see cref="Dispose"/> method leaves the /// <see cref="T:ApxLabs.FastAndroidCamera.FastJavaByteArrayEnumerator"/> in an unusable state. After calling /// <see cref="Dispose"/>, you must release all references to the /// <see cref="T:ApxLabs.FastAndroidCamera.FastJavaByteArrayEnumerator"/> so the garbage collector can reclaim the /// memory that the <see cref="T:ApxLabs.FastAndroidCamera.FastJavaByteArrayEnumerator"/> was occupying.</remarks> public void Dispose() { } /// <summary> /// Advances the enumerator to the next element of the collection. /// </summary> /// <returns><c>true</c> if the enumerator was successfully advanced to the next element; <c>false</c> if the enumerator has passed the end of the collection.</returns> public bool MoveNext() { if (_idx > _arr.Count) return false; ++_idx; return _idx < _arr.Count; } /// <summary> /// Sets the enumerator to its initial position, which is before the first element in the collection. /// </summary> public void Reset() { _idx = 0; } #region IEnumerator implementation /// <summary> /// Gets the current element in the collection. /// </summary> /// <value>The system. collections. IE numerator. current.</value> object System.Collections.IEnumerator.Current { get { byte retval; unsafe { // get value from pointer retval = _arr.Raw[_idx]; } return retval; } } #endregion FastJavaByteArray _arr; int _idx; } }