HIDL-এ safe_union
একটি স্পষ্টভাবে ট্যাগ করা ইউনিয়ন টাইপ প্রতিনিধিত্ব করে। এটি একটি union
অনুরূপ, ব্যতীত safe_union
অন্তর্নিহিত প্রকারের উপর নজর রাখে এবং জাভার সাথে সামঞ্জস্যপূর্ণ। নতুন এবং আপগ্রেড করা ডিভাইসগুলির জন্য Android 10 এবং উচ্চতর সংস্করণে safe_union
টাইপ উপলব্ধ।
সিনট্যাক্স
HIDL-এ একটি safe_union
প্রকাশ করা হয় হুবহু একটি union
বা struct
মতো।
safe_union MySafeUnion { TypeA a; TypeB b; ... };
ব্যবহার
রানটাইমে, একটি safe_union
শুধুমাত্র এক প্রকার। ডিফল্টরূপে, এটি ইউনিয়নে প্রথম প্রকার। উদাহরণস্বরূপ, উপরে, MySafeUnion
ডিফল্টভাবে TypeA
।
hidl-gen
C++ এবং Java উভয় ক্ষেত্রেই safe_union
জন্য একটি কাস্টম ক্লাস বা কাঠামো তৈরি করে। এই শ্রেণীতে প্রতিটি সদস্যের জন্য একটি বৈষম্যকারী অন্তর্ভুক্ত রয়েছে ( hidl_discriminator
এ), বর্তমান বৈষম্যকারী ( getDiscriminator
) এবং প্রতিটি সদস্যের জন্য সেটার এবং গেটার পাওয়ার একটি পদ্ধতি। প্রতিটি সেটার এবং গেটারকে ঠিক তার সদস্য হিসাবে নাম দেওয়া হয়েছে। উদাহরণস্বরূপ, TypeA a
এর গেটারকে "a" বলা হয়, এবং এটি TypeA
এর কিছু প্রদান করে। সংশ্লিষ্ট সেটটারকে "a"ও বলা হয় এবং TypeA
এর একটি প্যারামিটার নেয়। একটি safe_union
এ মান সেট করা বৈষম্যকারীর মান আপডেট করে যা getDiscriminator
দ্বারা প্রত্যাবর্তিত হয়। বর্তমান বৈষম্যকারী নয় এমন একটি বৈষম্যকারীর কাছ থেকে একটি মান অ্যাক্সেস করা প্রোগ্রামটি বাতিল করে দেয়। উদাহরণস্বরূপ, যদি MySafeUnion
এর একটি উদাহরণে getDiscriminator
কল করা hidl_discriminator::b
ফেরত দেয়, তাহলে a
পুনরুদ্ধার করার চেষ্টা করে প্রোগ্রামটি বাতিল হয়ে যায়।
মনোস্টেট
একটি safe_union
সর্বদা একটি মান থাকে, কিন্তু যদি এটি একটি মান না রাখতে চায়, তাহলে android.hidl.safe_union@1.0::Monostate
একটি স্থানধারক হিসাবে ব্যবহার করুন। উদাহরণস্বরূপ, নিম্নলিখিত ইউনিয়নটি noinit
(খালি) বা foo
হতে পারে:
import android.hidl.safe_union@1.0::Monostate; safe_union OptionalFoo { Monostate noinit; Foo foo; };