/* This file is part of the sirit project. * Copyright (c) 2018 ReinUsesLisp * This software may be used and distributed according to the terms of the GNU * Lesser General Public License version 2.1 or any later version. */ #pragma once #include "common_types.h" #include "operand.h" #include "sirit/sirit.h" #include "stream.h" #include namespace Sirit { class Op : public Operand { public: explicit Op(spv::Op opcode, std::optional id = {}, Id result_type = nullptr); ~Op(); virtual void Fetch(Stream& stream) const; virtual u16 GetWordCount() const; virtual bool operator==(const Operand& other) const; void Write(Stream& stream) const; void Sink(Operand* operand); void Sink(const std::vector& operands); void Add(const Literal& literal); void Add(const std::vector& literals); void Add(const Operand* operand); void Add(u32 integer); void Add(const std::string& string); void Add(const std::vector& ids); private: u16 WordCount() const; spv::Op opcode; Id result_type; std::optional id; std::vector operands; std::vector> operand_store; }; } // namespace Sirit