Changeset 452 for trunk


Ignore:
Timestamp:
Mar 3, 2008, 10:15:06 PM (17 years ago)
Author:
dai
Message:

System/Xml/Serialization/XmlSerializer.abを追加。
まずはシリアライズ処理を動くようにした。
※逆シリアライズは未実装なので、ActiveBasic.Xml.Parserクラスを実装してから対応すること。

Location:
trunk
Files:
4 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Include/Classes/ActiveBasic/Core/TypeInfo.ab

    r450 r452  
    1717    memberNames As *String              ' 名前リスト
    1818    memberTypeFullNames As *String      ' 型名リスト
     19    memberOffsets As *LONG_PTR          ' クラスの先頭ポインタからのオフセット値
    1920    memberCounts As Long                ' 個数
    2021    memberInfosCache As System.Collections.Generic.List<System.Reflection.MemberInfo>
     
    4647        Dim result = New TypeBaseImpl( strNamespace, name, fullName )
    4748        result.SetBaseType( baseType )
    48         result.SetMembers( memberNames, memberTypeFullNames, memberCounts )
     49        result.SetMembers( memberNames, memberTypeFullNames, memberOffsets, memberCounts )
    4950        result.memberInfosCache = This.memberInfosCache
    5051        result.ptrLevel = This.ptrLevel
     
    5455Public
    5556
    56     Sub SetMembers( memberNames As *String, memberTypeFullNames As *String, num As Long )
     57    Sub SetMembers( memberNames As *String, memberTypeFullNames As *String, memberOffsets As *LONG_PTR, num As Long )
    5758        This.memberNames = memberNames
    5859        This.memberTypeFullNames = memberTypeFullNames
     60        This.memberOffsets = memberOffsets
    5961        This.memberCounts = num
    6062
     
    146148            Dim i As Long
    147149            For i=0 To ELM(memberCounts)
    148                 memberInfosCache.Add( New System.Reflection.MemberInfo( memberNames[i], _System_TypeBase_Search( memberTypeFullNames[i] ) ) )
     150                memberInfosCache.Add( New System.Reflection.MemberInfo( memberNames[i], _System_TypeBase_Search( memberTypeFullNames[i] ), memberOffsets[i] ) )
    149151            Next
    150152        End If
  • trunk/Include/Classes/System/Reflection/MemberInfo.ab

    r414 r452  
    99    name As String
    1010    memberType As TypeInfo
     11    offset As LONG_PTR
    1112Public
    1213
     
    1617            memberType メンバの型
    1718    */
    18     Sub MemberInfo( name As String, memberType As TypeInfo )
     19    Sub MemberInfo( name As String, memberType As TypeInfo, offset As LONG_PTR )
    1920        This.name = name
    2021        This.memberType = memberType
     22        This.offset = offset
    2123    End Sub
    2224
    2325    /*!
    24     @brief  メンバの名前を取得する
    25     @return メンバの名前
     26    @brief  メンバの名前を取得する
     27    @return メンバの名前
    2628    */
    2729    Function Name() As String
     
    3032
    3133    /*!
    32     @brief  メンバの型を取得する
    33     @return メンバの型
     34    @brief  メンバの型を取得する
     35    @return メンバの型
    3436    */
    3537    Function MemberType() As TypeInfo
    3638        Return memberType
     39    End Function
     40
     41    /*!
     42    @brief  クラスの先頭ポインタからのオフセット値を取得する。
     43    @return クラスの先頭ポインタからのオフセット値。
     44    */
     45    Function _System_Offset() As LONG_PTR
     46        Return offset
    3747    End Function
    3848End Class
  • trunk/Include/Classes/System/Xml/XmlDocument.ab

    r451 r452  
    9494
    9595    /*!
     96    @brief  指定したストリームからXML文書を読み込む。
     97    @param  stream 読み込み先のストリーム。
     98    */
     99    Virtual Sub Load( inStream As System.IO.Stream )
     100        Dim length = inStream.Length As DWord
     101        Dim xmlBuffer = calloc( length + 1 ) As *StrChar
     102        inStream.Read( xmlBuffer As *Byte, 0, length )
     103        Dim xmlString = New String( xmlBuffer )
     104        free( xmlBuffer )
     105
     106        This.RemoveAll()
     107        ActiveBasic.Xml.Parser.Parse( xmlString, This )
     108    End Sub
     109
     110    /*!
     111    @brief  指定したファイルからXML文書を読み込む。
     112    @param  ファイルパス。
     113    */
     114    Virtual Sub Load( filename As String )
     115        Dim fileStream As System.IO.FileStream( filename, System.IO.FileMode.Open, System.IO.FileAccess.Read )
     116        Load( fileStream )
     117    End Sub
     118
     119    /*!
    96120    @brief  指定したストリームにXML文書を保存する。
    97121    @param  stream 保存先のストリーム。
     
    107131    */
    108132    Virtual Sub Save( filename As String )
    109         Dim fileStream As System.IO.FileStream( filename, System.IO.FileMode.Create )
     133        Dim fileStream As System.IO.FileStream( filename, System.IO.FileMode.Create, System.IO.FileAccess.Write )
    110134        Save( fileStream )
    111135    End Sub
    112136
     137Private
     138    Sub LoadXmlString( xmlString As String)
     139    End Sub
    113140End Class
    114141
  • trunk/Include/Classes/index.ab

    r432 r452  
    99#require "./ActiveBasic/Windows/WindowHandle.sbp"
    1010#require "./ActiveBasic/Windows/Windows.ab"
     11#require "./ActiveBasic/Xml/Parser.ab"
    1112#require "./System/Blittable.ab"
    1213#require "./System/Console.ab"
     
    105106#require "./System/Xml/XmlNode.ab"
    106107#require "./System/Xml/XmlText.ab"
     108#require "./System/Xml/Serialization/XmlSerializer.ab"
Note: See TracChangeset for help on using the changeset viewer.