Ignore:
Timestamp:
Mar 6, 2008, 9:49:43 PM (17 years ago)
Author:
イグトランス (egtra)
Message:

(SPrintF.ab) FormatIntegerExにStringBuilderを引数に取る版を追加。

Location:
trunk/Include/Classes/System
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Include/Classes/System/IO/TextReader.ab

    r432 r457  
    3636        ElseIf count < 0 Then
    3737        End If
     38        Read = ReadImpl(buffer, index, count)
    3839    End Function
    3940
     
    8081    End Function
    8182    /*
     83    @brief 現在位置からストリームの終わりまで読み込む。
    8284    @date 2008/02/26
    8385    @auther Egtra
     
    9395            sb.Append(ch As StrChar)
    9496        Loop
     97    End Function
     98
     99    Static Function Synchronized(reader As TextReader) As TextReader
    95100    End Function
    96101
     
    118123End Class
    119124
     125Namespace Detail
     126
     127Class SynchronizedTextReader
     128    Inherits TextReader
     129Public
     130    Sub SynchronizedTextReader(reader As TextReader)
     131        cs = New ActiveBasic.Windows.CriticalSection
     132        base = reader
     133    End Sub
     134
     135    Override Function Peek() As Long
     136'       Using lock = cs.Lock
     137            Peek = base.Peek
     138'       End Using
     139    End Function
     140
     141    Override Function Read() As Long
     142'       Using lock = cs.Lock
     143            Read = base.Read
     144'       End Using
     145    End Function
     146
     147    Override Function ReadLine() As String
     148'       Using lock = cs.Lock
     149            ReadLine = base.ReadLine
     150'       End Using
     151    End Function
     152
     153    Override Function ReadToEnd() As String
     154'       Using lock = cs.Lock
     155            ReadToEnd = base.ReadToEnd
     156'       End Using
     157    End Function
     158
     159Protected
     160    Override Sub Dispose(disposing As Boolean)
     161        Dim s = Nothing As Stream
     162        SetPointer(VarPtr(s) As *VoidPtr, InterlockedExchangePointer(ByVal VarPtr(base) As *VoidPtr, 0))
     163        If disposing Then
     164            If Not ActiveBasic.IsNothing(s) Then
     165                s.Dispose()
     166            End If
     167            cs.Dispose()
     168        End If
     169    End Sub
     170
     171    Override Function ReadImpl(buffer As *StrChar, index As Long, count As Long) As Long
     172'       Using lock = cs.Lock
     173            ReadImpl = base.ReadImpl(buffer, index, count)
     174'       End Using
     175    End Function
     176Private
     177    cs As ActiveBasic.Windows.CriticalSection
     178    base As TextReader
     179End Class
     180
     181End Namespace
     182
    120183End NameSpace
    121184End NameSpace
  • trunk/Include/Classes/System/Math.ab

    r299 r457  
    127127
    128128    Static Function Ceiling(x As Double) As Long
    129         If Floor(x) = x then
    130             Return x As Long
    131         Else
    132             Return Floor(x) + 1
     129        Ceiling = Floor(x)
     130        If Ceiling <> x Then
     131            Ceiling++
    133132        End If
    134133    End Function
     
    145144
    146145    Static Function Cosh(value As Double) As Double
    147         Dim t As Double
    148         t = Math.Exp(value)
     146        Dim t = Math.Exp(value)
    149147        return (t + 1 / t) * 0.5
    150148    End Function
     
    156154
    157155    Static Function DivRem(x As Int64, y As Int64, ByRef ret As Int64) As Int64
    158         ret = x - (x \ y) * y
    159         return x \ y
     156        DivRem = x \ y
     157        ret = x - (DivRem) * y
    160158    End Function
    161159
     
    196194        Return Int(value)
    197195    End Function
    198 
    199     'GetHashCode
    200 
    201     'GetType
    202196
    203197    Static Function IEEERemainder(x As Double, y As Double) As Double
     
    513507
    514508    Static Function Sqrt(x As Double) As Double
    515         Dim s As Double, last As Double
    516         Dim i As *Word, j As Long, jj As Long, k As Long
    517509        If x > 0 Then
    518510            If ActiveBasic.Math.IsInf(x) Then
     
    520512            Else
    521513                Sqrt = x
    522                 i = (VarPtr(Sqrt) + 6) As *Word
    523                 jj = GetWord(i)
    524                 j = jj >> 5
    525                 k = jj And &h0000001f
    526                 j = (j+ 511) << 4 + k
     514                Dim i = (VarPtr(Sqrt) + 6) As *Word
     515                Dim jj = GetWord(i) As Long
     516                Dim j = jj >> 5 As Long
     517                Dim k = (jj And &h0000001f) As Long
     518                j = (j + 511) << 4 + k
    527519                SetWord(i, j)
     520                Dim last As Double
    528521                Do
    529522                    last = Sqrt
    530                     Sqrt = (x /Sqrt + Sqrt) * 0.5
     523                    Sqrt = (x / Sqrt + Sqrt) * 0.5
    531524                Loop While Sqrt <> last
    532525            End If
  • trunk/Include/Classes/System/String.ab

    r428 r457  
    2727
    2828    Class String
    29     '   Inherits IComparable, ICloneable, IConvertible, IEnumerable
     29        Implements /*IComparable, ICloneable, IConvertible, IComparable<String>, IEnumerable, IEnumerable<StrChar>, IEquatable<String>*/
    3030
    3131        m_Length As Long
     
    3434        Sub validPointerCheck(p As VoidPtr, size = 1 As Long)
    3535            If p As ULONG_PTR < &h10000 Then
    36                 'Throw ArgumentException
    37                 Debug
     36                Throw New ArgumentException
    3837            ElseIf IsBadReadPtr(p, size As ULONG_PTR) Then
    39                 'Throw ArgumentException
    40                 Debug
     38                Throw New ArgumentException
    4139            End If
    4240        End Sub
     
    153151
    154152        Const Function Operator == (y As String) As Boolean
    155             Return String.Compare(This, y) = 0
     153            Return Compare(This, y) = 0
    156154        End Function
    157155
    158156        Const Function Operator == (y As *StrChar) As Boolean
    159             Return String.Compare(This, y) = 0
     157            Return Compare(This, y) = 0
    160158        End Function
    161159
    162160        Const Function Operator <> (y As String) As Boolean
    163             Return String.Compare(This, y) <> 0
     161            Return Compare(This, y) <> 0
    164162        End Function
    165163
    166164        Const Function Operator <> (y As *StrChar) As Boolean
    167             Return String.Compare(This, y) <> 0
     165            Return Compare(This, y) <> 0
    168166        End Function
    169167
    170168        Const Function Operator < (y As String) As Boolean
    171             Return String.Compare(This, y) < 0
     169            Return Compare(This, y) < 0
    172170        End Function
    173171
    174172        Const Function Operator < (y As *StrChar) As Boolean
    175             Return String.Compare(This, y) < 0
     173            Return Compare(This, y) < 0
    176174        End Function
    177175
    178176        Const Function Operator > (y As String) As Boolean
    179             Return String.Compare(This, y) > 0
     177            Return Compare(This, y) > 0
    180178        End Function
    181179
    182180        Const Function Operator > (y As *StrChar) As Boolean
    183             Return String.Compare(This, y) > 0
     181            Return Compare(This, y) > 0
    184182        End Function
    185183
    186184        Const Function Operator <= (y As String) As Boolean
    187             Return String.Compare(This, y) <= 0
     185            Return Compare(This, y) <= 0
    188186        End Function
    189187
    190188        Const Function Operator <= (y As *StrChar) As Boolean
    191             Return String.Compare(This, y) <= 0
     189            Return Compare(This, y) <= 0
    192190        End Function
    193191
    194192        Const Function Operator >= (y As String) As Boolean
    195             Return String.Compare(This, y) >= 0
     193            Return Compare(This, y) >= 0
    196194        End Function
    197195
    198196        Const Function Operator >= (y As *StrChar) As Boolean
    199             Return String.Compare(This, y) >= 0
     197            Return Compare(This, y) >= 0
    200198        End Function
    201199
     
    205203
    206204    Public
     205        'Compareなどで、x.Charsではなく、StrPtr(x)と書く理由は、xがNothingの場合のため。
     206
    207207        Static Function Compare(x As String, indexX As Long, y As String, indexY As Long, length As Long) As Long
    208             Return String.CompareOrdinal(x, indexX, y, indexY, length)
     208            Return CompareOrdinal(x, indexX, y, indexY, length)
    209209        End Function
    210210
    211211        Static Function CompareOrdinal(x As String, y As String) As Long
    212             Return String.CompareOrdinal(x.Chars, y.Chars)
     212            Return CompareOrdinal(StrPtr(x), StrPtr(y))
    213213        End Function
    214214
    215215        Static Function CompareOrdinal(x As String, indexX As Long, y As String, indexY As Long, length As Long) As Long
    216             Return String.CompareOrdinal(x.Chars, indexX, y.Chars, indexY, length)
     216            Return CompareOrdinal(StrPtr(x), indexX, StrPtr(y), indexY, length)
    217217        End Function
    218218    Private
    219219        Static Function Compare(x As String, y As *StrChar) As Long
    220             Return String.CompareOrdinal(x, y)
     220            Return CompareOrdinal(x, y)
    221221        End Function
    222222
    223223        Static Function CompareOrdinal(x As String, y As *StrChar) As Long
    224             Return String.CompareOrdinal(x.Chars, y)
     224            Return CompareOrdinal(StrPtr(x), y)
    225225        End Function
    226226
     
    257257        Function CompareTo(y As Object) As Long
    258258            If Not Object.Equals(This.GetType(), y.GetType()) Then
    259                 Throw New ArgumentException("String.CompareTo: An argument is out of range value.", "y")
     259                Throw New ArgumentException("String.CompareTo: The type of the argument y is not String.", "y")
    260260            End If
    261261            Return CompareTo(y As String)
     
    351351        End Function
    352352
     353        Static Function Concat(x As String, y As String, z As String) As String
     354            Dim sb = New Text.StringBuilder(removeNull(x).Length + removeNull(y).Length + removeNull(z).Length)
     355            sb.Append(x).Append(y).Append(z)
     356            Concat = sb.ToString
     357        End Function
     358
     359        Static Function Concat(x As String, y As String, z As String, w As String) As String
     360            Dim sb = New Text.StringBuilder(removeNull(x).Length + removeNull(y).Length + removeNull(z).Length + removeNull(w).Length)
     361            sb.Append(x).Append(y).Append(z).Append(w)
     362            Concat = sb.ToString
     363        End Function
     364
    353365        Static Function Concat(x As Object, y As Object) As String
    354             Return String.Concat(x.ToString, y.ToString)
     366            Return Concat(x.ToString, y.ToString)
     367        End Function
     368
     369        Static Function Concat(x As Object, y As Object, z As Object) As String
     370            Return Concat(x.ToString, y.ToString, z.ToString)
     371        End Function
     372
     373        Static Function Concat(x As Object, y As Object, z As Object, w As Object) As String
     374            Return Concat(x.ToString, y.ToString, z.ToString, w.ToString)
    355375        End Function
    356376
     
    575595            Clone = This
    576596        End Function
    577 
     597/*
     598        Function Clone() As Object
     599            Clone = This
     600        End Function
     601*/
    578602        Static Function Copy(s As String) As String
    579603            Copy = New String(s.Chars, s.m_Length)
     
    656680            End If
    657681        End Sub
     682
     683        Static Function removeNull(s As String) As String
     684            If ActiveBasic.IsNothing(s) Then
     685                removeNull = Empty
     686            Else
     687                removeNull = s
     688            End If
     689        End Function
    658690    End Class
    659691
  • trunk/Include/Classes/System/Text/StringBuilder.ab

    r435 r457  
    182182        ElseIf c > Capacity Then
    183183            Dim p = GC_malloc_atomic((c + 1) * SizeOf (StrChar)) As *StrChar
    184             If p = 0 Then
    185                 'Throw OutOfMemoryException
    186                 Debug
    187             End If
    188184            ActiveBasic.Strings.ChrCopy(p, chars, size As SIZE_T)
    189185            chars = p
     
    488484        This.size = 0
    489485        This.chars = GC_malloc_atomic((This.capacity + 1) * SizeOf (StrChar))
    490         If chars = 0 Then
    491             'Throw OutOfMemoryException
    492             Debug
    493         End If
    494 
    495486    End Sub
    496487
Note: See TracChangeset for help on using the changeset viewer.