let take_at_most t x =
    assert_positive "take_at_most" x;
    let old_level = t.level in
    t.level <- C.max C.zero (C.(-) old_level x);
    C.(-) old_level t.level