Enhanced C#
Loyc library documentation
 All Classes Namespaces Functions Variables Enumerations Enumerator Properties Events Pages
Public Member Functions | List of all members
Loyc.SyncLib.ISyncField< SyncManager, T > Interface Template Reference

Represents the low-level synchronization behavior for a single list item. SyncManagerHelper needs this. More...


Source file:
Inheritance diagram for Loyc.SyncLib.ISyncField< SyncManager, T >:
Loyc.SyncLib.Impl.AsISyncField< SyncManager, T > Loyc.SyncLib.Impl.ListLoader< SyncManager, TList, T, ListBuilder, SyncItem > Loyc.SyncLib.Impl.ListSaver< SyncManager, List, T, SyncItem > Loyc.SyncLib.Impl.ListSaverC< SyncManager, List, T, SyncItem > Loyc.SyncLib.Impl.ObjectSyncher< SyncManager, SyncObj, T > Loyc.SyncLib.Impl.SyncDateAsDayNumber< SyncManager > Loyc.SyncLib.Impl.SyncDateAsDayNumber< SyncManager > Loyc.SyncLib.Impl.SyncEnumAsString< SyncManager, E > Loyc.SyncLib.Impl.SyncList< SM, T, List, SyncItem > Loyc.SyncLib.Impl.SyncList< SM, T, SyncItem > Loyc.SyncLib.Impl.SyncList< SM, T, SyncItem > Loyc.SyncLib.Impl.SyncList< SM, T, SyncItem > Loyc.SyncLib.Impl.SyncList< SM, T, SyncItem > Loyc.SyncLib.Impl.SyncList< SM, T, SyncItem > Loyc.SyncLib.Impl.SyncList< SM, T, SyncItem > Loyc.SyncLib.Impl.SyncList< SM, T, SyncItem > Loyc.SyncLib.Impl.SyncList< SM, T, SyncItem > Loyc.SyncLib.Impl.SyncList< SM, T, SyncItem > Loyc.SyncLib.Impl.SyncList< SM, T, SyncItem > Loyc.SyncLib.Impl.SyncObjectList< SM, T > Loyc.SyncLib.Impl.SyncObjectList< SM, T > Loyc.SyncLib.Impl.SyncObjectList< SM, T > Loyc.SyncLib.Impl.SyncObjectList< SM, T > Loyc.SyncLib.Impl.SyncObjectList< SM, T > Loyc.SyncLib.Impl.SyncObjectList< SM, T > Loyc.SyncLib.Impl.SyncObjectList< SM, T > Loyc.SyncLib.Impl.SyncObjectList< SM, T, SyncObj > Loyc.SyncLib.Impl.SyncObjectList< SM, T, SyncObj > Loyc.SyncLib.Impl.SyncObjectList< SM, T, SyncObj > Loyc.SyncLib.Impl.SyncObjectList< SM, T, SyncObj > Loyc.SyncLib.Impl.SyncObjectList< SM, T, SyncObj > Loyc.SyncLib.Impl.SyncObjectList< SM, T, SyncObj > Loyc.SyncLib.Impl.SyncObjectList< SM, T, SyncObj > Loyc.SyncLib.Impl.SyncPrimitive< SyncManager > Loyc.SyncLib.Impl.SyncPrimitive< SyncManager > Loyc.SyncLib.Impl.SyncPrimitive< SyncManager > Loyc.SyncLib.Impl.SyncPrimitive< SyncManager > Loyc.SyncLib.Impl.SyncPrimitive< SyncManager > Loyc.SyncLib.Impl.SyncPrimitive< SyncManager > Loyc.SyncLib.Impl.SyncPrimitive< SyncManager > Loyc.SyncLib.Impl.SyncPrimitive< SyncManager > Loyc.SyncLib.Impl.SyncPrimitive< SyncManager > Loyc.SyncLib.Impl.SyncPrimitive< SyncManager > Loyc.SyncLib.Impl.SyncPrimitive< SyncManager > Loyc.SyncLib.Impl.SyncPrimitive< SyncManager > Loyc.SyncLib.Impl.SyncPrimitive< SyncManager > Loyc.SyncLib.Impl.SyncPrimitive< SyncManager > Loyc.SyncLib.Impl.SyncPrimitive< SyncManager > Loyc.SyncLib.Impl.SyncPrimitive< SyncManager > Loyc.SyncLib.Impl.SyncPrimitive< SyncManager > Loyc.SyncLib.Impl.SyncPrimitive< SyncManager > Loyc.SyncLib.Impl.SyncPrimitive< SyncManager > Loyc.SyncLib.Impl.SyncPrimitive< SyncManager > Loyc.SyncLib.Impl.SyncPrimitive< SyncManager > Loyc.SyncLib.Impl.SyncPrimitive< SyncManager > Loyc.SyncLib.Impl.SyncPrimitive< SyncManager > Loyc.SyncLib.Impl.SyncPrimitive< SyncManager > Loyc.SyncLib.Impl.SyncPrimitive< SyncManager > Loyc.SyncLib.Impl.SyncPrimitive< SyncManager > Loyc.SyncLib.Impl.SyncPrimitive< SyncManager > Loyc.SyncLib.Impl.SyncPrimitive< SyncManager > Loyc.SyncLib.Impl.SyncPrimitive< SyncManager > Loyc.SyncLib.Impl.SyncTime< SM > Loyc.SyncLib.Impl.SyncTime< SM > Loyc.SyncLib.Impl.SyncTime< SM > Loyc.SyncLib.Impl.SyncTime< SM > Loyc.SyncLib.Impl.SyncTime< SM > Loyc.SyncLib.Impl.SyncTime< SM > Loyc.SyncLib.Impl.SyncTimeAsString< SM > Loyc.SyncLib.Impl.SyncTimeAsString< SM > Loyc.SyncLib.Impl.SyncTimeAsString< SM > Loyc.SyncLib.Impl.SyncTimeAsString< SM > Loyc.SyncLib.Impl.SyncTimeAsString< SM > Loyc.SyncLib.Impl.SyncTimeAsString< SM > Loyc.SyncLib.Impl.SyncTimeAsTicks< SM > Loyc.SyncLib.Impl.SyncTimeAsTicks< SM > Loyc.SyncLib.Impl.SyncTimeAsTicks< SM > Loyc.SyncLib.Impl.SyncTimeAsTicks< SM > Loyc.SyncLib.Impl.SyncTimeAsTicks< SM > Loyc.SyncLib.Impl.SyncTimeAsTicks< SM >

