/*
 * 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__