diff Source/Mapping/EnumeratorMapper.cs @ 0:f990fcb411a9

Копия текущей версии из github
author cin
date Thu, 27 Mar 2014 21:46:09 +0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Source/Mapping/EnumeratorMapper.cs	Thu Mar 27 21:46:09 2014 +0400
@@ -0,0 +1,51 @@
+using System;
+using System.Collections;
+
+using BLToolkit.Reflection;
+
+namespace BLToolkit.Mapping
+{
+	public class EnumeratorMapper : IMapDataSourceList
+	{
+		public EnumeratorMapper(IEnumerator enumerator)
+		{
+			_enumerator = enumerator;
+		}
+
+		private readonly IEnumerator _enumerator;
+		private          Type        _objectType;
+
+		#region IMapDataSourceList Members
+
+		public virtual void InitMapping(InitContext initContext)
+		{
+			_enumerator.Reset();
+		}
+
+		public virtual bool SetNextDataSource(InitContext initContext)
+		{
+			if (initContext == null) throw new ArgumentNullException("initContext");
+
+			if (_enumerator.MoveNext() == false)
+				return false;
+
+			object sourceObject = _enumerator.Current;
+
+			if (_objectType != sourceObject.GetType())
+			{
+				_objectType = sourceObject.GetType();
+				initContext.DataSource = initContext.MappingSchema.GetObjectMapper(_objectType);
+			}
+
+			initContext.SourceObject = sourceObject;
+
+			return true;
+		}
+
+		public virtual void EndMapping(InitContext initContext)
+		{
+		}
+
+		#endregion
+	}
+}