| 114 | } |
| 115 | |
| 116 | bool DispatchSentenceToExtensions(std::wstring& sentence, const InfoForExtension* sentenceInfo) |
| 117 | { |
| 118 | wchar_t* sentenceBuffer = (wchar_t*)HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS, (sentence.size() + 1) * sizeof(wchar_t)); |
| 119 | wcscpy_s(sentenceBuffer, sentence.size() + 1, sentence.c_str()); |
| 120 | concurrency::reader_writer_lock::scoped_lock_read readLock(extenMutex); |
| 121 | for (const auto& extension : extensions) |
| 122 | if (!*(sentenceBuffer = extension.callback(sentenceBuffer, sentenceInfo))) break; |
| 123 | sentence = sentenceBuffer; |
| 124 | HeapFree(GetProcessHeap(), 0, sentenceBuffer); |
| 125 | return !sentence.empty(); |
| 126 | } |
| 127 | |
| 128 | void CleanupExtensions() |
| 129 | { |