- /// getElement - Return specified element.
- MetadataBase *getElement(unsigned i) const {
- assert(i < getNumElements() && "Invalid element number!");
- return Node[i];
- }
-
- /// getNumElements - Return number of NamedMDNode elements.
- unsigned getNumElements() const {
- return (unsigned)Node.size();
- }
-
- /// addElement - Add metadata element.
- void addElement(MetadataBase *M) {
- Node.push_back(TrackingVH<MetadataBase>(M));
- }
-
- typedef SmallVectorImpl<TrackingVH<MetadataBase> >::iterator elem_iterator;
- typedef SmallVectorImpl<TrackingVH<MetadataBase> >::const_iterator
- const_elem_iterator;
- bool elem_empty() const { return Node.empty(); }
- const_elem_iterator elem_begin() const { return Node.begin(); }
- const_elem_iterator elem_end() const { return Node.end(); }
- elem_iterator elem_begin() { return Node.begin(); }
- elem_iterator elem_end() { return Node.end(); }
-
- /// Methods for support type inquiry through isa, cast, and dyn_cast:
- static inline bool classof(const NamedMDNode *) { return true; }
- static bool classof(const Value *V) {
- return V->getValueID() == NamedMDNodeVal;
- }
-};
-
-//===----------------------------------------------------------------------===//
-/// MetadataContext -
-/// MetadataContext handles uniquing and assignment of IDs for custom metadata
-/// types. Custom metadata handler names do not contain spaces. And the name
-/// must start with an alphabet. The regular expression used to check name
-/// is [a-zA-Z$._][a-zA-Z$._0-9]*
-class MetadataContext {
- // DO NOT IMPLEMENT
- MetadataContext(MetadataContext&);
- void operator=(MetadataContext&);
-
- MetadataContextImpl *const pImpl;
-public:
- MetadataContext();
- ~MetadataContext();
-
- /// registerMDKind - Register a new metadata kind and return its ID.
- /// A metadata kind can be registered only once.
- unsigned registerMDKind(StringRef Name);
-
- /// getMDKind - Return metadata kind. If the requested metadata kind
- /// is not registered then return 0.
- unsigned getMDKind(StringRef Name) const;