Autor Tema: [SRC] cConcatenator.cls  (Leído 2281 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Psyke1

  • Megabyte
  • ***
  • Mensajes: 130
  • Reputación: +11/-7
  • VBManiac
    • Ver Perfil
    • h-Sec
[SRC] cConcatenator.cls
« en: Octubre 11, 2011, 12:18:57 pm »
Mi nueva clase para concatenar cadenas rápidamente (no incluye la opción de insertar/remover cadenas por ahora...):
Código: (vb) [Seleccionar]
Option Explicit
Option Compare Binary
'====================================
' º Name      : cConcatenator.cls
' º Version   : 1.3
' º Author    : Psyke1
' º Twitter   : @SoyAbsurdo
' º Country   : Spain
' º Date      : 15/10/11
' º Visit     :
'    * http://foro.h-sec.org
'    * http://infrangelux.sytes.net
'====================================
Private Declare Sub RtlMoveMemory Lib "ntdll.dll" (ByVal lpDestination As Long, ByVal lpSource As Long, ByVal Length As Long)
Private Declare Function SysAllocStringByteLen Lib "oleaut32.dll" (ByVal oleStr As Long, ByVal BLen As Long) As Long
 
Private sRet()                  As String
Private lCount                  As Long
Private lChunk                  As Long
Private lTotalLenB              As Long

Public Static Sub Append(ByRef sText As String)
Dim lLenB                       As Long
   
    lLenB = LenB(sText)
    If lLenB Then
        If lCount > lChunk Then
            lChunk = lChunk + lChunk + 1&
            ReDim Preserve sRet(lChunk) As String
        End If
 
        sRet(lCount) = sText
        lCount = lCount + 1&
        lTotalLenB = lTotalLenB + lLenB
    End If
End Sub

Public Static Property Get LengthString() As Long
    LengthString = LengthString \ 2&
End Property

Public Sub ResetAll()
    lCount = 0&
    lTotalLenB = 0&
End Sub
 
Public Static Property Get GetString() As String
Dim pDest                       As Long
Dim lLenBItem                   As Long
Dim Q                           As Long
 
    If lCount Then
        RtlMoveMemory VarPtr(GetString), VarPtr(SysAllocStringByteLen(0&, lTotalLenB)), 4&
 
        pDest = StrPtr(GetString)
        For Q = 0 To (lCount - 1&)
            lLenBItem = LenB(sRet(Q))
            RtlMoveMemory pDest, StrPtr(sRet(Q)), lLenBItem
            pDest = pDest + lLenBItem
        Next Q
    End If
End Property
 
Private Sub Class_Initialize()
    lChunk = &H270F&
    ReDim sRet(lChunk) As String
End Sub

Test comparándola con cStringBuilderl.cls (la más rápida que encontré en la red):



DoEvents! :P
« última modificación: Octubre 15, 2011, 05:07:49 pm por Psyke1 »