public Enumerator(List <IBinaryAdapter> user, List <IBinaryAdapter> global, IBinaryAdapter @internal) { m_User = user; m_Global = global; m_Internal = @internal; m_Current = null; m_State = null != user ? State.User : null != global ? State.Global : State.Internal; m_Index = -1; }
/// <summary> /// Adds the specified <see cref="IBinaryAdapter"/> to the set of global adapters. This is be included by default in all BinarySerialization calls. /// </summary> /// <param name="adapter">The adapter to add.</param> /// <exception cref="ArgumentException">The given adapter is already registered.</exception> public static void AddGlobalAdapter(IBinaryAdapter adapter) { if (s_Adapters.Contains(adapter)) { throw new ArgumentException("IBinaryAdapter has already been registered."); } s_Adapters.Add(adapter); }
static bool TryDeserialize <TValue>(IBinaryAdapter adapter, UnsafeAppendBuffer.Reader *buffer, ref TValue value) { if (adapter is IBinaryAdapter <TValue> typed) { value = typed.Deserialize(buffer); return(true); } if (adapter is Contravariant.IBinaryAdapter <TValue> typedContravariant) { value = (TValue)typedContravariant.Deserialize(buffer); return(true); } return(false); }
static bool TrySerialize <TValue>(IBinaryAdapter adapter, UnsafeAppendBuffer *buffer, TValue value) { if (adapter is IBinaryAdapter <TValue> typed) { typed.Serialize(buffer, value); return(true); } if (adapter is Contravariant.IBinaryAdapter <TValue> typedContravariant) { typedContravariant.Serialize(buffer, value); return(true); } return(false); }
public bool MoveNext() { for (;;) { m_Index++; switch (m_State) { case State.User: if (m_Index < m_User.Count) { m_Current = m_User[m_Index]; return(true); } m_State = State.Global; m_Index = -1; break; case State.Global: if (m_Index < m_Global.Count) { m_Current = m_Global[m_Index]; return(true); } m_State = State.Internal; m_Index = -1; break; case State.Internal: m_Current = m_Internal; m_State = State.End; m_Index = -1; return(true); case State.End: m_Index = -1; return(false); default: throw new ArgumentOutOfRangeException(); } } }
/// <summary> /// Adds a custom adapter to the writer. /// </summary> /// <param name="adapter">The custom adapter to add.</param> public void AddAdapter(IBinaryAdapter adapter) => m_Params.UserDefinedAdapters.Add(adapter);