diff --git a/src/all_building_blocks/all_building_blocks.jl b/src/all_building_blocks/all_building_blocks.jl index 8a4d260e57d95c7d6ebd47d5f5f52ee7abd2d2c0..a337c924097acd0bb93a28af4f2b8af059be7af6 100644 --- a/src/all_building_blocks/all_building_blocks.jl +++ b/src/all_building_blocks/all_building_blocks.jl @@ -3,10 +3,12 @@ include("base_building_blocks.jl") include("building_blocks.jl") include("trapezoids.jl") include("spoilt_slice_selects.jl") +include("wait_blocks.jl") import .BaseBuildingBlocks: waveform, waveform_sequence, events, BaseBuildingBlock import .BuildingBlocks: BuildingBlock import .Trapezoids: Trapezoid, SliceSelect, LineReadout import .SpoiltSliceSelects: SpoiltSliceSelect +import ..WaitBlocks: Wait end \ No newline at end of file diff --git a/src/all_building_blocks/wait_blocks.jl b/src/all_building_blocks/wait_blocks.jl new file mode 100644 index 0000000000000000000000000000000000000000..3558cf818b12aa6e03677a1f5146fa2fb8c26f43 --- /dev/null +++ b/src/all_building_blocks/wait_blocks.jl @@ -0,0 +1,22 @@ +module WaitBlocks +import JuMP: @constraint +import ...BuildSequences: get_global_model +import ...Variables: get_free_variable, VariableType, duration +import ...Components: NoGradient +import ..BaseBuildingBlocks: BaseBuildingBlock + +struct Wait <: BuildingBlock + duration :: VariableType + function Wait(var) + res = new(get_free_variable(var)) + if !(res.duration isa Number) + @constraint get_global_model() res.duration >= 0 + end + end +end + +duration(wb::Wait) = wb.duration +Base.keys(::Wait) = (:empty) +Base.getindex(wb::Wait) = NoGradient{1}(wb.duration) + +end \ No newline at end of file