view Source/Mapping/EnumeratorMapper.cs @ 9:1e85f66cf767 default tip

update bltoolkit
author nickolay
date Thu, 05 Apr 2018 20:53:26 +0300
parents f990fcb411a9
children
line wrap: on
line source

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
	}
}