ArchiveReader.h revision affc150dc44fab1911775a49636d0ce85333b634
1//===- ArchiveReader.h ----------------------------------------------------===//
2//
3//                     The MCLinker Project
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9#ifndef MCLD_ARCHIVE_READER_INTERFACE_H
10#define MCLD_ARCHIVE_READER_INTERFACE_H
11#ifdef ENABLE_UNITTEST
12#include <gtest.h>
13#endif
14#include "mcld/LD/LDReader.h"
15
16namespace mcld
17{
18
19class Input;
20class InputTree;
21
22/** \class ArchiveReader
23 *  \brief ArchiveReader provides an common interface for all archive readers.
24 *
25 *  ArchiveReader also reads the target-independent parts of an archive file.
26 *  There are some property on all the archive formats.
27 *  1. All archive elements star on an even boundary, new line padded;
28 *  2. All archive headers are char *;
29 *  3. All archive headers are the same size.
30 */
31
32class ArchiveReader : public LDReader
33{
34protected:
35  struct ArchiveMemberHeader
36  {
37    char name[16];
38    char date[12];
39    char uid[6];
40    char gid[6];
41    char mode[8];
42    char size[10];
43    char finalMagic[2];
44  };
45
46public:
47  ArchiveReader();
48  virtual ~ArchiveReader();
49
50  virtual InputTree *readArchive(Input &input) = 0;
51};
52
53} // namespace of mcld
54
55#endif
56
57