refactor: Make Point immutable

Changed Point from 'mutable struct' to 'struct'.

The Dict for fields remains a reference type, so field updates via setindex!
and update! still work correctly. This change improves type stability and
enables better compiler optimizations.

Benefits:
- Better compiler optimizations (immutable types)
- Type stability improvements
- Stack allocation when possible
- No breaking changes (Dict fields still mutable)

Tests: All 157 tests passing
This commit is contained in:
Jukka Aho
2025-11-09 03:30:29 +02:00
parent 907ec0b183
commit 6b24ed9d76
2 changed files with 5 additions and 4 deletions
+4 -3
View File
@@ -5,11 +5,12 @@ const Node = Vector{Float64}
abstract type AbstractPoint end
mutable struct Point{P<:AbstractPoint}
id::UInt # Changed from Int to match Gmsh (Issue #267)
# Immutable Point - Dict is a reference type so this is safe
struct Point{P<:AbstractPoint}
id::UInt
weight::Float64
coords::Tuple{Vararg{Float64}}
fields::Dict{String,AbstractField}
fields::Dict{String,AbstractField} # Reference type, can still be modified
properties::P
end
+1 -1
View File
@@ -513,7 +513,7 @@ this returns a new instance with updated integration points.
"""
function with_integration_points(element::Element{N,NIP,M,B}, ips::NTuple{NNEW,IP}) where {N,NIP,M,B,NNEW}
return Element{N,NNEW,M,B}(element.id, element.connectivity, ips,
element.dfields, element.sfields, element.properties)
element.dfields, element.sfields, element.properties)
end
""" Find inverse isoparametric mapping of element. """