Пример #1
0
// 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;
}
Пример #2
0
// 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;
}
Пример #3
0
            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);