At time not for strings.
Update v1.04
- Bugfix
Update v1.05
- Change: Remove parameter type
- Change: ArrayName now with type of array
- Added: DimWithString(...) and EndDimWithString()
- Added: LoadArrayString(...) and EndLoadArrayString()
Code: Select all
;-TOP
; Comment : Dim Array with Data
; Author : mk-soft
; Version : v1.05
; Created : 15.06.2019
; Updated :
; *********************************************************
EnableExplicit
CompilerIf Not Defined(__ArrayAddr, #PB_Variable)
Threaded __ArrayAddr
Threaded __ArraySize
Threaded __ArrayIndex
Threaded *__ArrayAddr.string
CompilerEndIf
; ----
Macro DimWithData(ArrayName, Size)
Dim ArrayName(Size)
__ArrayAddr = @ArrayName()
DataSection
__Begin_NewArrayData_#MacroExpandedCount:
EndMacro
Macro EndDimWithData()
__End_NewArrayData_#MacroExpandedCount:
EndDataSection
CopyMemory(?__Begin_NewArrayData_#MacroExpandedCount, __ArrayAddr, ?__End_NewArrayData_#MacroExpandedCount - ?__Begin_NewArrayData_#MacroExpandedCount)
EndMacro
; ----
Macro LoadArrayData(ArrayName)
__ArrayAddr = @ArrayName()
DataSection
__Begin_ArrayData_#MacroExpandedCount:
EndMacro
Macro EndLoadArrayData()
__End_ArrayData_#MacroExpandedCount:
EndDataSection
CopyMemory(?__Begin_ArrayData_#MacroExpandedCount, __ArrayAddr, ?__End_ArrayData_#MacroExpandedCount - ?__Begin_ArrayData_#MacroExpandedCount)
EndMacro
; ----
Macro DimWithString(ArrayName, Size)
Dim ArrayName(Size)
*__ArrayAddr = @ArrayName()
__ArraySize = ArraySize(ArrayName())
DataSection
__Begin_NewStringArray_#MacroExpandedCount:
EndMacro
Macro EndDimWithString()
__End_NewStringArray_#MacroExpandedCount:
EndDataSection
Restore __Begin_NewStringArray_#MacroExpandedCount
For __ArrayIndex = 0 To __ArraySize
Read.s *__ArrayAddr\s
*__ArrayAddr + SizeOf(integer)
Next
EndMacro
; ----
Macro LoadArrayString(ArrayName)
*__ArrayAddr = @ArrayName()
__ArraySize = ArraySize(ArrayName())
DataSection
__Begin_StringArray_#MacroExpandedCount:
EndMacro
Macro EndLoadArrayString()
__End_StringArray_#MacroExpandedCount:
EndDataSection
Restore __Begin_StringArray_#MacroExpandedCount
For __ArrayIndex = 0 To __ArraySize
Read.s *__ArrayAddr\s
*__ArrayAddr + SizeOf(integer)
Next
EndMacro
; *********************************************************
;-Example
CompilerIf #PB_Compiler_IsMainFile
Define index
Debug "Init Array..."
Global DimWithData(Values.f, 5) ; <-- Don´t forget ArrayName with type float (.f)
Data.f 1.1, 1.2, 1.3, 1.4, 1.5, 1.6
EndDimWithData()
For index = 0 To 5
Debug StrF(Values(index), 2)
Next
Debug "----"
Debug "Change Data 2"
ReDim Values(7)
LoadArrayData(Values)
Data.f 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8
EndLoadArrayData()
For index = 0 To 7
Debug StrF(Values(index), 2)
Next
Debug "----"
Debug "Change Data 3"
ReDim Values(3)
LoadArrayData(Values)
Data.f 3.1, 3.2, 3.3, 3.4
EndLoadArrayData()
For index = 0 To 3
Debug StrF(Values(index), 2)
Next
Debug "----"
Debug "Init String Array..."
Global DimWithString(sVal.s, 3) ; <-- Don´t forget ArrayName with type string (.s)
Data.s "Hello " , "World!", "I Like Purebasic", ""
EndDimWithString()
For index = 0 To 3
Debug "Index " + index + " = " + sVal(index)
Next
Debug "----"
Debug "Update String Array..."
LoadArrayString(sVal)
Data.s "One" , "Two", "Three", "Four"
EndLoadArrayString()
For index = 0 To 3
Debug "Index " + index + " = " + sVal(index)
Next
Debug "----"
CompilerEndIf