يتم إعطاؤك مقتطف تعليمات برمجية يحسب السعة الجديدة لمصفوفة ديناميكية بناءً على سعتها الحالية وحجم العناصر التي تحتوي عليها. تتمثل مهمتك في فهم منطق مقتطف الشفرة المقدم وتنفيذ وظيفة تكرر سلوكها.

يتكون مقتطف التعليمات البرمجية من عبارة مطابقة تأخذ السعة الحالية للمصفوفة (`b.capacity()`) كمدخل وتعيد السعة الجديدة بناءً على شروط معينة.

شروط تحديد السعة الجديدة هي كما يلي:
- إذا كانت السعة الحالية هي 0، فيجب ضبط السعة الجديدة على 1.
- إذا كانت السعة الحالية أقل من `4096 / size_of_t`، حيث `size_of_t` هو حجم العناصر الموجودة في المصفوفة، فيجب ضبط السعة الجديدة على `current_capacity * 2`.
- إذا كانت السعة الحالية أكبر من `4096 * 32 / size_of_t`، فيجب ضبط السعة الجديدة على `current_capacity * 2`.
- إذا كانت السعة الحالية بين `4096 / size_of_t` و`4096 * 32 / size_of_t`، ضمنًا، فيجب ضبط السعة الجديدة على `(current_capacity * 3 + 1) / 2`.

اكتب دالة `calculate_new_capacity(current_capacity: usize, size_of_t: usize) -> use` التي تأخذ السعة الحالية و`size_of_t` كمدخلات وتعيد السعة الجديدة بناءً على الشروط المذكورة أعلاه.

توقيع الوظيفة: `fn count_new_capacity(current_capacity: use, size_of_t: use) -> use`

**مدخل**
- عددان صحيحان ``السعة_الحالية`` و``حجم_t`` (1 ≥ السعة_الحالية ≥ 2^31-1, 1 ≥ size_of_t ≥ 2^31-1).

**انتاج**
- إرجاع عدد صحيح يمثل السعة الجديدة للمصفوفة.

**مثال**
''''الصدأ
تأكيد_eq!(calculate_new_capacity(0, 4), 1);
تأكيد_eq!(calculate_new_capacity(1024, 4), 2048);
تأكيد_eq!(calculate_new_capacity(100000, 4), 200000);
تأكيد_eq!(calculate_new_capacity(20000, 4), 30001);
```
{"source": "argilla/DistiCoder-dpo-binarized", "kind": "synthetic", "evolved_from": null}