Repository navigation
Extends Zstring
Home › User Defined Types › Extends Zstring
Specifies a type which inherits a Zstring behavior
Type|Union typename Extends Zstring [, base_typename]
...
End Type|UnionExtends Zstring declares typename to inherit properties and behaviors of a ZString. Purpose is to allow users to create custom string types (with i.e. dynamic memory management) that can integrate well in to existing compiler built ins (good interoperability with the compiler's ZString type).
This declaration of such a UDT with a suitable Cast operator will instruct compiler to convert the UDT to a ZString (in addition, other suitable operators as Let, [] (Pointer Index), Len, ..., can be also declared).
ZString behaviour can be inherited directly, or indirectly and singly from a base-type.
ZString behaviour can be inherited by a UDT also extending base_typename (a kind of pseudo multiple-inheritance).
By declaring a type (directly or indirectly) as Extends Zstring (in addition to defining a suitable Cast operator only), this promotes it fully ZString type compatible, even with StrPtr/SAdd, LSet/RSet, and Select Case.
- Not available in the -lang qb dialect unless referenced with the alias
__Extends __Zstring, but unusable because no member procedure is allowed in this dialect.
- New to FreeBASIC
Type myZstring Extends ZString
Public:
Declare Constructor (ByRef z As Const ZString = "")
Declare Operator Cast () ByRef As Const ZString
Declare Operator Let (ByRef z As Const ZString)
Private:
Dim As String s
End Type
Constructor myZstring (ByRef z As Const ZString = "")
This.s = z
End Constructor
Operator myZstring.Cast () ByRef As Const ZString
Return *StrPtr(This.s)
End Operator
Operator myZstring.Let (ByRef z As Const ZString)
This.s = z
End Operator
Dim As myZstring z = "FreeBASIC"
Print "'" & z & "'"
z &= " compiler"
Print "'" & z & "'"
SleepType vZstring Extends ZString
Public:
Declare Constructor (ByVal pz As Const ZString Ptr = 0)
Declare Operator Cast () ByRef As ZString
Declare Operator Let (ByVal pz As Const ZString Ptr)
Declare Operator [] (ByVal index As Integer) ByRef As UByte
Declare Destructor ()
Private:
Dim As ZString Ptr p
Dim As UInteger l
End Type
Constructor vZstring (ByVal pz As Const ZString Ptr = 0)
This.l = Len(*pz)
This.p = CAllocate(This.l + 1, SizeOf(ZString))
*This.p = *pz
End Constructor
Operator vZstring.Cast () ByRef As ZString
Return *This.p
End Operator
Operator vZstring.Let (ByVal pz As Const ZString Ptr)
If This.l < Len(*pz) Then
Deallocate(This.p)
This.l = Len(*pz)
This.p = CAllocate(This.l + 1, SizeOf(ZString))
End If
*This.p = *pz
End Operator
Operator vZstring.[] (ByVal index As Integer) ByRef As UByte
Return This.p[index]
End Operator
Destructor vZstring ()
Deallocate(This.p)
End Destructor
Operator Len (ByRef v As vZstring) As Integer
Return Len(Type<String>(v)) '' found nothing better than this
End Operator '' (or: 'Return Len(Str(v))')
Dim As vZstring v = "FreeBASIC"
Print "'" & v & "'", Len(v)
Dim As ZString * 256 z
z = *StrPtr(v) '' 'error 24: Invalid data types' without 'Extends Zstring'
Print "'" & z & "'", Len(z)
v &= Space(2)
Print "'" & v & "'", Len(v)
RSet v, "FreeBASIC" '' 'error 24: Invalid data types' without 'Extends Zstring'
Print "'" & v & "'", Len(v) '' ('Cast' must return a modifiable reference)
Select Case v '' 'error 24: Invalid data types' without 'Extends Zstring'
Case Type<vZstring>(Trim(v) & " ")
Print "Left justified"
Case Type<vZstring>(" " & Trim(v))
Print "Right justified"
End Select
v[0] = Asc("-")
Print "'" & v & "'", Len(v)
Print "'" & Right(v, 5) & "'" '' 'Right' supports types with 'Extends Zstring'
SleepCategory: User Defined Types
Kind: type
Reproduced from the FreeBASIC Wiki Manual under the GNU Free Documentation License 1.3 — with no Invariant Sections, no Front-Cover Texts and no Back-Cover Texts. Copyright © the FreeBASIC project and wiki contributors. See License.
tiko-lang · Home · Feature Index · Keyword Index · License
FreeBASIC manual pages reproduced under the GNU FDL 1.3.
- Generics
- Interfaces
- For Each
- Iterators
- Tuples
- Array Results
- Defer
- Lambdas
- Block Strings
- Partial Types
- String Slices
- Embed
- Typed Variadics
- C Header Import
- Foreign Library Linking
- UString
- Fixed-Width Types
- Nullptr
- String Library
- Format
- Array
- Map
- Set
- LinkedList
- OrderedMap
- OrderedSet
- Sorting
- Optional
- Result
- Smart Pointers
- Date and Time (Chrono)
- Filesystem
- File Streams
- Config (INI and TOML)
- Codec
- Hash
- UUID
- OS
- Process
- Net
- HTTP and TLS
- Math Library
- Finance
- Logging
- Terminal TUI Library
- PsControls
- tkControls
- sys/win
- Goroutines and Channels
- LLVM Backend
- tiko build
- TIKO_COMPILER
- Variable Declarations
- Standard Data Types
- User Defined Types
- Procedures
- Operators
- Control Flow Statements
- Converting Data Types
- Array Functions
- String Functions
- Mathematical Functions
- Bit Manipulation
- Date and Time Functions
- File I/O Functions
- Console Functions
- User Input (Runtime Library)
- User Input Functions (Graphics Library)
- Screen Functions
- 2D Drawing Functions
- Graphics Library Reference
- Graphics Keyword List
- Memory Functions
- Threading Support Functions
- Error Handling Functions
- Operating System Functions
- Preprocessor
- Intrinsic Defines
- Miscellaneous Keywords
- Modularizing