עליך להשוות בין הזמנים של התורים שנקבעו לזה שרוצים לקבוע כעת, אם יש חפיפה, גם חלקית, זה תפוס.
נניח תור קיים בשם existing המורכב מ־existingStart ו־existingEnd, ומולו בודקים תור חדש המורכב מ־newStart ו-newEnd.
הדרך המתבקשת לבדוק אם יש חפיפה היא לכסות את המצבים הבאים (אחד מהם מספיק לחפיפה):
- זמן ההתחלה החדש נמצא בטווח של הקיים
- זמן הסיום החדש נמצא בטווח של הקיים
- זמן ההתחלה החדש קטן מזמן התחלה הקיים וזמן הסיום החדש גדול מזמן הסיום הקיים.
לכן:
קוד: |
var overlapping = (newStart >= existingStart && newStart <= existingEnd) || (newEnd >= existingStart && newEnd <= existingEnd) || (newStart < existingStart && newEnd > existingEnd); |
זה לא כל כך יעיל, ובדיקה טובה יותר מצמצמת את התנאים הנ"ל אל (שניהם צריכים להתקיים):
- זמן ההתחלה החדש קטן שווה לזמן הסיום הקיים
- זמן הסיום החדש גדול שווה לזמן ההתחלה הקיים
לכן
קוד: |
var overlapping = (newStart <= existingEnd) && (newEnd >= existingStart); |
תלוי בדחיסות התורים, יכול להיות שיהיה יעיל יותר לחשב את הזמנים הפנויים בין התורים הקיימים ואז לבדוק אם התור החדש מוכל בתוך הזמנים הפנויים (שים לב: מוכל, לא חופף, גם לא חלקית).