コード例 #1
0
 public static void CopyFieldsIn(
     ILoquiReflectionSetter obj,
     ILoquiReflectionGetter rhs,
     ILoquiReflectionGetter def,
     bool skipProtected)
 {
     for (ushort i = 0; i < obj.Registration.FieldCount; i++)
     {
         if (skipProtected && obj.Registration.IsProtected(i))
         {
             continue;
         }
         if (obj.Registration.IsNthDerivative(i))
         {
             continue;
         }
         if (rhs.GetNthObjectHasBeenSet(i))
         {
             obj.SetNthObject(i, rhs.GetNthObject(i));
         }
         else
         {
             if (def != null && def.GetNthObjectHasBeenSet(i))
             {
                 obj.SetNthObject(i, def.GetNthObject(i));
             }
             else
             {
                 obj.UnsetNthObject(i);
             }
         }
     }
 }
コード例 #2
0
    public static void CopyFieldsIn(
        ILoquiReflectionSetter obj,
        IEnumerable <KeyValuePair <ushort, object> > fields,
        ILoquiReflectionGetter def,
        bool skipProtected)
    {
        if (fields == null || !fields.Any())
        {
            return;
        }
        HashSet <ushort> readFields = new HashSet <ushort>();

        foreach (var field in fields)
        {
            readFields.Add(field.Key);
            if (skipProtected && obj.Registration.IsProtected(field.Key))
            {
                continue;
            }
            obj.SetNthObject(field.Key, field.Value);
        }

        for (ushort i = 0; i < obj.Registration.FieldCount; i++)
        {
            if (obj.Registration.IsNthDerivative(i))
            {
                continue;
            }
            if (readFields.Contains(i))
            {
                continue;
            }
            if (def != null && def.GetNthObjectHasBeenSet(i))
            {
                obj.SetNthObject(i, def.GetNthObject(i));
            }
            else
            {
                obj.UnsetNthObject(i);
            }
        }
    }
コード例 #3
0
    public static void CopyFieldsIn(
        ILoquiReflectionSetter obj,
        IEnumerable <KeyValuePair <ushort, object> > fields,
        ILoquiReflectionGetter def,
        Func <IErrorMask> errorMaskGetter,
        bool skipProtected)
    {
        if (!fields.Any())
        {
            return;
        }
        try
        {
            HashSet <ushort> readFields = new HashSet <ushort>();
            foreach (var field in fields)
            {
                readFields.Add(field.Key);
                if (skipProtected && obj.Registration.IsProtected(field.Key))
                {
                    continue;
                }
                try
                {
                    obj.SetNthObject(field.Key, field.Value);
                }
                catch (Exception ex)
                {
                    errorMaskGetter().SetNthException(field.Key, ex);
                }
            }

            for (ushort i = 0; i < obj.Registration.FieldCount; i++)
            {
                if (obj.Registration.IsNthDerivative(i))
                {
                    continue;
                }
                if (readFields.Contains(i))
                {
                    continue;
                }
                try
                {
                    if (def != null && def.GetNthObjectHasBeenSet(i))
                    {
                        obj.SetNthObject(i, def.GetNthObject(i));
                    }
                    else
                    {
                        obj.UnsetNthObject(i);
                    }
                }
                catch (Exception ex)
                {
                    errorMaskGetter().SetNthException(i, ex);
                }
            }
        }
        catch (Exception ex)
        {
            errorMaskGetter().Overall = ex;
        }
    }