// Copyright (c) 2017 Google Inc.
//
// 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.

#include "extensions.h"

#include <cassert>
#include <sstream>
#include <string>

#include "enum_string_mapping.h"

namespace libspirv {

std::string GetExtensionString(const spv_parsed_instruction_t* inst) {
  if (inst->opcode != SpvOpExtension)
    return "ERROR_not_op_extension";

  assert(inst->num_operands == 1);

  const auto& operand = inst->operands[0];
  assert(operand.type == SPV_OPERAND_TYPE_LITERAL_STRING);
  assert(inst->num_words > operand.offset);

  return reinterpret_cast<const char*>(inst->words + operand.offset);
}

std::string ExtensionSetToString(const ExtensionSet& extensions) {
  std::stringstream ss;
  extensions.ForEach([&ss](Extension ext) {
      ss << ExtensionToString(ext) << " ";
  });
  return ss.str();
}

}  // namespace libspirv
