| 269 | |
| 270 | template <typename T> |
| 271 | T GetEventString(EventDataDesc const& desc) |
| 272 | { |
| 273 | assert(desc.status_ & PROP_STATUS_FOUND); |
| 274 | assert(desc.status_ & (std::is_same<char, typename T::value_type>::value ? PROP_STATUS_CHAR_STRING : PROP_STATUS_WCHAR_STRING)); |
| 275 | assert(desc.status_ & PROP_STATUS_NULL_TERMINATED); |
| 276 | assert((desc.size_ % sizeof(typename T::value_type)) == 0); |
| 277 | |
| 278 | auto start = (typename T::value_type*) desc.data_; |
| 279 | auto end = (typename T::value_type*) ((uintptr_t) desc.data_ + desc.size_); |
| 280 | |
| 281 | // Don't include null termination character |
| 282 | if (desc.status_ & PROP_STATUS_NULL_TERMINATED) { |
| 283 | assert(end > start); |
| 284 | end -= 1; |
| 285 | } |
| 286 | |
| 287 | return T(start, end); |
| 288 | } |
| 289 | |
| 290 | } |
| 291 | |