public void decode(Decoder decoder, PcodeFactory pfactory) throws DecoderException {
		for (;;) {
			int elem = decoder.openElement();
			if (elem == 0) {
				break;
			}
			if (elem == ELEM_RETURN_TYPE.id()) {
				ClangReturnType child = new ClangReturnType(this);
				child.decode(decoder, pfactory);
				AddTokenGroup(child);
			}
			else if (elem == ELEM_VARDECL.id()) {
				ClangVariableDecl child = new ClangVariableDecl(this);
				child.decode(decoder, pfactory);
				AddTokenGroup(child);
			}
			else if (elem == ELEM_STATEMENT.id()) {
				ClangStatement child = new ClangStatement(this);
				child.decode(decoder, pfactory);
				AddTokenGroup(child);
			}
			else if (elem == ELEM_FUNCPROTO.id()) {
				ClangFuncProto child = new ClangFuncProto(this);
				child.decode(decoder, pfactory);
				AddTokenGroup(child);
			}
			else if (elem == ELEM_BLOCK.id()) {
				ClangTokenGroup child = new ClangTokenGroup(this);
				child.decode(decoder, pfactory);
				AddTokenGroup(child);
			}
			else {
				ClangToken tok = ClangToken.buildToken(elem, this, decoder, pfactory);
				AddTokenGroup(tok);
			}
			decoder.closeElement(elem);
		}
	}
Decode this text from an encoded stream.
@param decoder is the decoder for the stream
@param pfactory is used to look up p-code attributes to associate with tokens
@throws DecoderException for problems decoding the stream
Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/ClangTokenGroup.java