একটি সার্কুলার বাফার, সাইক্লিক বাফার বা রিং বাফার হলো এমন একটি ডেটা স্ট্রাকচার, যা একটি মাত্র নির্দিষ্ট আকারের বাফার ব্যবহার করে, যেন এর দুই প্রান্ত পরস্পরের সাথে জোড়া লাগানো।
একটি সার্কুলার বাফার শুরুতে খালি থাকে এবং এর একটি পূর্বনির্ধারিত দৈর্ঘ্য থাকে। যেমন, এটি ৭টি এলিমেন্টের একটি বাফার:
[ ][ ][ ][ ][ ][ ][ ]
ধরে নিন বাফারের মাঝখানে একটি 1 লেখা হলো (সার্কুলার বাফারে ঠিক কোথা থেকে শুরু হচ্ছে সেটি গুরুত্বপূর্ণ নয়):
[ ][ ][ ][1][ ][ ][ ]
এরপর ধরে নিন আরও দুটি এলিমেন্ট, 2 ও 3, যোগ করা হলো, যেগুলো 1-এর পরে যুক্ত হয়:
[ ][ ][ ][1][2][3][ ]
এরপর যদি বাফার থেকে দুটি এলিমেন্ট সরিয়ে ফেলা হয়, তবে বাফারের ভেতরের সবচেয়ে পুরোনো মানগুলো সরিয়ে ফেলা হয়। এক্ষেত্রে যে দুটি এলিমেন্ট সরানো হলো সেগুলো 1 ও 2, ফলে বাফারে শুধু একটি 3 পড়ে থাকে:
[ ][ ][ ][ ][ ][3][ ]
বাফারে যদি ৭টি এলিমেন্ট থাকে, তবে তা পুরোপুরি ভরে যায়:
[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 বলতে a নেমস্পেসের new ওয়ার্ডকে বোঝায়।
কাস্টম নেমস্পেসও ডিফাইন করা যায়, যা আমরা circular-buffer.8th ফাইলের শুরুতে করি:
ns: cb
এর মানে হলো, ওই ফাইলের সব ওয়ার্ড cb:<word> দিয়ে অ্যাক্সেস করা যায়, যা সম্পর্কিত কার্যকারিতাগুলোকে একসাথে রাখার দুর্দান্ত একটি উপায়।
আরও তথ্যের জন্য, নেমস্পেস ডকুমেন্টেশনটি দেখুন।
যখন এগুলোকে অবৈধ অবস্থায় থাকা একটি সার্কুলার বাফারে কল করা হয়, তখন read ও write ওয়ার্ড দুটিরই একটি এক্সেপশন থ্রো করার কথা।
আরও তথ্যের জন্য, এক্সেপশন ও এরর হ্যান্ডলিং ডকুমেন্টেশনটি দেখুন।
আপনি স্বাধীনভাবে আপনার ইচ্ছেমতো সার্কুলার বাফার ইমপ্লিমেন্ট করতে পারেন, তবে 8th-এর অবজেক্ট সাপোর্ট ব্যবহারের কথা ভাবতে পারেন।
Exercism-এ সাইন আপ করুন, 8th ট্র্যাকের 70টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।
এই ভিডিওতে আমরা সার্কুলার বাফার দেখব: এগুলো কী, কোথায় ব্যবহৃত হয় এবং এর বিভিন্ন ইমপ্লিমেন্টেশন, যার মধ্যে রয়েছে কিউ, স্ট্যাটিক ও ডাইনামিক অ্যারে, ইমিউটেবল ডেটা স্ট্রাকচার এবং একটি মজার এজেন্ট-ভিত্তিক ইমপ্লিমেন্টেশন।