MCPcopy
hub / github.com/robfig/cron / getRange

Function getRange

parser.go:252–318  ·  view source on GitHub ↗

getRange returns the bits indicated by the given expression: number | number "-" number [ "/" number ] or error parsing range.

(expr string, r bounds)

Source from the content-addressed store, hash-verified

250// number | number "-" number [ "/" number ]
251// or error parsing range.
252func getRange(expr string, r bounds) (uint64, error) {
253 var (
254 start, end, step uint
255 rangeAndStep = strings.Split(expr, "/")
256 lowAndHigh = strings.Split(rangeAndStep[0], "-")
257 singleDigit = len(lowAndHigh) == 1
258 err error
259 )
260
261 var extra uint64
262 if lowAndHigh[0] == "*" || lowAndHigh[0] == "?" {
263 start = r.min
264 end = r.max
265 extra = starBit
266 } else {
267 start, err = parseIntOrName(lowAndHigh[0], r.names)
268 if err != nil {
269 return 0, err
270 }
271 switch len(lowAndHigh) {
272 case 1:
273 end = start
274 case 2:
275 end, err = parseIntOrName(lowAndHigh[1], r.names)
276 if err != nil {
277 return 0, err
278 }
279 default:
280 return 0, fmt.Errorf("too many hyphens: %s", expr)
281 }
282 }
283
284 switch len(rangeAndStep) {
285 case 1:
286 step = 1
287 case 2:
288 step, err = mustParseInt(rangeAndStep[1])
289 if err != nil {
290 return 0, err
291 }
292
293 // Special handling: "N/step" means "N-max/step".
294 if singleDigit {
295 end = r.max
296 }
297 if step > 1 {
298 extra = 0
299 }
300 default:
301 return 0, fmt.Errorf("too many slashes: %s", expr)
302 }
303
304 if start < r.min {
305 return 0, fmt.Errorf("beginning of range (%d) below minimum (%d): %s", start, r.min, expr)
306 }
307 if end > r.max {
308 return 0, fmt.Errorf("end of range (%d) above maximum (%d): %s", end, r.max, expr)
309 }

Callers 2

TestRangeFunction · 0.85
getFieldFunction · 0.85

Calls 3

parseIntOrNameFunction · 0.85
mustParseIntFunction · 0.85
getBitsFunction · 0.85

Tested by 1

TestRangeFunction · 0.68