bloom_printers.hpp 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. // Copyright 2025 Braden Ganetsky
  2. // Distributed under the Boost Software License, Version 1.0.
  3. // https://www.boost.org/LICENSE_1_0.txt
  4. // Generated on 2025-06-29T10:15:10
  5. #ifndef BOOST_BLOOM_DETAIL_BLOOM_PRINTERS_HPP
  6. #define BOOST_BLOOM_DETAIL_BLOOM_PRINTERS_HPP
  7. #ifndef BOOST_ALL_NO_EMBEDDED_GDB_SCRIPTS
  8. #if defined(__ELF__)
  9. #ifdef __clang__
  10. #pragma clang diagnostic push
  11. #pragma clang diagnostic ignored "-Woverlength-strings"
  12. #endif
  13. __asm__(".pushsection \".debug_gdb_scripts\", \"MS\",%progbits,1\n"
  14. ".ascii \"\\4gdb.inlined-script.BOOST_BLOOM_DETAIL_BLOOM_PRINTERS_HPP\\n\"\n"
  15. ".ascii \"import gdb.printing\\n\"\n"
  16. ".ascii \"import gdb.xmethod\\n\"\n"
  17. ".ascii \"class BoostBloomFilterPrinter:\\n\"\n"
  18. ".ascii \" def __init__(self, val):\\n\"\n"
  19. ".ascii \" self.void_pointer = gdb.lookup_type(\\\"void\\\").pointer()\\n\"\n"
  20. ".ascii \" nullptr = gdb.Value(0).cast(self.void_pointer)\\n\"\n"
  21. ".ascii \" has_array = val[\\\"ar\\\"][\\\"data\\\"] != nullptr\\n\"\n"
  22. ".ascii \" if has_array:\\n\"\n"
  23. ".ascii \" stride = int(val[\\\"stride\\\"])\\n\"\n"
  24. ".ascii \" used_value_size = int(val[\\\"used_value_size\\\"])\\n\"\n"
  25. ".ascii \" self.array_size = int(val[\\\"hs\\\"][\\\"rng\\\"]) * stride + (used_value_size - stride)\\n\"\n"
  26. ".ascii \" else:\\n\"\n"
  27. ".ascii \" self.array_size = 0\\n\"\n"
  28. ".ascii \" self.capacity = self.array_size * 8\\n\"\n"
  29. ".ascii \" if has_array:\\n\"\n"
  30. ".ascii \" self.data = val[\\\"ar\\\"][\\\"array\\\"]\\n\"\n"
  31. ".ascii \" else:\\n\"\n"
  32. ".ascii \" self.data = nullptr\\n\"\n"
  33. ".ascii \" def to_string(self):\\n\"\n"
  34. ".ascii \" return f\\\"boost::bloom::filter with {{capacity = {self.capacity}, data = {self.data.cast(self.void_pointer)}, size = {self.array_size}}}\\\"\\n\"\n"
  35. ".ascii \" def display_hint(self):\\n\"\n"
  36. ".ascii \" return \\\"map\\\"\\n\"\n"
  37. ".ascii \" def children(self):\\n\"\n"
  38. ".ascii \" def generator():\\n\"\n"
  39. ".ascii \" data = self.data\\n\"\n"
  40. ".ascii \" for i in range(self.array_size):\\n\"\n"
  41. ".ascii \" yield \\\"\\\", f\\\"{i}\\\"\\n\"\n"
  42. ".ascii \" yield \\\"\\\", data.dereference()\\n\"\n"
  43. ".ascii \" data = data + 1\\n\"\n"
  44. ".ascii \" return generator()\\n\"\n"
  45. ".ascii \"def boost_bloom_build_pretty_printer():\\n\"\n"
  46. ".ascii \" pp = gdb.printing.RegexpCollectionPrettyPrinter(\\\"boost_bloom\\\")\\n\"\n"
  47. ".ascii \" add_template_printer = lambda name, printer: pp.add_printer(name, f\\\"^{name}<.*>$\\\", printer)\\n\"\n"
  48. ".ascii \" add_template_printer(\\\"boost::bloom::filter\\\", BoostBloomFilterPrinter)\\n\"\n"
  49. ".ascii \" return pp\\n\"\n"
  50. ".ascii \"gdb.printing.register_pretty_printer(gdb.current_objfile(), boost_bloom_build_pretty_printer())\\n\"\n"
  51. ".ascii \"# https://sourceware.org/gdb/current/onlinedocs/gdb.html/Writing-an-Xmethod.html\\n\"\n"
  52. ".ascii \"class BoostBloomFilterSubscriptMethod(gdb.xmethod.XMethod):\\n\"\n"
  53. ".ascii \" def __init__(self):\\n\"\n"
  54. ".ascii \" gdb.xmethod.XMethod.__init__(self, 'subscript')\\n\"\n"
  55. ".ascii \" def get_worker(self, method_name):\\n\"\n"
  56. ".ascii \" if method_name == 'operator[]':\\n\"\n"
  57. ".ascii \" return BoostBloomFilterSubscriptWorker()\\n\"\n"
  58. ".ascii \"class BoostBloomFilterSubscriptWorker(gdb.xmethod.XMethodWorker):\\n\"\n"
  59. ".ascii \" def get_arg_types(self):\\n\"\n"
  60. ".ascii \" return [gdb.lookup_type('std::size_t')]\\n\"\n"
  61. ".ascii \" def get_result_type(self, obj):\\n\"\n"
  62. ".ascii \" return gdb.lookup_type('unsigned char')\\n\"\n"
  63. ".ascii \" def __call__(self, obj, index):\\n\"\n"
  64. ".ascii \" fp = BoostBloomFilterPrinter(obj)\\n\"\n"
  65. ".ascii \" if fp.array_size == 0:\\n\"\n"
  66. ".ascii \" print('Error: Filter is null')\\n\"\n"
  67. ".ascii \" return\\n\"\n"
  68. ".ascii \" elif index < 0 or index >= fp.array_size:\\n\"\n"
  69. ".ascii \" print('Error: Out of bounds')\\n\"\n"
  70. ".ascii \" return\\n\"\n"
  71. ".ascii \" else:\\n\"\n"
  72. ".ascii \" data = fp.data\\n\"\n"
  73. ".ascii \" return (data + index).dereference()\\n\"\n"
  74. ".ascii \"class BoostBloomFilterMatcher(gdb.xmethod.XMethodMatcher):\\n\"\n"
  75. ".ascii \" def __init__(self):\\n\"\n"
  76. ".ascii \" gdb.xmethod.XMethodMatcher.__init__(self, 'BoostBloomFilterMatcher')\\n\"\n"
  77. ".ascii \" self.methods = [BoostBloomFilterSubscriptMethod()]\\n\"\n"
  78. ".ascii \" def match(self, class_type, method_name):\\n\"\n"
  79. ".ascii \" if not class_type.tag.startswith('boost::bloom::filter<'):\\n\"\n"
  80. ".ascii \" return None\\n\"\n"
  81. ".ascii \" workers = []\\n\"\n"
  82. ".ascii \" for method in self.methods:\\n\"\n"
  83. ".ascii \" if method.enabled:\\n\"\n"
  84. ".ascii \" worker = method.get_worker(method_name)\\n\"\n"
  85. ".ascii \" if worker:\\n\"\n"
  86. ".ascii \" workers.append(worker)\\n\"\n"
  87. ".ascii \" return workers\\n\"\n"
  88. ".ascii \"gdb.xmethod.register_xmethod_matcher(None, BoostBloomFilterMatcher())\\n\"\n"
  89. ".byte 0\n"
  90. ".popsection\n");
  91. #ifdef __clang__
  92. #pragma clang diagnostic pop
  93. #endif
  94. #endif // defined(__ELF__)
  95. #endif // !defined(BOOST_ALL_NO_EMBEDDED_GDB_SCRIPTS)
  96. #endif // !defined(BOOST_BLOOM_DETAIL_BLOOM_PRINTERS_HPP)