예제 #1
0
        private static void Iterate(
            IteratorBindingContext context,
            IEnumerable sequence,
            Action <TextWriter, object> template,
            Action <TextWriter, object> ifEmpty)
        {
            context.Index = 0;

            var iter = sequence.GetEnumerator();

            using (iter as IDisposable)
            {
                if (iter.MoveNext())
                {
                    var item = iter.Current;
                    while (!context.Last)
                    {
                        context.Last  = !iter.MoveNext();
                        context.First = (context.Index == 0);
                        template(context.TextWriter, item);
                        context.Index++;

                        if (!context.Last)
                        {
                            item = iter.Current;
                        }
                    }
                }
            }

            if (context.Index == 0)
            {
                ifEmpty(context.TextWriter, context.Value);
            }
        }
예제 #2
0
 //TODO: make this a little less dumb
 private static void Iterate(
     IteratorBindingContext context,
     IEnumerable sequence,
     Action <TextWriter, object> template,
     Action <TextWriter, object> ifEmpty)
 {
     context.Index = 0;
     context.First = sequence.Cast <object>().FirstOrDefault(); //TODO: don't enumerate multiple times
     context.Last  = sequence.Cast <object>().LastOrDefault();  //TODO: don't enumerate multiple times
     foreach (object item in sequence)
     {
         template(context.TextWriter, item);
         context.Index++;
     }
     if (context.Index == 0)
     {
         ifEmpty(context.TextWriter, context.Value);
     }
 }
예제 #3
0
        //TODO: make this a little less dumb
        private static void Iterate(
            IteratorBindingContext context,
            IEnumerable sequence,
            Action <TextWriter, object> template,
            Action <TextWriter, object> ifEmpty)
        {
            context.Index = 0;
            int length = (sequence is IList ? ((IList)sequence).Count : sequence.Cast <object>().Count());

            foreach (object item in sequence)
            {
                context.First = (context.Index == 0);
                context.Last  = (context.Index == length - 1);
                template(context.TextWriter, item);
                context.Index++;
            }
            if (context.Index == 0)
            {
                ifEmpty(context.TextWriter, context.Value);
            }
        }
예제 #4
0
        private static void Iterate(
            IteratorBindingContext context,
            IEnumerable sequence,
            Action <TextWriter, object> template,
            Action <TextWriter, object> ifEmpty)
        {
            context.Index = 0;
            foreach (var enumeratorValue in new ExtendedEnumerable <object>(sequence))
            {
                var item = enumeratorValue.Value;
                context.First = enumeratorValue.IsFirst;
                context.Last  = enumeratorValue.IsLast;
                context.Index = enumeratorValue.Index;

                template(context.TextWriter, item);
            }

            if (context.Index == 0)
            {
                ifEmpty(context.TextWriter, context.Value);
            }
        }
예제 #5
0
 //TODO: make this a little less dumb
 private static void Iterate(
     IteratorBindingContext context,
     IEnumerable sequence,
     Action<TextWriter, object> template,
     Action<TextWriter, object> ifEmpty)
 {
     context.Index = 0;
     int length = (sequence is IList ? ((IList)sequence).Count : sequence.Cast<object>().Count());
     foreach (object item in sequence)
     {
         context.First = (context.Index == 0);
         context.Last = (context.Index == length - 1);
         template(context.TextWriter, item);
         context.Index++;
     }
     if (context.Index == 0)
     {
         ifEmpty(context.TextWriter, context.Value);
     }
 }
예제 #6
0
 //TODO: make this a little less dumb
 private static void Iterate(
     IteratorBindingContext context,
     IEnumerable sequence,
     Action<TextWriter, object> template,
     Action<TextWriter, object> ifEmpty)
 {
     context.Index = 0;
     context.First = sequence.Cast<object>().FirstOrDefault(); //TODO: don't enumerate multiple times
     context.Last = sequence.Cast<object>().LastOrDefault(); //TODO: don't enumerate multiple times
     foreach(object item in sequence)
     {
         template(context.TextWriter, item);
         context.Index++;
     }
     if(context.Index == 0)
     {
         ifEmpty(context.TextWriter, context.Value);
     }
 }