예제 #1
0
 /// <summary>
 /// インスタンスを初期化します。
 /// </summary>
 /// <param name="headerObject">タグの所属する ASF オブジェクト。</param>
 /// <param name="type">データ種別。</param>
 /// <param name="name">名前。</param>
 /// <param name="canEdit">編集可能なら true。それ以外は false。</param>
 internal AsfTagInfo( string name, AsfTagDataType type, bool canEdit, HeaderObjectType headerObject )
 {
     this.HeaderObject = headerObject;
     this.Name         = name;
     this.Type         = type;
     this.CanEdit      = canEdit;
 }
예제 #2
0
 /// <summary>
 /// 値を新規作成するための情報から、インスタンスを初期化します。
 /// </summary>
 /// <param name="type">値の型。</param>
 /// <param name="value">値のバイト配列。</param>
 public ObjectTagValue( AsfTagDataType type, object value )
 {
     if( type == AsfTagDataType.Binary && value is byte[] )
     {
         this._value = ( byte[] )value;
         this.Type   = ObjectTagValueType.Binary;
     }
     else if( type == AsfTagDataType.Bool && value is bool )
     {
         // WMT_TYPE_BOOL は 4 バイトなので uint として扱う
         this._value = BitConverter.GetBytes( ( uint )( ( bool )value ? 1 : 0 ) );
         this.Type   = ObjectTagValueType.Bool;
     }
     else if( type == AsfTagDataType.Guid && value is Guid )
     {
         // GUID は文字列として扱う
         this._value = ( ( Guid )value ).ToByteArray();
         this.Type   = ObjectTagValueType.String;
     }
     else if( type == AsfTagDataType.String && value is string )
     {
         this._value = BinaryUtility.StringToBytesUtf16String( ( string )value );
         this.Type   = ObjectTagValueType.String;
     }
     else if( type == AsfTagDataType.UInt16 && value is ushort )
     {
         this._value = BitConverter.GetBytes( ( ushort )value );
         this.Type   = ObjectTagValueType.UInt16;
     }
     else if( type == AsfTagDataType.UInt32 && value is uint )
     {
         this._value = BitConverter.GetBytes( ( uint )value );
         this.Type   = ObjectTagValueType.UInt32;
     }
     else if( type == AsfTagDataType.UInt64 && value is ulong )
     {
         this._value = BitConverter.GetBytes( ( ulong )value );
         this.Type   = ObjectTagValueType.UInt64;
     }
     else
     {
         throw new ArgumentException( "Invalid combination of value and type." );
     }
 }
예제 #3
0
 /// <summary>
 /// インスタンスを初期化します。
 /// </summary>
 /// <param name="name">名前。</param>
 /// <param name="type">データ種別。</param>
 internal AsfTagInfo( string name, AsfTagDataType type )
     : this(name, type, false)
 {
 }
예제 #4
0
 /// <summary>
 /// インスタンスを初期化します。
 /// </summary>
 /// <param name="name">名前。</param>
 /// <param name="type">データ種別。</param>
 /// <param name="canEdit">編集可能なら true。それ以外は false。</param>
 internal AsfTagInfo( string name, AsfTagDataType type, bool canEdit )
     : this(name, type, canEdit, HeaderObjectType.Unknown)
 {
 }
예제 #5
0
        /// <summary>
        /// タグの内容を ASF の値として取得します。
        /// </summary>
        /// <param name="type">ASF のデータ型。</param>
        /// <param name="src">タグ情報を読み込むストリーム。</param>
        /// <returns>値。type に適合するデータが存在しない場合は null 参照。</returns>
        public object Read( AsfTagDataType type, Stream src )
        {
            var value = ( this._value != null ? this._value : this._reader.Read( src ) );

            switch( type )
            {
            case AsfTagDataType.Binary: return value;
            case AsfTagDataType.Bool:   return this.ValueOfBool( value );
            case AsfTagDataType.Guid:   return this.ValueOfGuid( value );
            case AsfTagDataType.String: return this.ValueOfString( value );
            case AsfTagDataType.UInt16: return this.ValueOfUInt16( value );
            case AsfTagDataType.UInt32: return this.ValueOfUInt32( value );
            case AsfTagDataType.UInt64: return this.ValueOfUInt64( value );
            default: return null;
            }
        }