- /// Structure to represent an optional metadata field.
- template <class FieldTy> struct MDFieldImpl {
- typedef MDFieldImpl ImplTy;
- FieldTy Val;
- bool Seen;
-
- void assign(FieldTy Val) {
- Seen = true;
- this->Val = Val;
- }
-
- explicit MDFieldImpl(FieldTy Default) : Val(Default), Seen(false) {}
- };
- template <class NumTy> struct MDUnsignedField : public MDFieldImpl<NumTy> {
- typedef typename MDUnsignedField::ImplTy ImplTy;
- NumTy Max;
-
- MDUnsignedField(NumTy Default = 0,
- NumTy Max = std::numeric_limits<NumTy>::max())
- : ImplTy(Default), Max(Max) {}
- };
- struct MDField : public MDFieldImpl<Metadata *> {
- MDField() : ImplTy(nullptr) {}
- };
-