@@ -10,6 +10,9 @@ struct IndexedVarArray{V<:AbstractVariableRef,N,T} <: AbstractSparseArray{V,N}
10
10
index_cache:: Vector{Dictionary}
11
11
end
12
12
13
+ struct SafeInsert end
14
+ struct UnsafeInsert end
15
+
13
16
_data (sa:: IndexedVarArray ) = sa. data
14
17
15
18
already_defined (var, index) = haskey (_data (var), index)
37
40
Insert a new variable with the given index only after checking if keys are valid and not already defined.
38
41
"""
39
42
function insertvar! (var:: IndexedVarArray{V,N,T} , index... ) where {V,N,T}
43
+ return insertvar! (var, SafeInsert (), index... )
44
+ end
45
+ function insertvar! (
46
+ var:: IndexedVarArray{V,N,T} ,
47
+ :: SafeInsert = SafeInsert (),
48
+ index... ,
49
+ ) where {V,N,T}
40
50
! valid_index (var, index) && throw (BoundsError (var, index))# "Not a valid index for $(var.name): $index"g
41
51
already_defined (var, index) && error (" $index already defined for array" )
42
-
43
52
var[index] = var. f (index... )
44
-
45
53
clear_cache! (var)
46
54
return var[index]
47
55
end
48
56
57
+ function insertvar! (
58
+ var:: IndexedVarArray{V,N,T} ,
59
+ :: UnsafeInsert ,
60
+ index... ,
61
+ ) where {V,N,T}
62
+ return var[index] = var. f (index... )
63
+ end
64
+
49
65
"""
50
66
unsafe_insertvar!(var::indexedVarArray{V,N,T}, index...)
51
67
52
68
Insert a new variable with the given index withouth checking if the index is valid or
53
69
already assigned.
54
70
"""
55
71
function unsafe_insertvar! (var:: IndexedVarArray{V,N,T} , index... ) where {V,N,T}
56
- return var[index] = var . f ( index... )
72
+ return insertvar! ( var, UnsafeInsert (), index... )
57
73
end
58
74
59
75
joinex (ex1, ex2) = :($ ex1... , $ ex2... )
0 commit comments