Ejemplo n.º 1
0
 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);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
            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);