12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- // Copyright (c) 2018 Google LLC
- //
- // 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 SOURCE_COMP_MARKV_LOGGER_H_
- #define SOURCE_COMP_MARKV_LOGGER_H_
- #include "source/comp/markv.h"
- namespace spvtools {
- namespace comp {
- class MarkvLogger {
- public:
- MarkvLogger(MarkvLogConsumer log_consumer, MarkvDebugConsumer debug_consumer)
- : log_consumer_(log_consumer), debug_consumer_(debug_consumer) {}
- void AppendText(const std::string& str) {
- Append(str);
- use_delimiter_ = false;
- }
- void AppendTextNewLine(const std::string& str) {
- Append(str);
- Append("\n");
- use_delimiter_ = false;
- }
- void AppendBitSequence(const std::string& str) {
- if (debug_consumer_) instruction_bits_ << str;
- if (use_delimiter_) Append("-");
- Append(str);
- use_delimiter_ = true;
- }
- void AppendWhitespaces(size_t num) {
- Append(std::string(num, ' '));
- use_delimiter_ = false;
- }
- void NewLine() {
- Append("\n");
- use_delimiter_ = false;
- }
- bool DebugInstruction(const spv_parsed_instruction_t& inst) {
- bool result = true;
- if (debug_consumer_) {
- result = debug_consumer_(
- std::vector<uint32_t>(inst.words, inst.words + inst.num_words),
- instruction_bits_.str(), instruction_comment_.str());
- instruction_bits_.str(std::string());
- instruction_comment_.str(std::string());
- }
- return result;
- }
- private:
- MarkvLogger(const MarkvLogger&) = delete;
- MarkvLogger(MarkvLogger&&) = delete;
- MarkvLogger& operator=(const MarkvLogger&) = delete;
- MarkvLogger& operator=(MarkvLogger&&) = delete;
- void Append(const std::string& str) {
- if (log_consumer_) log_consumer_(str);
- if (debug_consumer_) instruction_comment_ << str;
- }
- MarkvLogConsumer log_consumer_;
- MarkvDebugConsumer debug_consumer_;
- std::stringstream instruction_bits_;
- std::stringstream instruction_comment_;
- // If true a delimiter will be appended before the next bit sequence.
- // Used to generate outputs like: 1100-0 1110-1-1100-1-1111-0 110-0.
- bool use_delimiter_ = false;
- };
- } // namespace comp
- } // namespace spvtools
- #endif // SOURCE_COMP_MARKV_LOGGER_H_
|