Remarks

Represents the low-level synchronization behavior for a single list item. SyncManagerHelper needs this.

This interface is used instead of SyncFieldFunc_Ref so that the implementation can be a struct, in order to take advantage of the CLR's ability to specialize generic methods for structs, which provides better performance by avoiding indirect calls and enabling inlining.

Example usage:

public struct SyncFields<SM> :
ISyncField<SM, Color>,
ISyncField<SM, BitArray>,
ISyncObject<SM, TwoColorBitmap>
where SM : ISyncManager
{
public Color Sync(ref SM sm, FieldId name, Color color)
{
return Color.FromArgb(sm.Sync(name, color.ToArgb()));
}
public BitArray? Sync(ref SM sm, FieldId name, BitArray? value)
{
if (sm.IsReading) {
return new BitArray(sm.SyncArray(name, Array.Empty<byte>()));
} else if (value is null) {
sm.SyncArray(name, (byte[]?) null);
} else {
byte[] bytes = new byte[(value.Length + 7) >> 3];
value.CopyTo(bytes, 0);
sm.SyncArray(name, bytes);
}
return value;
}
// This uses the Sync methods above
public TwoColorBitmap? Sync(SM sm, TwoColorBitmap? obj)
{
obj ??= new TwoColorBitmap();
obj.Color0 = sm.Sync("Color0", obj.Color0, this);
obj.Color1 = sm.Sync("Color1", obj.Color1, this);
obj.Bits = sm.Sync("Bits", obj.Bits, this)!;
// You could also just call your methods directly:
// obj.Color0 = Sync(ref sm, "Color0", obj.Color0);
return obj;
}
}
]]>

Public Member Functions

Sync (ref SyncManager sync, FieldId name, T?value)