// Convert an absolute path to a path that's relative to "&relativeTo". PathString PathString::AbsolutePathToRelative(const PathString &relativeTo) const //------------------------------------------------------------------------------- { mpt::PathString result = path; if(path.empty()) { return result; } if(!_wcsnicmp(relativeTo.AsNative().c_str(), AsNative().c_str(), relativeTo.AsNative().length())) { // Path is OpenMPT's directory or a sub directory ("C:\OpenMPT\Somepath" => ".\Somepath") result = MPT_PATHSTRING(".\\"); // ".\" result += mpt::PathString::FromNative(AsNative().substr(relativeTo.AsNative().length())); } else if(!_wcsnicmp(relativeTo.AsNative().c_str(), AsNative().c_str(), 2)) { // Path is on the same drive as OpenMPT ("C:\Somepath" => "\Somepath") result = mpt::PathString::FromNative(AsNative().substr(2)); } return result; }
// Convert a path that is relative to "&relativeTo" to an absolute path. PathString PathString::RelativePathToAbsolute(const PathString &relativeTo) const //------------------------------------------------------------------------------- { mpt::PathString result = path; if(path.empty()) { return result; } if(AsNative().length() >= 2 && AsNative().substr(0, 1) == L"\\" && AsNative().substr(0, 2) != L"\\\\") { // Path is on the same drive as OpenMPT ("\Somepath\" => "C:\Somepath\"), but ignore network paths starting with "\\" result = mpt::PathString::FromNative(relativeTo.AsNative().substr(0, 2)); result += path; } else if(AsNative().length() >= 2 && AsNative().substr(0, 2) == L".\\") { // Path is OpenMPT's directory or a sub directory (".\Somepath\" => "C:\OpenMPT\Somepath\") result = relativeTo; // "C:\OpenMPT\" result += mpt::PathString::FromNative(AsNative().substr(2)); } return result; }
for each(auto i in initializers) { PropertyInitializer n; n._prop = i._prop; n._src = i._src; n._elementType = i._elementType; n._arrayCount = i._arrayCount; n._isString = i._isString; native.push_back(n); } } return std::move(native); } bool EntityLayer::CreateObject(DocumentId doc, ObjectId obj, ObjectTypeId objType, IEnumerable<PropertyInitializer>^ initializers) { auto native = AsNative(initializers); Identifier indentifier; auto intrf = _switch->GetInterface( indentifier, Identifier(doc, obj, objType)); if (intrf) return intrf->CreateObject(indentifier, AsPointer(native.cbegin()), native.size()); return false; } bool EntityLayer::DeleteObject(DocumentId doc, ObjectId obj, ObjectTypeId objType) { Identifier indentifier; auto intrf = _switch->GetInterface( indentifier, Identifier(doc, obj, objType)); if (intrf) return intrf->DeleteObject(indentifier);