public override void VecProp(int hvo, int tag, int chvoMax, out int chvo, ArrayPtr rghvo)
{
ITestItem tester;
if (!m_filterFlids.TryGetValue(tag, out tester))
{
base.VecProp(hvo, tag, chvoMax, out chvo, rghvo);
return;
}
int chvoReal = BaseSda.get_VecSize(hvo, tag);
using (ArrayPtr arrayPtr = MarshalEx.ArrayToNative<int>(chvoReal))
{
BaseSda.VecProp(hvo, tag, chvoReal, out chvoReal, arrayPtr);
int[] candidates = MarshalEx.NativeToArray<int>(arrayPtr, chvoReal);
int[] results = new int[chvoMax];
int iresult = 0;
for (int icandidate = 0; icandidate < candidates.Length; icandidate++)
{
if (tester.Test(candidates[icandidate], BaseSda, m_validHvos))
results[iresult++] = candidates[icandidate];
}
chvo = iresult;
MarshalEx.ArrayToNative(rghvo, chvoMax, results);
}
}
}