diff options
author | Jacques Lucke <jacques@blender.org> | 2022-09-08 11:35:43 +0300 |
---|---|---|
committer | Jacques Lucke <jacques@blender.org> | 2022-09-08 11:35:43 +0300 |
commit | 2f1d60a481e2099b5c92f4e23a9ab22f94ed07cf (patch) | |
tree | 5cd424c39c2772ab4897549dc4e65caa40a92dc1 /source/blender/blenlib/intern/compute_context.cc | |
parent | 1c37a515bc257635b172dc343764aa2f64f7121c (diff) |
improve compute context docs
Diffstat (limited to 'source/blender/blenlib/intern/compute_context.cc')
-rw-r--r-- | source/blender/blenlib/intern/compute_context.cc | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/source/blender/blenlib/intern/compute_context.cc b/source/blender/blenlib/intern/compute_context.cc new file mode 100644 index 00000000000..50a4a90a4a9 --- /dev/null +++ b/source/blender/blenlib/intern/compute_context.cc @@ -0,0 +1,48 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#include "BLI_compute_context.hh" +#include "BLI_hash_md5.h" + +namespace blender { + +void ComputeContextHash::mix_in(const void *data, int64_t len) +{ + DynamicStackBuffer<> buffer_owner(HashSizeInBytes + len, 8); + char *buffer = static_cast<char *>(buffer_owner.buffer()); + memcpy(buffer, this, HashSizeInBytes); + memcpy(buffer + HashSizeInBytes, data, len); + + BLI_hash_md5_buffer(buffer, HashSizeInBytes + len, this); +} + +std::ostream &operator<<(std::ostream &stream, const ComputeContextHash &hash) +{ + std::stringstream ss; + ss << "0x" << std::hex << hash.v1 << hash.v2; + stream << ss.str(); + return stream; +} + +void ComputeContext::print_stack(std::ostream &stream, StringRef name) const +{ + Stack<const ComputeContext *> stack; + for (const ComputeContext *current = this; current; current = current->parent_) { + stack.push(current); + } + stream << "Context Stack: " << name << "\n"; + while (!stack.is_empty()) { + const ComputeContext *current = stack.pop(); + stream << "-> "; + current->print_current_in_line(stream); + const ComputeContextHash ¤t_hash = current->hash_; + stream << " \t(hash: " << current_hash << ")\n"; + } +} + +std::ostream &operator<<(std::ostream &stream, const ComputeContext &compute_context) +{ + compute_context.print_stack(stream, ""); + return stream; +} + +} // namespace blender |