Exemple #1
0
        private static void CopyPackedValue(PackedTuple source, int sourceIndex, PackedTuple target, int targetIndex)
        {
            var sourceDescriptor = source.PackedDescriptor.FieldDescriptors[sourceIndex];
            var targetDescriptor = target.PackedDescriptor.FieldDescriptors[targetIndex];

            var fieldState = source.GetFieldState(sourceDescriptor);

            if (!fieldState.IsAvailable())
            {
                return;
            }

            if (fieldState.IsAvailableAndNull())
            {
                target.SetValue(targetIndex, null);
                return;
            }

            var accessor = sourceDescriptor.Accessor;

            if (accessor != targetDescriptor.Accessor)
            {
                throw new InvalidOperationException(string.Format(
                                                        Strings.ExInvalidCast,
                                                        source.PackedDescriptor[sourceIndex],
                                                        target.PackedDescriptor[targetIndex]));
            }

            target.SetFieldState(targetIndex, TupleFieldState.Available);
            accessor.CopyValue(source, sourceDescriptor, target, targetDescriptor);
        }
Exemple #2
0
        private static void MergeTuplesPreferOriginFast(PackedTuple origin, PackedTuple difference, int startIndex, int length)
        {
            var bound = startIndex + length;

            for (int index = startIndex; index < bound; index++)
            {
                TupleFieldState fieldState;
                if (!origin.GetFieldState(index).IsAvailable())
                {
                    CopyPackedValue(difference, index, origin, index);
                }
            }
        }