void CUITalkWnd::SayPhrase(const shared_str& phrase_id) { AddAnswer(m_pCurrentDialog->GetPhraseText(phrase_id), m_pOurInvOwner->Name()); m_pOurDialogManager->SayPhrase(m_pCurrentDialog, phrase_id); //если диалог завершился, перейти в режим выбора темы if(m_pCurrentDialog->IsFinished()) ToTopicMode(); }
void CUITalkWnd::SayPhrase(const shared_str& phrase_id) { AddAnswer(m_pCurrentDialog->GetPhraseText(phrase_id), m_pOurInvOwner->Name()); m_pOurDialogManager->SayPhrase(m_pCurrentDialog, phrase_id); /* //добавить ответ собеседника в список, если он что-то сказал if(m_pCurrentDialog->GetLastPhraseID() != phrase_id) AddAnswer(m_pCurrentDialog->GetLastPhraseText(), m_pOthersInvOwner->Name()); */ //если диалог завершился, перейти в режим выбора темы if(m_pCurrentDialog->IsFinished()) ToTopicMode(); }
void CUITalkWnd::InitOthersStartDialog() { m_pOthersDialogManager->UpdateAvailableDialogs(m_pOurDialogManager); if(!m_pOthersDialogManager->AvailableDialogs().empty()) { m_pCurrentDialog = m_pOthersDialogManager->AvailableDialogs().front(); m_pOthersDialogManager->InitDialog(m_pOurDialogManager, m_pCurrentDialog); //сказать фразу CStringTable stbl; AddAnswer(m_pCurrentDialog->GetPhraseText("0"), m_pOthersInvOwner->Name()); m_pOthersDialogManager->SayPhrase(m_pCurrentDialog, "0"); //если диалог завершился, перейти в режим выбора темы if(!m_pCurrentDialog || m_pCurrentDialog->IsFinished()) ToTopicMode(); } }
static uint Factorial(Hash const H, const uint n) { int ans; if (n==0) return 1; else { ans = LookupAnswer(H, n); if (!ans) { ans = n * Factorial(H, n-1); AddAnswer(H, n, ans); } //else printf("found %d in the hashtable!\n", ans); return ans; } return 0; }
void OrthancFindRequestHandler::Handle(DicomFindAnswers& answers, const DicomMap& input, const std::list<DicomTag>& sequencesToReturn, const std::string& remoteIp, const std::string& remoteAet, const std::string& calledAet) { /** * Ensure that the remote modality is known to Orthanc. **/ RemoteModalityParameters modality; if (!Configuration::LookupDicomModalityUsingAETitle(modality, remoteAet)) { throw OrthancException(ErrorCode_UnknownModality); } bool caseSensitivePN = Configuration::GetGlobalBoolParameter("CaseSensitivePN", false); /** * Possibly apply the user-supplied Lua filter. **/ DicomMap lua; const DicomMap* filteredInput = &input; if (ApplyLuaFilter(lua, input, remoteIp, remoteAet, calledAet)) { filteredInput = &lua; } /** * Retrieve the query level. **/ assert(filteredInput != NULL); const DicomValue* levelTmp = filteredInput->TestAndGetValue(DICOM_TAG_QUERY_RETRIEVE_LEVEL); if (levelTmp == NULL || levelTmp->IsNull() || levelTmp->IsBinary()) { LOG(ERROR) << "C-FIND request without the tag 0008,0052 (QueryRetrieveLevel)"; throw OrthancException(ErrorCode_BadRequest); } ResourceType level = StringToResourceType(levelTmp->GetContent().c_str()); if (level != ResourceType_Patient && level != ResourceType_Study && level != ResourceType_Series && level != ResourceType_Instance) { throw OrthancException(ErrorCode_NotImplemented); } DicomArray query(*filteredInput); LOG(INFO) << "DICOM C-Find request at level: " << EnumerationToString(level); for (size_t i = 0; i < query.GetSize(); i++) { if (!query.GetElement(i).GetValue().IsNull()) { LOG(INFO) << " " << query.GetElement(i).GetTag() << " " << FromDcmtkBridge::GetName(query.GetElement(i).GetTag()) << " = " << query.GetElement(i).GetValue().GetContent(); } } for (std::list<DicomTag>::const_iterator it = sequencesToReturn.begin(); it != sequencesToReturn.end(); ++it) { LOG(INFO) << " (" << it->Format() << ") " << FromDcmtkBridge::GetName(*it) << " : sequence tag whose content will be copied"; } /** * Build up the query object. **/ LookupResource finder(level); for (size_t i = 0; i < query.GetSize(); i++) { const DicomTag tag = query.GetElement(i).GetTag(); if (query.GetElement(i).GetValue().IsNull() || tag == DICOM_TAG_QUERY_RETRIEVE_LEVEL || tag == DICOM_TAG_SPECIFIC_CHARACTER_SET) { continue; } std::string value = query.GetElement(i).GetValue().GetContent(); if (value.size() == 0) { // An empty string corresponds to a "*" wildcard constraint, so we ignore it continue; } if (FilterQueryTag(value, level, tag, modality.GetManufacturer())) { ValueRepresentation vr = FromDcmtkBridge::LookupValueRepresentation(tag); // DICOM specifies that searches must be case sensitive, except // for tags with a PN value representation bool sensitive = true; if (vr == ValueRepresentation_PersonName) { sensitive = caseSensitivePN; } finder.AddDicomConstraint(tag, value, sensitive); } else { LOG(INFO) << "Because of a patch for the manufacturer of the remote modality, " << "ignoring constraint on tag (" << tag.Format() << ") " << FromDcmtkBridge::GetName(tag); } } /** * Run the query. **/ size_t maxResults = (level == ResourceType_Instance) ? maxInstances_ : maxResults_; std::vector<std::string> resources, instances; context_.GetIndex().FindCandidates(resources, instances, finder); assert(resources.size() == instances.size()); bool complete = true; for (size_t i = 0; i < instances.size(); i++) { Json::Value dicom; context_.ReadJson(dicom, instances[i]); if (finder.IsMatch(dicom)) { if (maxResults != 0 && answers.GetSize() >= maxResults) { complete = false; break; } else { std::auto_ptr<DicomMap> counters(ComputeCounters(context_, instances[i], level, input)); AddAnswer(answers, dicom, query, sequencesToReturn, counters.get()); } } } LOG(INFO) << "Number of matching resources: " << answers.GetSize(); answers.SetComplete(complete); }