একটি সার্কুলার বাফার, সাইক্লিক বাফার বা রিং বাফার হলো এমন একটি ডেটা স্ট্রাকচার, যা একটি মাত্র নির্দিষ্ট আকারের বাফার ব্যবহার করে, যেন এর দুই প্রান্ত পরস্পরের সাথে জোড়া লাগানো।
একটি সার্কুলার বাফার শুরুতে খালি থাকে এবং এর একটি পূর্বনির্ধারিত দৈর্ঘ্য থাকে। যেমন, এটি ৭টি এলিমেন্টের একটি বাফার:
[ ][ ][ ][ ][ ][ ][ ]
ধরে নিন বাফারের মাঝখানে একটি 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]
অপারেশন চলাকালীন এরর হলে কীভাবে প্রদত্ত মেসেজসহ এক্সেপশন সিগন্যাল করতে হয়, তা জানতে Error class hiearchy (class side) দেখুন।
Exercism-এ সাইন আপ করুন, Pharo ট্র্যাকের 50টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।
এই ভিডিওতে আমরা সার্কুলার বাফার দেখব: এগুলো কী, কোথায় ব্যবহৃত হয় এবং এর বিভিন্ন ইমপ্লিমেন্টেশন, যার মধ্যে রয়েছে কিউ, স্ট্যাটিক ও ডাইনামিক অ্যারে, ইমিউটেবল ডেটা স্ট্রাকচার এবং একটি মজার এজেন্ট-ভিত্তিক ইমপ্লিমেন্টেশন।