mirror of
https://github.com/opensim/opensim.git
synced 2026-08-05 08:55:56 +08:00
add old llList2ListStrided renamed osOldList2ListStrided to easy any possible script fixes
This commit is contained in:
@@ -5753,100 +5753,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||
return result;
|
||||
}
|
||||
|
||||
/* old incompatible code
|
||||
/// <summary>
|
||||
/// Elements in the source list starting with 0 and then
|
||||
/// every i+stride. If the stride is negative then the scan
|
||||
/// is backwards producing an inverted result.
|
||||
/// Only those elements that are also in the specified
|
||||
/// range are included in the result.
|
||||
/// </summary>
|
||||
|
||||
public LSL_List llList2ListStrided(LSL_List src, int start, int end, int stride)
|
||||
{
|
||||
LSL_List result = new();
|
||||
int[] si = new int[2];
|
||||
int[] ei = new int[2];
|
||||
bool twopass = false;
|
||||
|
||||
|
||||
// First step is always to deal with negative indices
|
||||
|
||||
if (start < 0)
|
||||
start = src.Length+start;
|
||||
if (end < 0)
|
||||
end = src.Length+end;
|
||||
|
||||
// Out of bounds indices are OK, just trim them
|
||||
// accordingly
|
||||
|
||||
if (start > src.Length)
|
||||
start = src.Length;
|
||||
|
||||
if (end > src.Length)
|
||||
end = src.Length;
|
||||
|
||||
if (stride == 0)
|
||||
stride = 1;
|
||||
|
||||
// There may be one or two ranges to be considered
|
||||
|
||||
if (start != end)
|
||||
{
|
||||
|
||||
if (start <= end)
|
||||
{
|
||||
si[0] = start;
|
||||
ei[0] = end;
|
||||
}
|
||||
else
|
||||
{
|
||||
si[1] = start;
|
||||
ei[1] = src.Length;
|
||||
si[0] = 0;
|
||||
ei[0] = end;
|
||||
twopass = true;
|
||||
}
|
||||
|
||||
// The scan always starts from the beginning of the
|
||||
// source list, but members are only selected if they
|
||||
// fall within the specified sub-range. The specified
|
||||
// range values are inclusive.
|
||||
// A negative stride reverses the direction of the
|
||||
// scan producing an inverted list as a result.
|
||||
|
||||
if (stride > 0)
|
||||
{
|
||||
for (int i = 0; i < src.Length; i += stride)
|
||||
{
|
||||
if (i<=ei[0] && i>=si[0])
|
||||
result.Add(src.Data[i]);
|
||||
if (twopass && i>=si[1] && i<=ei[1])
|
||||
result.Add(src.Data[i]);
|
||||
}
|
||||
}
|
||||
else if (stride < 0)
|
||||
{
|
||||
for (int i = src.Length - 1; i >= 0; i += stride)
|
||||
{
|
||||
if (i <= ei[0] && i >= si[0])
|
||||
result.Add(src.Data[i]);
|
||||
if (twopass && i >= si[1] && i <= ei[1])
|
||||
result.Add(src.Data[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (start%stride == 0)
|
||||
{
|
||||
result.Add(src.Data[start]);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
*/
|
||||
|
||||
public LSL_List llList2ListStrided(LSL_List src, int start, int end, int stride)
|
||||
{
|
||||
|
||||
@@ -6043,5 +6043,96 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||
ILandObject parcel = World.LandChannel.GetLandObject(m_host.AbsolutePosition);
|
||||
return parcel is null ? ScriptBaseClass.NULL_KEY : new LSL_Key(parcel.GlobalID.ToString());
|
||||
}
|
||||
|
||||
// old List2ListStrided for compatibility
|
||||
/// <summary>
|
||||
/// Elements in the source list starting with 0 and then
|
||||
/// every i+stride. If the stride is negative then the scan
|
||||
/// Only those elements that are also in the specified
|
||||
/// range are included in the result.
|
||||
/// </summary>
|
||||
|
||||
public LSL_List osOldList2ListStrided(LSL_List src, int start, int end, int stride)
|
||||
{
|
||||
LSL_List result = new();
|
||||
int[] si = new int[2];
|
||||
int[] ei = new int[2];
|
||||
bool twopass = false;
|
||||
|
||||
// First step is always to deal with negative indices
|
||||
|
||||
if (start < 0)
|
||||
start += src.Length;
|
||||
if (end < 0)
|
||||
end += src.Length;
|
||||
|
||||
// Out of bounds indices are OK, just trim them
|
||||
// accordingly
|
||||
|
||||
if (start > src.Length)
|
||||
start = src.Length;
|
||||
|
||||
if (end > src.Length)
|
||||
end = src.Length;
|
||||
|
||||
if (stride == 0)
|
||||
stride = 1;
|
||||
|
||||
// There may be one or two ranges to be considered
|
||||
|
||||
if (start != end)
|
||||
{
|
||||
if (start <= end)
|
||||
{
|
||||
si[0] = start;
|
||||
ei[0] = end;
|
||||
}
|
||||
else
|
||||
{
|
||||
si[1] = start;
|
||||
ei[1] = src.Length;
|
||||
si[0] = 0;
|
||||
ei[0] = end;
|
||||
twopass = true;
|
||||
}
|
||||
|
||||
// The scan always starts from the beginning of the
|
||||
// source list, but members are only selected if they
|
||||
// fall within the specified sub-range. The specified
|
||||
// range values are inclusive.
|
||||
// A negative stride reverses the direction of the
|
||||
// scan producing an inverted list as a result.
|
||||
|
||||
if (stride > 0)
|
||||
{
|
||||
for (int i = 0; i < src.Length; i += stride)
|
||||
{
|
||||
if (i<=ei[0] && i>=si[0])
|
||||
result.Add(src.Data[i]);
|
||||
if (twopass && i>=si[1] && i<=ei[1])
|
||||
result.Add(src.Data[i]);
|
||||
}
|
||||
}
|
||||
else if (stride < 0)
|
||||
{
|
||||
for (int i = src.Length - 1; i >= 0; i += stride)
|
||||
{
|
||||
if (i <= ei[0] && i >= si[0])
|
||||
result.Add(src.Data[i]);
|
||||
if (twopass && i >= si[1] && i <= ei[1])
|
||||
result.Add(src.Data[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (start%stride == 0)
|
||||
{
|
||||
result.Add(src.Data[start]);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -602,5 +602,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
|
||||
LSL_List osGetParcelDetails(LSL_Key id, LSL_List param);
|
||||
LSL_List osGetParcelIDs();
|
||||
LSL_Key osGetParcelID();
|
||||
LSL_List osOldList2ListStrided(LSL_List src, int start, int end, int stride);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1658,5 +1658,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
|
||||
{
|
||||
return m_OSSL_Functions.osGetParcelID();
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public LSL_List osOldList2ListStrided(LSL_List src, int start, int end, int stride)
|
||||
{
|
||||
return m_OSSL_Functions.osOldList2ListStrided(src, start, end, stride);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user