コード例 #1
0
        public static ILeoSelector <TVal> Select <TVal>(this ILeoVisitor visitor, Func <string, object, LeoMember, TVal> loopFunc)
        {
            if (visitor is null)
            {
                throw new ArgumentNullException(nameof(visitor));
            }
            var rel = (ICoreVisitor)visitor;

            if (rel.LiteMode == LvMode.LITE)
            {
                throw new InvalidOperationException("Lite mode visitor has no Member handler.");
            }
            return(new LeoSelector <TVal>(rel.Owner, rel.ExposeLazyMemberHandler(), loopFunc));
        }
コード例 #2
0
        public static ILeoLooper <T> ForEach <T>(this ILeoVisitor <T> visitor, Action <LeoLoopContext> loopAct)
        {
            if (visitor is null)
            {
                throw new ArgumentNullException(nameof(visitor));
            }
            var rel = (ICoreVisitor <T>)visitor;

            if (rel.LiteMode == LvMode.LITE)
            {
                throw new InvalidOperationException("Lite mode visitor has no Member handler.");
            }
            return(new LeoLooper <T>(rel.Owner, rel.ExposeLazyMemberHandler(), loopAct));
        }
コード例 #3
0
        public static ILeoRepeater <T> ForRepeat <T>(this ILeoVisitor <T> visitor)
        {
            if (visitor is null)
            {
                throw new ArgumentNullException(nameof(visitor));
            }
            if (visitor.IsStatic)
            {
                return(new EmptyRepeater <T>());
            }
            var rel = (ICoreVisitor <T>)visitor;

            if (rel.ExposeHistoricalContext() is null)
            {
                return(new EmptyRepeater <T>());
            }
            return(new LeoRepeater <T>(rel.ExposeHistoricalContext()));
        }
コード例 #4
0
        public static bool TryRepeatAs <TObj>(this ILeoVisitor visitor, IDictionary <string, object> keyValueCollections, out TObj result)
        {
            result = default;
            var ret = visitor.TryRepeat(keyValueCollections, out var val);

            if (!ret)
            {
                return(false);
            }

            try
            {
                result = (TObj)val;
                return(true);
            }
            catch
            {
                return(false);
            }
        }
コード例 #5
0
        public static bool TryRepeatAs <TObj>(this ILeoVisitor visitor, object instance, out TObj result)
        {
            result = default;
            var ret = visitor.TryRepeat(instance, out var val);

            if (!ret)
            {
                return(false);
            }

            try
            {
                result = (TObj)val;
                return(true);
            }
            catch
            {
                return(false);
            }
        }
コード例 #6
0
        public static bool TryRepeat <T>(this ILeoVisitor <T> visitor, IDictionary <string, object> keyValueCollections, out T result)
        {
            if (visitor is null)
            {
                throw new ArgumentNullException(nameof(visitor));
            }
            result = default;
            if (visitor.IsStatic)
            {
                return(false);
            }
            var rel = (ICoreVisitor <T>)visitor;

            if (rel.ExposeHistoricalContext() is null)
            {
                return(false);
            }
            result = rel.ExposeHistoricalContext().Repeat(keyValueCollections);
            return(true);
        }
コード例 #7
0
        public static bool TryRepeat <T>(this ILeoVisitor <T> visitor, T instance, out T result)
        {
            if (visitor is null)
            {
                throw new ArgumentNullException(nameof(visitor));
            }
            result = default;
            if (visitor.IsStatic)
            {
                return(false);
            }
            var rel = (ICoreVisitor <T>)visitor;

            if (rel.ExposeHistoricalContext() is null)
            {
                return(false);
            }
            result = rel.ExposeHistoricalContext().Repeat(instance);
            return(true);
        }
コード例 #8
0
        public static Dictionary <string, object> ToDictionary <T>(this ILeoVisitor <T> visitor)
        {
            if (visitor is null)
            {
                throw new ArgumentNullException(nameof(visitor));
            }
            var val = new Dictionary <string, object>();
            var rel = (ICoreVisitor <T>)visitor;

            if (rel.LiteMode == LvMode.LITE)
            {
                throw new InvalidOperationException("Lite mode visitor has no Member handler.");
            }
            var lazyHandler = rel.ExposeLazyMemberHandler();

            foreach (var name in lazyHandler.Value.GetNames())
            {
                val[name] = visitor.GetValue(name);
            }
            return(val);
        }
コード例 #9
0
 public static bool TryRepeatAs <T>(this ILeoVisitor <T> visitor, IDictionary <string, object> keyValueCollections, out T result)
 {
     result = default;
     return(visitor.TryRepeat(keyValueCollections, out result));
 }
コード例 #10
0
 public static bool TryRepeatAs <T>(this ILeoVisitor <T> visitor, T instance, out T result)
 {
     result = default;
     return(visitor.TryRepeat(instance, out result));
 }
コード例 #11
0
 public LeoSelector(ILeoVisitor visitor, Lazy <MemberHandler> memberHandler, Func <LeoLoopContext, TVal> loopFunc)
 {
     _visitor       = visitor ?? throw new ArgumentNullException(nameof(visitor));
     _memberHandler = memberHandler ?? throw new ArgumentNullException(nameof(memberHandler));
     _context       = new InternalLeoSelectingContext <TVal>(loopFunc);
 }
コード例 #12
0
 public static T Create <T>(IDictionary <string, object> keyValueCollections, out ILeoVisitor <T> visitor, AlgorithmKind kind = AlgorithmKind.Precision)
 {
     visitor = LeoVisitorFactory.Create <T>(keyValueCollections, kind);
     return(visitor.Instance);
 }
コード例 #13
0
 public static object Create(Type type, IDictionary <string, object> keyValueCollections, out ILeoVisitor visitor, AlgorithmKind kind = AlgorithmKind.Precision)
 {
     visitor = LeoVisitorFactory.Create(type, keyValueCollections, kind);
     return(visitor.Instance);
 }
コード例 #14
0
ファイル: ValueSetter.cs プロジェクト: wwwK/Leo
 public ValueSetter(ILeoVisitor visitor, string name)
 {
     _visitor = visitor;
     _setter  = val => visitor.SetValue(name, val);
 }
コード例 #15
0
ファイル: ValueGetter.cs プロジェクト: wwwK/Leo
 public ValueGetter(ILeoVisitor visitor, string name)
 {
     _visitor = visitor;
     _getter  = () => visitor.GetValue(name);
 }
コード例 #16
0
ファイル: LeoLooper.cs プロジェクト: wwwK/Leo
 public LeoLooper(ILeoVisitor visitor, Lazy <MemberHandler> memberHandler, Action <LeoLoopContext> loopAct)
 {
     _visitor       = visitor ?? throw new ArgumentNullException(nameof(visitor));
     _memberHandler = memberHandler ?? throw new ArgumentNullException(nameof(memberHandler));
     _context       = new InternalLeoLoopingContext(loopAct);
 }