| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 // patch classes for Int8List ..... Float64List and ByteData implementations. | 5 // patch classes for Int8List ..... Float64List and ByteData implementations. |
| 6 | 6 |
| 7 patch class Int8List { | 7 patch class Int8List { |
| 8 /* patch */ factory Int8List(int length) { | 8 /* patch */ factory Int8List(int length) { |
| 9 return new _Int8Array(length); | 9 return new _Int8Array(length); |
| 10 } | 10 } |
| (...skipping 2808 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2819 return _typedData._getUint8(_offset + byteOffset); | 2819 return _typedData._getUint8(_offset + byteOffset); |
| 2820 } | 2820 } |
| 2821 void setUint8(int byteOffset, int value) { | 2821 void setUint8(int byteOffset, int value) { |
| 2822 if (byteOffset < 0 || byteOffset >= length) { | 2822 if (byteOffset < 0 || byteOffset >= length) { |
| 2823 _throwRangeError(byteOffset, length); | 2823 _throwRangeError(byteOffset, length); |
| 2824 } | 2824 } |
| 2825 _typedData._setUint8(_offset + byteOffset, _toUint8(value)); | 2825 _typedData._setUint8(_offset + byteOffset, _toUint8(value)); |
| 2826 } | 2826 } |
| 2827 | 2827 |
| 2828 int getInt16(int byteOffset, [Endianness endian = Endianness.BIG_ENDIAN]) { | 2828 int getInt16(int byteOffset, [Endianness endian = Endianness.BIG_ENDIAN]) { |
| 2829 if (byteOffset < 0 || byteOffset >= length) { | 2829 if (byteOffset < 0 || byteOffset + 1 >= length) { |
| 2830 _throwRangeError(byteOffset, length); | 2830 _throwRangeError(byteOffset + 1, length); |
| 2831 } | 2831 } |
| 2832 var result = _typedData._getInt16(_offset + byteOffset); | 2832 var result = _typedData._getInt16(_offset + byteOffset); |
| 2833 if (identical(endian, Endianness.HOST_ENDIAN)) { | 2833 if (identical(endian, Endianness.HOST_ENDIAN)) { |
| 2834 return result; | 2834 return result; |
| 2835 } | 2835 } |
| 2836 return _toEndianInt16(result, endian._littleEndian); | 2836 return _toEndianInt16(result, endian._littleEndian); |
| 2837 } | 2837 } |
| 2838 void setInt16(int byteOffset, | 2838 void setInt16(int byteOffset, |
| 2839 int value, | 2839 int value, |
| 2840 [Endianness endian = Endianness.BIG_ENDIAN]) { | 2840 [Endianness endian = Endianness.BIG_ENDIAN]) { |
| 2841 if (byteOffset < 0 || byteOffset >= length) { | 2841 if (byteOffset < 0 || byteOffset + 1 >= length) { |
| 2842 _throwRangeError(byteOffset, length); | 2842 _throwRangeError(byteOffset + 1, length); |
| 2843 } | 2843 } |
| 2844 var set_value = _toInt16(value); | 2844 var set_value = _toInt16(value); |
| 2845 if (!identical(endian, Endianness.HOST_ENDIAN)) { | 2845 if (!identical(endian, Endianness.HOST_ENDIAN)) { |
| 2846 set_value = _toEndianInt16(set_value, endian._littleEndian); | 2846 set_value = _toEndianInt16(set_value, endian._littleEndian); |
| 2847 } | 2847 } |
| 2848 _typedData._setInt16(_offset + byteOffset, set_value); | 2848 _typedData._setInt16(_offset + byteOffset, set_value); |
| 2849 } | 2849 } |
| 2850 | 2850 |
| 2851 int getUint16(int byteOffset, [Endianness endian = Endianness.BIG_ENDIAN]) { | 2851 int getUint16(int byteOffset, [Endianness endian = Endianness.BIG_ENDIAN]) { |
| 2852 if (byteOffset < 0 || byteOffset >= length) { | 2852 if (byteOffset < 0 || byteOffset + 1 >= length) { |
| 2853 _throwRangeError(byteOffset, length); | 2853 _throwRangeError(byteOffset + 1, length); |
| 2854 } | 2854 } |
| 2855 var result = _typedData._getUint16(_offset + byteOffset); | 2855 var result = _typedData._getUint16(_offset + byteOffset); |
| 2856 if (identical(endian, Endianness.HOST_ENDIAN)) { | 2856 if (identical(endian, Endianness.HOST_ENDIAN)) { |
| 2857 return result; | 2857 return result; |
| 2858 } | 2858 } |
| 2859 return _toEndianUint16(result, endian._littleEndian); | 2859 return _toEndianUint16(result, endian._littleEndian); |
| 2860 } | 2860 } |
| 2861 void setUint16(int byteOffset, | 2861 void setUint16(int byteOffset, |
| 2862 int value, | 2862 int value, |
| 2863 [Endianness endian = Endianness.BIG_ENDIAN]) { | 2863 [Endianness endian = Endianness.BIG_ENDIAN]) { |
| 2864 if (byteOffset < 0 || byteOffset >= length) { | 2864 if (byteOffset < 0 || byteOffset + 1 >= length) { |
| 2865 _throwRangeError(byteOffset, length); | 2865 _throwRangeError(byteOffset + 1, length); |
| 2866 } | 2866 } |
| 2867 var set_value = _toUint16(value); | 2867 var set_value = _toUint16(value); |
| 2868 if (!identical(endian, Endianness.HOST_ENDIAN)) { | 2868 if (!identical(endian, Endianness.HOST_ENDIAN)) { |
| 2869 set_value = _toEndianUint16(set_value, endian._littleEndian); | 2869 set_value = _toEndianUint16(set_value, endian._littleEndian); |
| 2870 } | 2870 } |
| 2871 _typedData._setUint16(_offset + byteOffset, set_value); | 2871 _typedData._setUint16(_offset + byteOffset, set_value); |
| 2872 } | 2872 } |
| 2873 | 2873 |
| 2874 int getInt32(int byteOffset, [Endianness endian = Endianness.BIG_ENDIAN]) { | 2874 int getInt32(int byteOffset, [Endianness endian = Endianness.BIG_ENDIAN]) { |
| 2875 if (byteOffset < 0 || byteOffset >= length) { | 2875 if (byteOffset < 0 || byteOffset + 3 >= length) { |
| 2876 _throwRangeError(byteOffset, length); | 2876 _throwRangeError(byteOffset + 3, length); |
| 2877 } | 2877 } |
| 2878 var result = _typedData._getInt32(_offset + byteOffset); | 2878 var result = _typedData._getInt32(_offset + byteOffset); |
| 2879 if (identical(endian, Endianness.HOST_ENDIAN)) { | 2879 if (identical(endian, Endianness.HOST_ENDIAN)) { |
| 2880 return result; | 2880 return result; |
| 2881 } | 2881 } |
| 2882 return _toEndianInt32(result, endian._littleEndian); | 2882 return _toEndianInt32(result, endian._littleEndian); |
| 2883 } | 2883 } |
| 2884 void setInt32(int byteOffset, | 2884 void setInt32(int byteOffset, |
| 2885 int value, | 2885 int value, |
| 2886 [Endianness endian = Endianness.BIG_ENDIAN]) { | 2886 [Endianness endian = Endianness.BIG_ENDIAN]) { |
| 2887 if (byteOffset < 0 || byteOffset >= length) { | 2887 if (byteOffset < 0 || byteOffset + 3 >= length) { |
| 2888 _throwRangeError(byteOffset, length); | 2888 _throwRangeError(byteOffset + 3, length); |
| 2889 } | 2889 } |
| 2890 var set_value = _toInt32(value); | 2890 var set_value = _toInt32(value); |
| 2891 if (!identical(endian, Endianness.HOST_ENDIAN)) { | 2891 if (!identical(endian, Endianness.HOST_ENDIAN)) { |
| 2892 set_value = _toEndianInt32(set_value, endian._littleEndian); | 2892 set_value = _toEndianInt32(set_value, endian._littleEndian); |
| 2893 } | 2893 } |
| 2894 _typedData._setInt32(_offset + byteOffset, set_value); | 2894 _typedData._setInt32(_offset + byteOffset, set_value); |
| 2895 } | 2895 } |
| 2896 | 2896 |
| 2897 int getUint32(int byteOffset, [Endianness endian = Endianness.BIG_ENDIAN]) { | 2897 int getUint32(int byteOffset, [Endianness endian = Endianness.BIG_ENDIAN]) { |
| 2898 if (byteOffset < 0 || byteOffset >= length) { | 2898 if (byteOffset < 0 || byteOffset + 3 >= length) { |
| 2899 _throwRangeError(byteOffset, length); | 2899 _throwRangeError(byteOffset + 3, length); |
| 2900 } | 2900 } |
| 2901 var result = _typedData._getUint32(_offset + byteOffset); | 2901 var result = _typedData._getUint32(_offset + byteOffset); |
| 2902 if (identical(endian, Endianness.HOST_ENDIAN)) { | 2902 if (identical(endian, Endianness.HOST_ENDIAN)) { |
| 2903 return result; | 2903 return result; |
| 2904 } | 2904 } |
| 2905 return _toEndianUint32(result, endian._littleEndian); | 2905 return _toEndianUint32(result, endian._littleEndian); |
| 2906 } | 2906 } |
| 2907 void setUint32(int byteOffset, | 2907 void setUint32(int byteOffset, |
| 2908 int value, | 2908 int value, |
| 2909 [Endianness endian = Endianness.BIG_ENDIAN]) { | 2909 [Endianness endian = Endianness.BIG_ENDIAN]) { |
| 2910 if (byteOffset < 0 || byteOffset >= length) { | 2910 if (byteOffset < 0 || byteOffset + 3 >= length) { |
| 2911 _throwRangeError(byteOffset, length); | 2911 _throwRangeError(byteOffset + 3, length); |
| 2912 } | 2912 } |
| 2913 var set_value = _toUint32(value); | 2913 var set_value = _toUint32(value); |
| 2914 if (!identical(endian, Endianness.HOST_ENDIAN)) { | 2914 if (!identical(endian, Endianness.HOST_ENDIAN)) { |
| 2915 set_value = _toEndianUint32(set_value, endian._littleEndian); | 2915 set_value = _toEndianUint32(set_value, endian._littleEndian); |
| 2916 } | 2916 } |
| 2917 _typedData._setUint32(_offset + byteOffset, set_value); | 2917 _typedData._setUint32(_offset + byteOffset, set_value); |
| 2918 } | 2918 } |
| 2919 | 2919 |
| 2920 int getInt64(int byteOffset, [Endianness endian = Endianness.BIG_ENDIAN]) { | 2920 int getInt64(int byteOffset, [Endianness endian = Endianness.BIG_ENDIAN]) { |
| 2921 if (byteOffset < 0 || byteOffset >= length) { | 2921 if (byteOffset < 0 || byteOffset + 7 >= length) { |
| 2922 _throwRangeError(byteOffset, length); | 2922 _throwRangeError(byteOffset + 7, length); |
| 2923 } | 2923 } |
| 2924 var result = _typedData._getInt64(_offset + byteOffset); | 2924 var result = _typedData._getInt64(_offset + byteOffset); |
| 2925 if (identical(endian, Endianness.HOST_ENDIAN)) { | 2925 if (identical(endian, Endianness.HOST_ENDIAN)) { |
| 2926 return result; | 2926 return result; |
| 2927 } | 2927 } |
| 2928 return _toEndianInt64(result, endian._littleEndian); | 2928 return _toEndianInt64(result, endian._littleEndian); |
| 2929 } | 2929 } |
| 2930 void setInt64(int byteOffset, | 2930 void setInt64(int byteOffset, |
| 2931 int value, | 2931 int value, |
| 2932 [Endianness endian = Endianness.BIG_ENDIAN]) { | 2932 [Endianness endian = Endianness.BIG_ENDIAN]) { |
| 2933 if (byteOffset < 0 || byteOffset >= length) { | 2933 if (byteOffset < 0 || byteOffset + 7 >= length) { |
| 2934 _throwRangeError(byteOffset, length); | 2934 _throwRangeError(byteOffset + 7, length); |
| 2935 } | 2935 } |
| 2936 var set_value = _toInt64(value); | 2936 var set_value = _toInt64(value); |
| 2937 if (!identical(endian, Endianness.HOST_ENDIAN)) { | 2937 if (!identical(endian, Endianness.HOST_ENDIAN)) { |
| 2938 set_value = _toEndianInt64(set_value, endian._littleEndian); | 2938 set_value = _toEndianInt64(set_value, endian._littleEndian); |
| 2939 } | 2939 } |
| 2940 _typedData._setInt64(_offset + byteOffset, set_value); | 2940 _typedData._setInt64(_offset + byteOffset, set_value); |
| 2941 } | 2941 } |
| 2942 | 2942 |
| 2943 int getUint64(int byteOffset, [Endianness endian = Endianness.BIG_ENDIAN]) { | 2943 int getUint64(int byteOffset, [Endianness endian = Endianness.BIG_ENDIAN]) { |
| 2944 if (byteOffset < 0 || byteOffset >= length) { | 2944 if (byteOffset < 0 || byteOffset + 7 >= length) { |
| 2945 _throwRangeError(byteOffset, length); | 2945 _throwRangeError(byteOffset + 7, length); |
| 2946 } | 2946 } |
| 2947 var result = _typedData._getUint64(_offset + byteOffset); | 2947 var result = _typedData._getUint64(_offset + byteOffset); |
| 2948 if (identical(endian, Endianness.HOST_ENDIAN)) { | 2948 if (identical(endian, Endianness.HOST_ENDIAN)) { |
| 2949 return result; | 2949 return result; |
| 2950 } | 2950 } |
| 2951 return _toEndianUint64(result, endian._littleEndian); | 2951 return _toEndianUint64(result, endian._littleEndian); |
| 2952 } | 2952 } |
| 2953 void setUint64(int byteOffset, | 2953 void setUint64(int byteOffset, |
| 2954 int value, | 2954 int value, |
| 2955 [Endianness endian = Endianness.BIG_ENDIAN]) { | 2955 [Endianness endian = Endianness.BIG_ENDIAN]) { |
| 2956 if (byteOffset < 0 || byteOffset >= length) { | 2956 if (byteOffset < 0 || byteOffset + 7 >= length) { |
| 2957 _throwRangeError(byteOffset, length); | 2957 _throwRangeError(byteOffset + 7, length); |
| 2958 } | 2958 } |
| 2959 var set_value = _toUint64(value); | 2959 var set_value = _toUint64(value); |
| 2960 if (!identical(endian, Endianness.HOST_ENDIAN)) { | 2960 if (!identical(endian, Endianness.HOST_ENDIAN)) { |
| 2961 set_value = _toEndianUint64(set_value, endian._littleEndian); | 2961 set_value = _toEndianUint64(set_value, endian._littleEndian); |
| 2962 } | 2962 } |
| 2963 _typedData._setUint64(_offset + byteOffset, set_value); | 2963 _typedData._setUint64(_offset + byteOffset, set_value); |
| 2964 } | 2964 } |
| 2965 | 2965 |
| 2966 double getFloat32(int byteOffset, | 2966 double getFloat32(int byteOffset, |
| 2967 [Endianness endian = Endianness.BIG_ENDIAN]) { | 2967 [Endianness endian = Endianness.BIG_ENDIAN]) { |
| 2968 if (byteOffset < 0 || byteOffset >= length) { | 2968 if (byteOffset < 0 || byteOffset + 3 >= length) { |
| 2969 _throwRangeError(byteOffset, length); | 2969 _throwRangeError(byteOffset + 3, length); |
| 2970 } | 2970 } |
| 2971 var result = _typedData._getFloat32(_offset + byteOffset); | 2971 var result = _typedData._getFloat32(_offset + byteOffset); |
| 2972 if (identical(endian, Endianness.HOST_ENDIAN)) { | 2972 if (identical(endian, Endianness.HOST_ENDIAN)) { |
| 2973 return result; | 2973 return result; |
| 2974 } | 2974 } |
| 2975 return _toEndianFloat32(result, endian._littleEndian); | 2975 return _toEndianFloat32(result, endian._littleEndian); |
| 2976 } | 2976 } |
| 2977 void setFloat32(int byteOffset, | 2977 void setFloat32(int byteOffset, |
| 2978 double value, | 2978 double value, |
| 2979 [Endianness endian = Endianness.BIG_ENDIAN]) { | 2979 [Endianness endian = Endianness.BIG_ENDIAN]) { |
| 2980 if (byteOffset < 0 || byteOffset >= length) { | 2980 if (byteOffset < 0 || byteOffset + 3 >= length) { |
| 2981 _throwRangeError(byteOffset, length); | 2981 _throwRangeError(byteOffset + 3, length); |
| 2982 } | 2982 } |
| 2983 var set_value = value; | 2983 var set_value = value; |
| 2984 if (!identical(endian, Endianness.HOST_ENDIAN)) { | 2984 if (!identical(endian, Endianness.HOST_ENDIAN)) { |
| 2985 set_value = _toEndianFloat32(set_value, endian._littleEndian); | 2985 set_value = _toEndianFloat32(set_value, endian._littleEndian); |
| 2986 } | 2986 } |
| 2987 _typedData._setFloat32(_offset + byteOffset, set_value); | 2987 _typedData._setFloat32(_offset + byteOffset, set_value); |
| 2988 } | 2988 } |
| 2989 | 2989 |
| 2990 double getFloat64(int byteOffset, | 2990 double getFloat64(int byteOffset, |
| 2991 [Endianness endian = Endianness.BIG_ENDIAN]) { | 2991 [Endianness endian = Endianness.BIG_ENDIAN]) { |
| 2992 if (byteOffset < 0 || byteOffset >= length) { | 2992 if (byteOffset < 0 || byteOffset + 7 >= length) { |
| 2993 _throwRangeError(byteOffset, length); | 2993 _throwRangeError(byteOffset + 7, length); |
| 2994 } | 2994 } |
| 2995 var result = _typedData._getFloat64(_offset + byteOffset); | 2995 var result = _typedData._getFloat64(_offset + byteOffset); |
| 2996 if (identical(endian, Endianness.HOST_ENDIAN)) { | 2996 if (identical(endian, Endianness.HOST_ENDIAN)) { |
| 2997 return result; | 2997 return result; |
| 2998 } | 2998 } |
| 2999 return _toEndianFloat64(result, endian._littleEndian); | 2999 return _toEndianFloat64(result, endian._littleEndian); |
| 3000 } | 3000 } |
| 3001 void setFloat64(int byteOffset, | 3001 void setFloat64(int byteOffset, |
| 3002 double value, | 3002 double value, |
| 3003 [Endianness endian = Endianness.BIG_ENDIAN]) { | 3003 [Endianness endian = Endianness.BIG_ENDIAN]) { |
| 3004 if (byteOffset < 0 || byteOffset >= length) { | 3004 if (byteOffset < 0 || byteOffset + 7 >= length) { |
| 3005 _throwRangeError(byteOffset, length); | 3005 _throwRangeError(byteOffset + 7, length); |
| 3006 } | 3006 } |
| 3007 var set_value = value; | 3007 var set_value = value; |
| 3008 if (!identical(endian, Endianness.HOST_ENDIAN)) { | 3008 if (!identical(endian, Endianness.HOST_ENDIAN)) { |
| 3009 set_value = _toEndianFloat64(set_value, endian._littleEndian); | 3009 set_value = _toEndianFloat64(set_value, endian._littleEndian); |
| 3010 } | 3010 } |
| 3011 _typedData._setFloat64(_offset + byteOffset, set_value); | 3011 _typedData._setFloat64(_offset + byteOffset, set_value); |
| 3012 } | 3012 } |
| 3013 | 3013 |
| 3014 Float32x4 getFloat32x4(int byteOffset, | 3014 Float32x4 getFloat32x4(int byteOffset, |
| 3015 [Endianness endian = Endianness.BIG_ENDIAN]) { | 3015 [Endianness endian = Endianness.BIG_ENDIAN]) { |
| 3016 if (byteOffset < 0 || byteOffset >= length) { | 3016 if (byteOffset < 0 || byteOffset + 3 >= length) { |
| 3017 _throwRangeError(byteOffset, length); | 3017 _throwRangeError(byteOffset + 3, length); |
| 3018 } | 3018 } |
| 3019 // TODO(johnmccutchan) : Need to resolve this for endianity. | 3019 // TODO(johnmccutchan) : Need to resolve this for endianity. |
| 3020 return _typedData._getFloat32x4(_offset + byteOffset); | 3020 return _typedData._getFloat32x4(_offset + byteOffset); |
| 3021 } | 3021 } |
| 3022 void setFloat32x4(int byteOffset, | 3022 void setFloat32x4(int byteOffset, |
| 3023 Float32x4 value, | 3023 Float32x4 value, |
| 3024 [Endianness endian = Endianness.BIG_ENDIAN]) { | 3024 [Endianness endian = Endianness.BIG_ENDIAN]) { |
| 3025 if (byteOffset < 0 || byteOffset >= length) { | 3025 if (byteOffset < 0 || byteOffset + 3 >= length) { |
| 3026 _throwRangeError(byteOffset, length); | 3026 _throwRangeError(byteOffset + 3, length); |
| 3027 } | 3027 } |
| 3028 // TODO(johnmccutchan) : Need to resolve this for endianity. | 3028 // TODO(johnmccutchan) : Need to resolve this for endianity. |
| 3029 _typedData._setFloat32x4(_offset + byteOffset, value); | 3029 _typedData._setFloat32x4(_offset + byteOffset, value); |
| 3030 | 3030 |
| 3031 } | 3031 } |
| 3032 | 3032 |
| 3033 | 3033 |
| 3034 // Internal utility methods. | 3034 // Internal utility methods. |
| 3035 | 3035 |
| 3036 static int _toEndianInt16(int host_value, bool little_endian) | 3036 static int _toEndianInt16(int host_value, bool little_endian) |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3130 return value; | 3130 return value; |
| 3131 } | 3131 } |
| 3132 return object; | 3132 return object; |
| 3133 } | 3133 } |
| 3134 | 3134 |
| 3135 | 3135 |
| 3136 void _throwRangeError(int index, int length) { | 3136 void _throwRangeError(int index, int length) { |
| 3137 String message = "$index must be in the range [0..$length)"; | 3137 String message = "$index must be in the range [0..$length)"; |
| 3138 throw new RangeError(message); | 3138 throw new RangeError(message); |
| 3139 } | 3139 } |
| OLD | NEW |