summaryrefslogtreecommitdiffstats
path: root/include/bcinfo/BitcodeTranslator.h
blob: 92fe777ffdb775bb39d58fa22bd3192a3f91e9d7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
/*
 * Copyright 2011, The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef __ANDROID_BCINFO_BITCODETRANSLATOR_H__
#define __ANDROID_BCINFO_BITCODETRANSLATOR_H__

#include <cstddef>

namespace bcinfo {

class BitcodeTranslator {
 private:
  const char *mBitcode;
  size_t mBitcodeSize;
  const char *mTranslatedBitcode;
  size_t mTranslatedBitcodeSize;
  unsigned int mVersion;

 public:
  /**
   * Translates \p bitcode of a particular \p version to the latest version.
   *
   * \param bitcode - input bitcode string.
   * \param bitcodeSize - length of \p bitcode string (in bytes).
   * \param version - corresponding target SDK version of \p bitcode.
   */
  BitcodeTranslator(const char *bitcode, size_t bitcodeSize,
                    unsigned int version);

  ~BitcodeTranslator();

  /**
   * Translate the supplied bitcode to the latest supported version.
   *
   * \return true if the bitcode was translated successfully and false if an
   *         error occurred.
   */
  bool translate();

  /**
   * \return translated bitcode.
   */
  const char *getTranslatedBitcode() const {
    return mTranslatedBitcode;
  }

  /**
   * \return size of the translated bitcode (in bytes).
   */
  size_t getTranslatedBitcodeSize() const {
    return mTranslatedBitcodeSize;
  }
};

}  // namespace bcinfo

#endif  // __ANDROID_BCINFO_BITCODETRANSLATOR_H__