Exemplo n.º 1
0
 /// <summary>
 /// ����ָ��ƫ�Ʊ�������
 /// </summary>
 /// <param name="AddressMode">ָ��Ѱַģʽ</param>
 /// <param name="OffsetPointer">ָ��ƫ�Ʊ�Ļ���ַ��������Ϊnull��
 /// 	<para>�뱣֤���ڴ�鱻�������ɲο�<seealso cref="fixed"/>��<seealso cref="stackalloc"/>��<seealso cref="System.Runtime.InteropServices.Marshal.AllocHGlobal"/>��</para>
 /// </param>
 /// <param name="OffsetSize">ָ��ƫ�Ʊ�ijߴ磨Ԫ�صĸ����������������0��</param>
 /// <param name="OffsetBase">ָ��ƫ�Ʊ��������Ļ���ƫ�ơ��������� [0,OffsetSize) ���䡣
 ///		<para>���壺f(i) = OffsetPointer[OffsetBase + i]��</para>
 /// </param>
 /// <param name="Stride">ָ��Ŀ�ࡣ������Ϊ0��������Ϊ������</param>
 /// <param name="LimitStart">�޶�������硣</param>
 /// <param name="LimitSize">�޶�����ijߴ硣���������0��
 ///		<para>ע���޶�����ķ�Χ��[LimitStart, LimitStart+LimitSize)���䣨����������ʱΪ���������㣬�Ὣ��淶��Ϊ[0.0, 1.0)���䣨ʵ������</para>
 /// </param>
 /// <returns>ָ��ƫ�Ʊ�������ʧ��ʱ����null��</returns>
 public static unsafe IPointerOffset NewPointerOffset(WrapAddressMode AddressMode,
     long* OffsetPointer, int OffsetSize, int OffsetBase, long Stride,
     long LimitStart, long LimitSize)
 {
     return NewPointerOffset(AddressMode, OffsetPointer, OffsetSize, OffsetBase, Stride, LimitStart, LimitSize, DefaultPointer);
 }
Exemplo n.º 2
0
 /// <summary>
 /// ����ָ��ƫ�Ʊ�������
 /// </summary>
 /// <param name="AddressMode">ָ��Ѱַģʽ</param>
 /// <param name="OffsetPointer">ָ��ƫ�Ʊ�Ļ���ַ��������Ϊnull��
 /// 	<para>�뱣֤���ڴ�鱻�������ɲο�<seealso cref="fixed"/>��<seealso cref="stackalloc"/>��<seealso cref="System.Runtime.InteropServices.Marshal.AllocHGlobal"/>��</para>
 /// </param>
 /// <param name="OffsetSize">ָ��ƫ�Ʊ�ijߴ磨Ԫ�صĸ����������������0��</param>
 /// <param name="OffsetBase">ָ��ƫ�Ʊ��������Ļ���ƫ�ơ��������� [0,OffsetSize) ���䡣
 ///		<para>���壺f(i) = OffsetPointer[OffsetBase + i]��</para>
 /// </param>
 /// <param name="Stride">ָ��Ŀ�ࡣ������Ϊ0��������Ϊ������</param>
 /// <param name="LimitStart">�޶�������硣</param>
 /// <param name="LimitSize">�޶�����ijߴ硣���������0��
 ///		<para>ע���޶�����ķ�Χ��[LimitStart, LimitStart+LimitSize)���䣨����������ʱΪ���������㣬�Ὣ��淶��Ϊ[0.0, 1.0)���䣨ʵ������</para>
 /// </param>
 /// <param name="DefaultPointer">Ĭ��ָ�룬������<seealso cref="WrapAddressMode.Border"/>ģʽ��Ĭ��Ϊnull��</param>
 /// <returns>ָ��ƫ�Ʊ�������ʧ��ʱ����null��</returns>
 public static unsafe IPointerOffset NewPointerOffset(WrapAddressMode AddressMode,
     long* OffsetPointer, int OffsetSize, int OffsetBase, long Stride,
     long LimitStart, long LimitSize, byte* DefaultPointer)
 {
     switch (AddressMode)
     {
         case WrapAddressMode.Clamp:
             return new PointerOffsetClamp(OffsetPointer, OffsetSize, OffsetBase, Stride, LimitStart, LimitSize);
         case WrapAddressMode.Border:
             return new PointerOffsetBorder(OffsetPointer, OffsetSize, OffsetBase, Stride, LimitStart, LimitSize, DefaultPointer);
     }
     return null;
 }
Exemplo n.º 3
0
 /// <summary>
 /// ����ָ��ƫ�Ʊ�������
 /// </summary>
 /// <param name="AddressMode">ָ��Ѱַģʽ</param>
 /// <param name="DefaultPointer">Ĭ��ָ�룬������<seealso cref="WrapAddressMode.Border"/>ģʽ��Ĭ��Ϊnull��</param>
 /// <returns>ָ��ƫ�Ʊ�������ʧ��ʱ����null��</returns>
 public static IPointerOffset NewPointerOffset(WrapAddressMode AddressMode, byte* DefaultPointer)
 {
     switch (AddressMode)
     {
         case WrapAddressMode.Clamp:
             return new PointerOffsetClamp();
         case WrapAddressMode.Border:
             return new PointerOffsetBorder(DefaultPointer);
     }
     return null;
 }