Esempio n. 1
0
        private static IErlObject coreToErlObject(object o, ErlTypeOrder etp, bool strict)
        {
            var eh = strict ? ConvertErrorHandling.Throw : ConvertErrorHandling.ReturnDefault;

            var e = o as IErlObject;

            if (e != null)
            {
                return(e);
            }

            try
            {
                switch (etp)
                {
                case ErlTypeOrder.ErlObject:
                case ErlTypeOrder.ErlAtom:      return(new ErlAtom(o.ToString()));

                case ErlTypeOrder.ErlBinary:    return(new ErlBinary((byte[])o));

                case ErlTypeOrder.ErlBoolean:   return(new ErlBoolean(o.AsBool(handling: eh)));

                case ErlTypeOrder.ErlByte:      return(new ErlByte(o.AsByte(handling: eh)));

                case ErlTypeOrder.ErlDouble:    return(new ErlDouble(o.AsDouble(handling: eh)));

                case ErlTypeOrder.ErlLong:      return(new ErlLong(o.AsLong(handling: eh)));

                case ErlTypeOrder.ErlList:
                {
                    var list = new ErlList();
                    foreach (var item in (IEnumerable)o)
                    {
                        list.Add(item.ToErlObject());
                    }
                    return(list);
                }

                case ErlTypeOrder.ErlString:    return(new ErlString(o.AsString(handling: eh)));

                case ErlTypeOrder.ErlTuple:     return(new ErlTuple((object[])o));

                case ErlTypeOrder.ErlPid:
                case ErlTypeOrder.ErlPort:
                case ErlTypeOrder.ErlRef:
                case ErlTypeOrder.ErlVar:
                default:
                    throw new Exception();
                }
            }
            catch (Exception)
            {
                throw new ErlException
                          (StringConsts.ERL_CANNOT_CONVERT_TYPES_ERROR, o.GetType().ToString(), etp.ToString());
            }
        }
Esempio n. 2
0
 private static IErlObject coreToErlObject(object o)
 {
     // Erlang terms
     if (o is IErlObject)
     {
         return((IErlObject)o);
     }
     // Native types
     if (o is int)
     {
         return(new ErlLong((int)o));
     }
     else if (o is uint)
     {
         return(new ErlLong((uint)o));
     }
     else if (o is long)
     {
         return(new ErlLong((long)o));
     }
     else if (o is ulong)
     {
         return(new ErlLong((long)(ulong)o));
     }
     else if (o is double)
     {
         return(new ErlDouble((double)o));
     }
     else if (o is float)
     {
         return(new ErlDouble((float)o));
     }
     else if (o is string)
     {
         return(new ErlString((string)o));
     }
     else if (o is bool)
     {
         return(new ErlBoolean((bool)o));
     }
     else if (o is char)
     {
         return(new ErlByte((char)o));
     }
     else if (o is byte)
     {
         return(new ErlByte((byte)o));
     }
     else if (o is short)
     {
         return(new ErlLong((short)o));
     }
     else if (o is ushort)
     {
         return(new ErlLong((ushort)o));
     }
     else if (o is decimal)
     {
         return(new ErlDouble((double)(decimal)o));
     }
     else if (o is DateTime)
     {
         var ts = ((DateTime)o).ToMicrosecondsSinceUnixEpochStart();
         var s  = ts / 1000000;
         var us = ts - (s * 1000000);
         return((IErlObject) new ErlTuple(s / 1000000, s % 1000000, us));
     }
     else if (o is byte[])
     {
         return(new ErlBinary((byte[])o, true));
     }
     // TODO: Add support for IDictionary
     else if (o is IEnumerable)
     {
         var list = new ErlList();
         foreach (var item in (IEnumerable)o)
         {
             list.Add(item.ToErlObject());
         }
         return(list);
     }
     else
     {
         throw new ErlException(StringConsts.ERL_CANNOT_CONVERT_TYPES_ERROR,
                                o.GetType().FullName, typeof(IErlObject).Name);
     }
 }