المخزن المؤقت الدائري، أو المخزن المؤقت الدوري، أو مخزن الحلقة، هو بنية بيانات تستخدم مخزنًا مؤقتًا واحدًا ثابت الحجم كما لو كان موصولًا من طرفه بطرَفه.
يبدأ المخزن المؤقت الدائري فارغًا وله طول محدد مسبقًا. على سبيل المثال، هذا مخزن من 7 عناصر:
[ ][ ][ ][ ][ ][ ][ ]
افترض أن العدد 1 كُتب في منتصف المخزن (لا يهم موضع البداية الدقيق في المخزن الدائري):
[ ][ ][ ][1][ ][ ][ ]
ثم افترض أنه أُضيف عنصران آخران، 2 و3، يُضافان بعد 1:
[ ][ ][ ][1][2][3][ ]
إذا أُزيل عنصران بعد ذلك من المخزن، فستُزال أقدم القيم الموجودة داخل المخزن. العنصران المُزالان في هذه الحالة هما 1 و2، ولا يبقى في المخزن سوى 3:
[ ][ ][ ][ ][ ][3][ ]
إذا احتوى المخزن على 7 عناصر فهو ممتلئ تمامًا:
[5][6][7][8][9][3][4]
عندما يمتلئ المخزن يُرفَع خطأ يُنبّه العميل إلى أن الكتابات الإضافية محجوبة حتى تتحرر خانة.
عندما يمتلئ المخزن، يمكن للعميل أن يختار الكتابة فوق أقدم البيانات بكتابة قسرية.
في هذه الحالة يُضاف عنصران آخران، A وB، فيكتبان فوق 3 و4:
[5][6][7][8][9][A][B]
استُبدل 3 و4 بـA وB، فأصبح 5 هو أقدم بيانات في المخزن.
وأخيرًا، إذا أُزيل عنصران فما سيُرجع هو 5 و6، ليصبح المخزن:
[ ][ ][7][8][9][A][B]
ولأن هناك مساحة متاحة، إذا استخدم العميل الكتابة فوق مرة أخرى لتخزين C وD، فسيُستخدم المكان الذي كان يخزّن فيه 5 و6 سابقًا، لا موضع 7 و8.
لا يزال 7 أقدم عنصر، وقد امتلأ المخزن مرة أخرى.
[C][D][7][8][9][A][B]
يقدّم هذا التمرين مفهومين قد لا تكون قد صادفتهما من قبل:
تنتمي كل الكلمات في 8th إلى فضاء أسماء، فمثلًا تشير a:new إلى الكلمة new في فضاء الأسماء a.
ويمكنك أيضًا تعريف فضاءات أسماء مخصصة، وهو ما نفعله في أعلى الملف circular-buffer.8th:
ns: cb
يعني ذلك أنه يمكن الوصول إلى كل الكلمات داخل ذلك الملف عبر cb:<word>، وهذا أسلوب رائع لتجميع الوظائف المترابطة.
لمزيد من المعلومات، اطّلع على وثائق فضاءات الأسماء.
من المتوقّع أن ترمي الكلمتان read وwrite استثناءً عند استدعائهما على مخزن دائري في حالة غير صالحة.
لمزيد من المعلومات، اطّلع على وثائق الاستثناءات ومعالجة الأخطاء.
لك مطلق الحرية في تنفيذ المخزن الدائري كما تشاء، لكن يمكنك التفكير في استخدام دعم الكائنات في 8th.
سجّل في Exercism لتتعلّم وتتقن 8th عبر 70 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.
في هذا الفيديو نلقي نظرة على المخزن المؤقت الدائري: ما هو، وأين يُستخدم، وتطبيقاته المختلفة، بما في ذلك الطوابير والمصفوفات الثابتة والديناميكية وبنى البيانات غير القابلة للتغيير وتطبيق ممتع قائم على الوكلاء.