Code Duplication    Length = 19-19 lines in 4 locations

src/EnumSet.php 4 locations

@@ 349-367 (lines=19) @@
346
     * @param EnumSet ...$other Other EnumSet(s) of the same enumeration to produce the union
347
     * @return EnumSet
348
     */
349
    public function union(EnumSet $other)
350
    {
351
        $bitset = $this->bitset;
352
        foreach (func_get_args() as $other) {
353
            if (!$other instanceof self || $this->enumeration !== $other->enumeration) {
354
                throw new InvalidArgumentException(sprintf(
355
                    "Others should be an instance of %s of the same enumeration as this %s",
356
                    __CLASS__,
357
                    $this->enumeration
358
                ));
359
            }
360
361
            $bitset |= $other->bitset;
362
        }
363
364
        $clone = clone $this;
365
        $clone->bitset = $bitset;
366
        return $clone;
367
    }
368
369
    /**
370
     * Produce a new set with enumerators common to both this and other (this & other)
@@ 374-392 (lines=19) @@
371
     * @param EnumSet ...$other Other EnumSet(s) of the same enumeration to produce the union
372
     * @return EnumSet
373
     */
374
    public function intersect(EnumSet $other)
375
    {
376
        $bitset = $this->bitset;
377
        foreach (func_get_args() as $other) {
378
            if (!$other instanceof self || $this->enumeration !== $other->enumeration) {
379
                throw new InvalidArgumentException(sprintf(
380
                    "Others should be an instance of %s of the same enumeration as this %s",
381
                    __CLASS__,
382
                    $this->enumeration
383
                ));
384
            }
385
386
            $bitset &= $other->bitset;
387
        }
388
389
        $clone = clone $this;
390
        $clone->bitset = $bitset;
391
        return $clone;
392
    }
393
394
    /**
395
     * Produce a new set with enumerators in this but not in other (this - other)
@@ 399-417 (lines=19) @@
396
     * @param EnumSet ...$other Other EnumSet(s) of the same enumeration to produce the union
397
     * @return EnumSet
398
     */
399
    public function diff(EnumSet $other)
400
    {
401
        $bitset = $other->bitset;
402
        foreach (func_get_args() as $other) {
403
            if (!$other instanceof self || $this->enumeration !== $other->enumeration) {
404
                throw new InvalidArgumentException(sprintf(
405
                    "Others should be an instance of %s of the same enumeration as this %s",
406
                    __CLASS__,
407
                    $this->enumeration
408
                ));
409
            }
410
411
            $bitset |= $other->bitset;
412
        }
413
414
        $clone = clone $this;
415
        $clone->bitset = $this->bitset & ~$bitset;
416
        return $clone;
417
    }
418
419
    /**
420
     * Produce a new set with enumerators in either this and other but not in both (this ^ (other | other))
@@ 424-442 (lines=19) @@
421
     * @param EnumSet ...$other Other EnumSet(s) of the same enumeration to produce the union
422
     * @return EnumSet
423
     */
424
    public function symDiff(EnumSet $other)
425
    {
426
        $bitset = $other->bitset;
427
        foreach (func_get_args() as $other) {
428
            if (!$other instanceof self || $this->enumeration !== $other->enumeration) {
429
                throw new InvalidArgumentException(sprintf(
430
                    "Others should be an instance of %s of the same enumeration as this %s",
431
                    __CLASS__,
432
                    $this->enumeration
433
                ));
434
            }
435
436
            $bitset |= $other->bitset;
437
        }
438
439
        $clone = clone $this;
440
        $clone->bitset = $this->bitset ^ $bitset;
441
        return $clone;
442
    }
443
444
    /**
445
     * Get ordinal numbers of the defined enumerators as array