Безопасный союз

safe_union в HIDL представляет собой явно помеченный тип объединения. Это похоже на union , за исключением того, что safe_union отслеживает базовый тип и совместим с Java. Тип safe_union доступен в Android 10 и более поздних версиях для новых и обновленных устройств.

Синтаксис

safe_union выражается в HIDL точно так же, как union или struct .

safe_union MySafeUnion {
     TypeA a;
     TypeB b;
     ...
};

Использование

Во время выполнения safe_union может быть только одного типа. По умолчанию это первый тип в объединении. Например, выше MySafeUnion по умолчанию имеет TypeA .

hidl-gen генерирует собственный класс или структуру для safe_union как в C++, так и в Java. This class includes a discriminator for each member (in hidl_discriminator ), a method to get the current discriminator ( getDiscriminator ), and setters and getters for each member. Каждый сеттер и геттер называется точно так же, как и его член. Например, метод получения для TypeA a называется «a» и возвращает что-то вроде TypeA . Соответствующий установщик также называется «a» и принимает параметр TypeA . Установка значения в safe_union обновляет значение дискриминатора, возвращаемое getDiscriminator . Доступ к значению из дискриминатора, который не является текущим дискриминатором, прерывает программу. Например, если вызов getDiscriminator для экземпляра MySafeUnion возвращает 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;
};
,

safe_union в HIDL представляет собой явно помеченный тип объединения. Это похоже на union , за исключением того, что safe_union отслеживает базовый тип и совместим с Java. Тип safe_union доступен в Android 10 и более поздних версиях для новых и обновленных устройств.

Синтаксис

safe_union выражается в HIDL точно так же, как union или struct .

safe_union MySafeUnion {
     TypeA a;
     TypeB b;
     ...
};

Использование

Во время выполнения safe_union может быть только одного типа. По умолчанию это первый тип в объединении. Например, выше MySafeUnion по умолчанию имеет TypeA

hidl-gen генерирует собственный класс или структуру для safe_union как в C++, так и в Java. Этот класс включает в себя дискриминатор для каждого члена (в hidl_discriminator ), метод для получения текущего дискриминатора ( getDiscriminator ), а также методы установки и получения для каждого члена. Каждый сеттер и геттер называется точно так же, как и его член. Например, метод получения для TypeA a называется «a» и возвращает что-то вроде TypeA . Соответствующий установщик также называется «a» и принимает параметр TypeA . Установка значения в safe_union обновляет значение дискриминатора, возвращаемое getDiscriminator . Доступ к значению из дискриминатора, который не является текущим дискриминатором, прерывает программу. Например, если вызов getDiscriminator для экземпляра MySafeUnion возвращает hidl_discriminator::b , то попытка получить a прерывает программу.

Monostate

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;
};
,

safe_union в HIDL представляет собой явно помеченный тип объединения. Это похоже на union , за исключением того, что safe_union отслеживает базовый тип и совместим с Java. Тип safe_union доступен в Android 10 и более поздних версиях для новых и обновленных устройств.

Синтаксис

safe_union выражается в HIDL точно так же, как union или struct .

safe_union MySafeUnion {
     TypeA a;
     TypeB b;
     ...
};

Использование

Во время выполнения safe_union может быть только одного типа. По умолчанию это первый тип в объединении. For instance, above, MySafeUnion is by default TypeA .

hidl-gen генерирует собственный класс или структуру для safe_union как в C++, так и в Java. Этот класс включает в себя дискриминатор для каждого члена (в hidl_discriminator ), метод для получения текущего дискриминатора ( getDiscriminator ), а также методы установки и получения для каждого члена. Каждый сеттер и геттер называется точно так же, как и его член. Например, метод получения для TypeA a называется «a» и возвращает что-то вроде TypeA . Соответствующий установщик также называется «a» и принимает параметр TypeA . Установка значения в safe_union обновляет значение дискриминатора, возвращаемое getDiscriminator . Доступ к значению из дискриминатора, который не является текущим дискриминатором, прерывает программу. Например, если вызов getDiscriminator для экземпляра MySafeUnion возвращает 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;
};