לדלג לתוכן

פרויקט ספריית משאבים ונתונים

נבנה אחרי פרק 2 ספריית C++ שמקבלת רשומות בינאריות, מחזיקה אותן בתקציב זיכרון ומאפשרת מעבר על שדות בלי להעתיק כל מחרוזת. הפרויקט מרחיב את ספריית הפרק עם allocator שניתן להכשיל ועם parser שהקלט שלו יכול להגיע מכמה buffers.

הפורמט מתחיל במספר רשומות, ואחריו רשומות בעלות מזהה, אורך ושדה bytes. קובעים רוחב וסדר bytes לכל מספר. כל חיבור וחישוב גודל נבדקים לפני גישה לזיכרון. הפלט מציע owner שמחזיק את הנתונים וview שהחיים שלה מוגבלים אליו.

הAPI מבדיל בין קלט פגום, חריגה מתקציב וכשל הקצאה. פעולה שנכשלה אינה משאירה אוסף שנראה תקין בחלקו בלי שהחוזה אומר זאת. מגדירים איזו פעולה שומרת strong exception guarantee ואיזו מבטיחה רק invariant תקין.

ההגשה כוללת שתי דרכי אחסון תחת אותו חוזה, בדיקות חוקיות ושימושים שנדחים בקומפילציה. מזריקים כשל בהקצאה הראשונה, השנייה וכך הלאה עד שהפעולה מסתיימת. אחרי כל כשל משווים את מצב הספרייה למצב שהיה לפניה ובודקים שאין משאב שנשאר ללא בעלים.

היעד הוא 30 עד 50 שעות עבודה נוספות. זמן העתקת המימוש מפרק 2 אינו נספר שוב; ההרחבה היא parser מפוצל, הזרקת כשל והשוואת backend.