59 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C++
		
	
	
	
| //===- ArchiveYAML.cpp - ELF YAMLIO implementation -------------------- ----===//
 | |
| //
 | |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
 | |
| // See https://llvm.org/LICENSE.txt for license information.
 | |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 | |
| //
 | |
| //===----------------------------------------------------------------------===//
 | |
| //
 | |
| // This file defines classes for handling the YAML representation of archives.
 | |
| //
 | |
| //===----------------------------------------------------------------------===//
 | |
| 
 | |
| #include "llvm/ObjectYAML/ArchiveYAML.h"
 | |
| 
 | |
| namespace llvm {
 | |
| 
 | |
| namespace yaml {
 | |
| 
 | |
| void MappingTraits<ArchYAML::Archive>::mapping(IO &IO, ArchYAML::Archive &A) {
 | |
|   assert(!IO.getContext() && "The IO context is initialized already");
 | |
|   IO.setContext(&A);
 | |
|   IO.mapTag("!Arch", true);
 | |
|   IO.mapOptional("Magic", A.Magic, "!<arch>\n");
 | |
|   IO.mapOptional("Members", A.Members);
 | |
|   IO.mapOptional("Content", A.Content);
 | |
|   IO.setContext(nullptr);
 | |
| }
 | |
| 
 | |
| std::string MappingTraits<ArchYAML::Archive>::validate(IO &,
 | |
|                                                        ArchYAML::Archive &A) {
 | |
|   if (A.Members && A.Content)
 | |
|     return "\"Content\" and \"Members\" cannot be used together";
 | |
|   return "";
 | |
| }
 | |
| 
 | |
| void MappingTraits<ArchYAML::Archive::Child>::mapping(
 | |
|     IO &IO, ArchYAML::Archive::Child &E) {
 | |
|   assert(IO.getContext() && "The IO context is not initialized");
 | |
|   for (auto &P : E.Fields)
 | |
|     IO.mapOptional(P.first.data(), P.second.Value, P.second.DefaultValue);
 | |
|   IO.mapOptional("Content", E.Content);
 | |
|   IO.mapOptional("PaddingByte", E.PaddingByte);
 | |
| }
 | |
| 
 | |
| std::string
 | |
| MappingTraits<ArchYAML::Archive::Child>::validate(IO &,
 | |
|                                                   ArchYAML::Archive::Child &C) {
 | |
|   for (auto &P : C.Fields)
 | |
|     if (P.second.Value.size() > P.second.MaxLength)
 | |
|       return ("the maximum length of \"" + P.first + "\" field is " +
 | |
|               Twine(P.second.MaxLength))
 | |
|           .str();
 | |
|   return "";
 | |
| }
 | |
| 
 | |
| } // end namespace yaml
 | |
| 
 | |
| } // end namespace llvm
 |