static void real_init(void) { #ifdef VS_TARGET_OS_WINDOWS // portable const std::wstring pythonDllName = L"python37.dll"; HMODULE module; GetModuleHandleExW(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, (LPCWSTR)&real_init, &module); std::vector<wchar_t> pathBuf(65536); GetModuleFileNameW(module, pathBuf.data(), (DWORD)pathBuf.size()); std::wstring dllPath = pathBuf.data(); dllPath.resize(dllPath.find_last_of('\\') + 1); std::wstring portableFilePath = dllPath + L"portable.vs"; FILE *portableFile = _wfopen(portableFilePath.c_str(), L"rb"); bool isPortable = !!portableFile; if (portableFile) fclose(portableFile); HMODULE pythonDll = nullptr; if (isPortable) { std::wstring pyPath = dllPath + L"\\" + pythonDllName; pythonDll = LoadLibraryExW(pyPath.c_str(), nullptr, LOAD_LIBRARY_SEARCH_DEFAULT_DIRS | LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR); } else { DWORD dwType = REG_SZ; HKEY hKey = 0; wchar_t value[1024]; DWORD valueLength = 1000; if (RegOpenKeyW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\VapourSynth", &hKey) != ERROR_SUCCESS) return; LSTATUS status = RegQueryValueExW(hKey, L"PythonPath", nullptr, &dwType, (LPBYTE)&value, &valueLength); RegCloseKey(hKey); if (status != ERROR_SUCCESS) return; std::wstring pyPath = value; pyPath += L"\\" + pythonDllName; pythonDll = LoadLibraryExW(pyPath.c_str(), nullptr, LOAD_LIBRARY_SEARCH_DEFAULT_DIRS | LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR); } if (!pythonDll) return; #endif int preInitialized = Py_IsInitialized(); if (!preInitialized) Py_InitializeEx(0); s = PyGILState_Ensure(); if (import_vapoursynth()) return; if (vpy_initVSScript()) return; ts = PyEval_SaveThread(); initialized = true; }
void hkvExternalToolWiiUTexConv2::determineExecutablePath() { wchar_t envBuf[MAX_PATH + 1]; DWORD numChars = GetEnvironmentVariableW(L"CAFE_ROOT", envBuf, MAX_PATH + 1); if ((numChars == 0) || (numChars > MAX_PATH + 1)) { return; } hkStringBuf pathBuf(hkUtf8::Utf8FromWide(envBuf).cString()); pathBuf.replace('\\', '/'); pathBuf.pathAppend("system/bin/win32/TexConv2.exe"); m_executable = pathBuf; }
vector<unsigned> Hypergraph::computeGraphDistMat() { int nTotal = _nVertices+_edges.size(); vector<unsigned> pathBuf (nTotal*(nTotal-1)/2); pathBuf.assign(nTotal*(nTotal-1)/2, 100); /*initialization*/ for (int i=0; i<_edges.size(); ++i) { int edgeIdx = _nVertices+i; for (int j=0; j<_edges[i].size(); ++j) { for (int k=0; k<j; ++k) { int idx = _edges[i][j]*(_edges[i][j]-1)/2+_edges[i][k]; pathBuf[idx] = 2; } pathBuf[edgeIdx*(edgeIdx-1)/2+_edges[i][j]] = 1; } } for (int k=0; k<nTotal; ++k) { for (int i=0; i<nTotal; ++i) { if (i==k) { continue; } for (int j=0; j<i; ++j) { if (j==k) { continue; } int idxIJ = i*(i-1)/2+j; int idxIK = i>k?i*(i-1)/2+k:k*(k-1)/2+i; int idxJK = j>k?j*(j-1)/2+k:k*(k-1)/2+j; pathBuf[idxIJ] = min(pathBuf[idxIJ], pathBuf[idxIK]+pathBuf[idxJK]); } } } return pathBuf; }
vector<unsigned> Hypergraph::computeEdgeDistMat() { int nEdges = _edges.size(); vector<unsigned> pathBuf (nEdges*(nEdges-1)/2); pathBuf.assign(nEdges*(nEdges-1)/2, UINT_MAX); /*initialization*/ for (int i=0; i<nEdges; ++i) { for (int j=0; j<i; ++j) { HyperEdge v(_edges[i].size()+_edges[j].size()); HyperEdge::iterator vIt = set_intersection(_edges[i].begin(), _edges[i].begin(), _edges[j].begin(), _edges[j].end(), v.begin()); if (vIt!=v.begin()) { pathBuf[i*(i-1)/2+j] = 2; } } } for (int k=0; k<nEdges; ++k) { for (int i=0; i<nEdges; ++i) { if (i==k) { continue; } for (int j=0; j<i; ++j) { if (j==k) { continue; } int idxIJ = i*(i-1)/2+j; int idxIK = i>k?i*(i-1)/2+k:k*(k-1)/2+i; int idxJK = j>k?j*(j-1)/2+k:k*(k-1)/2+j; pathBuf[idxIJ] = min(pathBuf[idxIJ], pathBuf[idxIK]+pathBuf[idxJK]); } } } return pathBuf; }
vector<unsigned> Hypergraph::getDistToModification(const vector<int> &modifySet) { int nTotal = _nVertices+_edges.size(); vector<unsigned> distVec (nTotal); distVec.assign(nTotal, 100); for (int i=0; i<modifySet.size(); ++i) { distVec[modifySet[i]] = 0; } int nEdges = _edges.size(); vector<unsigned> pathBuf (nEdges*(nEdges+1)/2); pathBuf.assign(nEdges*(nEdges+1)/2, 100); /*initialization*/ for (int i=0; i<nEdges; ++i) { for (int j=0; j<i; ++j) { HyperEdge v(_edges[i].size()+_edges[j].size()); HyperEdge::iterator vIt = set_intersection(_edges[i].begin(), _edges[i].begin(), _edges[j].begin(), _edges[j].end(), v.begin()); if (vIt!=v.begin()) { pathBuf[i*(i-1)/2+j] = 2; } } for (int j=0; j<modifySet.size(); ++j) { int modifiedIdx = modifySet[j]; HyperEdge::iterator it = find(_edges[i].begin(), _edges[i].end(), modifiedIdx); if (it!=_edges[i].end()) { pathBuf[nEdges*(nEdges-1)/2+i] = 1; break; } } } for (int k=0; k<nEdges+1; ++k) { for (int i=0; i<nEdges+1; ++i) { if (i==k) { continue; } for (int j=0; j<i; ++j) { if (j==k) { continue; } int idxIJ = i*(i-1)/2+j; int idxIK = i>k?i*(i-1)/2+k:k*(k-1)/2+i; int idxJK = j>k?j*(j-1)/2+k:k*(k-1)/2+j; pathBuf[idxIJ] = min(pathBuf[idxIJ], pathBuf[idxIK]+pathBuf[idxJK]); } } } for (int i=0; i<nEdges; ++i) { distVec[i+_nVertices] = pathBuf[nEdges*(nEdges-1)/2+i]; for (int j=0; j<_edges[i].size(); ++j) { distVec[_edges[i][j]] = min(distVec[i+_nVertices]+1, distVec[_edges[i][j]]); } } return distVec; }