/// <summary> /// Reads the message at the current location of an Hdf5Reader /// </summary> /// <returns>The message.</returns> /// <param name="aReader">A reader.</param> /// <param name="aReadFlags">Flags that describe how to handle this message</param> /// <param name="aMessageType">Type of message to read</param> /// <param name="aLocalMessageSize">Number of bytes to read</param> /// <param name="aBytes">Number of bytes that were actually read</param> public static Message Read( Hdf5Reader aReader, MessageType aMessageType, MessageAttributeFlag aReadFlags, long?aLocalMessageSize, out long aBytes) { switch (aMessageType) { case MessageType.NIL: aBytes = 0; return(new Nil()); case MessageType.Dataspace: return(Dataspace.Read( aReader, aLocalMessageSize, out aBytes)); case MessageType.LinkInfo: return(LinkInfo.Read( aReader, aLocalMessageSize, out aBytes)); case MessageType.Datatype: return(Datatype.Read( aReader, aLocalMessageSize, out aBytes)); default: if (aReadFlags.HasFlag(MessageAttributeFlag.MustUnderstandToRead)) { throw new Exceptions.RequiredMessageNotUnderstood( $"Message type {aMessageType} must be understood for this object to be valid"); } break; } throw new NotImplementedException();//TODO: Add 'Not Undestood' message }