1a8cfc29cSZachary Turner //===- StringsAndChecksums.cpp ----------------------------------*- C++ -*-===//
2a8cfc29cSZachary Turner //
3a8cfc29cSZachary Turner //                     The LLVM Compiler Infrastructure
4a8cfc29cSZachary Turner //
5a8cfc29cSZachary Turner // This file is distributed under the University of Illinois Open Source
6a8cfc29cSZachary Turner // License. See LICENSE.TXT for details.
7a8cfc29cSZachary Turner //
8a8cfc29cSZachary Turner //===----------------------------------------------------------------------===//
9a8cfc29cSZachary Turner 
10a8cfc29cSZachary Turner #include "llvm/DebugInfo/CodeView/StringsAndChecksums.h"
11a8cfc29cSZachary Turner #include "llvm/DebugInfo/CodeView/DebugChecksumsSubsection.h"
12a8cfc29cSZachary Turner #include "llvm/DebugInfo/CodeView/DebugStringTableSubsection.h"
13a8cfc29cSZachary Turner #include "llvm/DebugInfo/CodeView/DebugSubsectionRecord.h"
14a8cfc29cSZachary Turner 
15a8cfc29cSZachary Turner using namespace llvm;
16a8cfc29cSZachary Turner using namespace llvm::codeview;
17a8cfc29cSZachary Turner 
18a8cfc29cSZachary Turner StringsAndChecksumsRef::StringsAndChecksumsRef() {}
19a8cfc29cSZachary Turner 
20a8cfc29cSZachary Turner StringsAndChecksumsRef::StringsAndChecksumsRef(
21a8cfc29cSZachary Turner     const DebugStringTableSubsectionRef &Strings)
22a8cfc29cSZachary Turner     : Strings(&Strings) {}
23a8cfc29cSZachary Turner 
24a8cfc29cSZachary Turner StringsAndChecksumsRef::StringsAndChecksumsRef(
25a8cfc29cSZachary Turner     const DebugStringTableSubsectionRef &Strings,
26a8cfc29cSZachary Turner     const DebugChecksumsSubsectionRef &Checksums)
27a8cfc29cSZachary Turner     : Strings(&Strings), Checksums(&Checksums) {}
28a8cfc29cSZachary Turner 
29a8cfc29cSZachary Turner void StringsAndChecksumsRef::initializeStrings(
30a8cfc29cSZachary Turner     const DebugSubsectionRecord &SR) {
31a8cfc29cSZachary Turner   assert(SR.kind() == DebugSubsectionKind::StringTable);
32a8cfc29cSZachary Turner   assert(!Strings && "Found a string table even though we already have one!");
33a8cfc29cSZachary Turner 
34a8cfc29cSZachary Turner   OwnedStrings = llvm::make_unique<DebugStringTableSubsectionRef>();
35a8cfc29cSZachary Turner   consumeError(OwnedStrings->initialize(SR.getRecordData()));
36a8cfc29cSZachary Turner   Strings = OwnedStrings.get();
37a8cfc29cSZachary Turner }
38a8cfc29cSZachary Turner 
39*4e950647SZachary Turner void StringsAndChecksumsRef::setChecksums(
40*4e950647SZachary Turner     const DebugChecksumsSubsectionRef &CS) {
41*4e950647SZachary Turner   OwnedChecksums = llvm::make_unique<DebugChecksumsSubsectionRef>();
42*4e950647SZachary Turner   *OwnedChecksums = CS;
43*4e950647SZachary Turner   Checksums = OwnedChecksums.get();
44*4e950647SZachary Turner }
45*4e950647SZachary Turner 
46a8cfc29cSZachary Turner void StringsAndChecksumsRef::initializeChecksums(
47a8cfc29cSZachary Turner     const DebugSubsectionRecord &FCR) {
48a8cfc29cSZachary Turner   assert(FCR.kind() == DebugSubsectionKind::FileChecksums);
49a8cfc29cSZachary Turner   if (Checksums)
50a8cfc29cSZachary Turner     return;
51a8cfc29cSZachary Turner 
52a8cfc29cSZachary Turner   OwnedChecksums = llvm::make_unique<DebugChecksumsSubsectionRef>();
53a8cfc29cSZachary Turner   consumeError(OwnedChecksums->initialize(FCR.getRecordData()));
54a8cfc29cSZachary Turner   Checksums = OwnedChecksums.get();
55a8cfc29cSZachary Turner }
56