[caching/mapping_array] add damage visitor
This commit is contained in:
		| @@ -26,3 +26,49 @@ mapping_traits::pack(value_type const &value, disk_type &disk) | ||||
| } | ||||
|  | ||||
| //---------------------------------------------------------------- | ||||
|  | ||||
| missing_mappings::missing_mappings(run<uint32_t> const &keys, | ||||
| 				   std::string const &desc) | ||||
| 	: keys_(keys), | ||||
| 	  desc_(desc) | ||||
| { | ||||
|  | ||||
| } | ||||
|  | ||||
| void | ||||
| missing_mappings::visit(damage_visitor &v) const | ||||
| { | ||||
| 	v.visit(*this); | ||||
| } | ||||
|  | ||||
| namespace { | ||||
| 	struct no_op_visitor { | ||||
| 		virtual void visit(uint32_t index, | ||||
| 				   mapping_traits::value_type const &v) { | ||||
| 		} | ||||
| 	}; | ||||
|  | ||||
| 	class ll_damage_visitor { | ||||
| 	public: | ||||
| 		ll_damage_visitor(damage_visitor &v) | ||||
| 		: v_(v) { | ||||
| 		} | ||||
|  | ||||
| 		virtual void visit(array_detail::damage const &d) { | ||||
| 			v_.visit(missing_mappings(d.lost_keys_, d.desc_)); | ||||
| 		} | ||||
|  | ||||
| 	private: | ||||
| 		damage_visitor &v_; | ||||
| 	}; | ||||
| } | ||||
|  | ||||
| void | ||||
| caching::check_mapping_array(mapping_array const &array, damage_visitor &visitor) | ||||
| { | ||||
| 	no_op_visitor vv; | ||||
| 	ll_damage_visitor ll(visitor); | ||||
| 	array.visit_values(vv, ll); | ||||
| } | ||||
|  | ||||
| //---------------------------------------------------------------- | ||||
|   | ||||
		Reference in New Issue
	
	Block a user