Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(33)

Side by Side Diff: runtime/lib/typeddata.dart

Issue 14332002: Add endian parameter to the get/set functions in ByteData. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 2856 matching lines...) Expand 10 before | Expand all | Expand 10 after
2867 int getUint8(int byteOffset) { 2867 int getUint8(int byteOffset) {
2868 if (byteOffset < 0 || byteOffset >= length) { 2868 if (byteOffset < 0 || byteOffset >= length) {
2869 _throwRangeError(byteOffset, length); 2869 _throwRangeError(byteOffset, length);
2870 } 2870 }
2871 return _typeddata._getUint8(_offset + byteOffset); 2871 return _typeddata._getUint8(_offset + byteOffset);
2872 } 2872 }
2873 void setUint8(int byteOffset, int value) { 2873 void setUint8(int byteOffset, int value) {
2874 if (byteOffset < 0 || byteOffset >= length) { 2874 if (byteOffset < 0 || byteOffset >= length) {
2875 _throwRangeError(byteOffset, length); 2875 _throwRangeError(byteOffset, length);
2876 } 2876 }
2877 _typeddata._setUint8(_offset + byteOffset,_toUint8( value)); 2877 _typeddata._setUint8(_offset + byteOffset, _toUint8(value));
2878 } 2878 }
2879 2879
2880 int getInt16(int byteOffset) { 2880 int getInt16(int byteOffset, [Endianness endian = Endianness.BIG_ENDIAN]) {
2881 if (byteOffset < 0 || byteOffset >= length) { 2881 if (byteOffset < 0 || byteOffset >= length) {
2882 _throwRangeError(byteOffset, length); 2882 _throwRangeError(byteOffset, length);
2883 } 2883 }
2884 return _typeddata._getInt16(_offset + byteOffset); 2884 var result = _typeddata._getInt16(_offset + byteOffset);
2885 } 2885 if (endian === Endianness.HOST_ENDIAN) {
2886 void setInt16(int byteOffset, int value) { 2886 return result;
2887 if (byteOffset < 0 || byteOffset >= length) { 2887 }
2888 _throwRangeError(byteOffset, length); 2888 return _toEndianInt16(result, endian._littleEndian);
2889 } 2889 }
2890 _typeddata._setInt16(_offset + byteOffset, _toInt16(value)); 2890 void setInt16(int byteOffset,
2891 } 2891 int value,
2892 2892 [Endianness endian = Endianness.BIG_ENDIAN]) {
2893 int getUint16(int byteOffset) { 2893 if (byteOffset < 0 || byteOffset >= length) {
2894 if (byteOffset < 0 || byteOffset >= length) { 2894 _throwRangeError(byteOffset, length);
2895 _throwRangeError(byteOffset, length); 2895 }
2896 } 2896 var set_value = _toInt16(value);
2897 return _typeddata._getUint16(_offset + byteOffset); 2897 if (endian !== Endianness.HOST_ENDIAN) {
2898 } 2898 set_value = _toEndianInt16(set_value, endian._littleEndian);
2899 void setUint16(int byteOffset, int value) { 2899 }
2900 if (byteOffset < 0 || byteOffset >= length) { 2900 _typeddata._setInt16(_offset + byteOffset, set_value);
2901 _throwRangeError(byteOffset, length); 2901 }
2902 } 2902
2903 _typeddata._setUint16(_offset + byteOffset, _toUint16(value)); 2903 int getUint16(int byteOffset, [Endianness endian = Endianness.BIG_ENDIAN]) {
2904 } 2904 if (byteOffset < 0 || byteOffset >= length) {
2905 2905 _throwRangeError(byteOffset, length);
2906 int getInt32(int byteOffset) { 2906 }
2907 if (byteOffset < 0 || byteOffset >= length) { 2907 var result = _typeddata._getUint16(_offset + byteOffset);
2908 _throwRangeError(byteOffset, length); 2908 if (endian === Endianness.HOST_ENDIAN) {
2909 } 2909 return result;
2910 return _typeddata._getInt32(_offset + byteOffset); 2910 }
2911 } 2911 return _toEndianUint16(result, endian._littleEndian);
2912 void setInt32(int byteOffset, int value) { 2912 }
2913 if (byteOffset < 0 || byteOffset >= length) { 2913 void setUint16(int byteOffset,
2914 _throwRangeError(byteOffset, length); 2914 int value,
2915 } 2915 [Endianness endian = Endianness.BIG_ENDIAN]) {
2916 _typeddata._setInt32(_offset + byteOffset, _toInt32(value)); 2916 if (byteOffset < 0 || byteOffset >= length) {
2917 } 2917 _throwRangeError(byteOffset, length);
2918 2918 }
2919 int getUint32(int byteOffset) { 2919 var set_value = _toUint16(value);
2920 if (byteOffset < 0 || byteOffset >= length) { 2920 if (endian !== Endianness.HOST_ENDIAN) {
2921 _throwRangeError(byteOffset, length); 2921 set_value = _toEndianUint16(set_value, endian._littleEndian);
2922 } 2922 }
2923 return _typeddata._getUint32(_offset + byteOffset); 2923 _typeddata._setUint16(_offset + byteOffset, set_value);
2924 } 2924 }
2925 void setUint32(int byteOffset, int value) { 2925
2926 if (byteOffset < 0 || byteOffset >= length) { 2926 int getInt32(int byteOffset, [Endianness endian = Endianness.BIG_ENDIAN]) {
2927 _throwRangeError(byteOffset, length); 2927 if (byteOffset < 0 || byteOffset >= length) {
2928 } 2928 _throwRangeError(byteOffset, length);
2929 _typeddata._setUint32(_offset + byteOffset, _toUint32(value)); 2929 }
2930 } 2930 var result = _typeddata._getInt32(_offset + byteOffset);
2931 2931 if (endian === Endianness.HOST_ENDIAN) {
2932 int getInt64(int byteOffset) { 2932 return result;
2933 if (byteOffset < 0 || byteOffset >= length) { 2933 }
2934 _throwRangeError(byteOffset, length); 2934 return _toEndianInt32(result, endian._littleEndian);
2935 } 2935 }
2936 return _typeddata._getInt64(_offset + byteOffset); 2936 void setInt32(int byteOffset,
2937 } 2937 int value,
2938 void setInt64(int byteOffset, int value) { 2938 [Endianness endian = Endianness.BIG_ENDIAN]) {
2939 if (byteOffset < 0 || byteOffset >= length) { 2939 if (byteOffset < 0 || byteOffset >= length) {
2940 _throwRangeError(byteOffset, length); 2940 _throwRangeError(byteOffset, length);
2941 } 2941 }
2942 _typeddata._setInt64(_offset + byteOffset, _toInt64(value)); 2942 var set_value = _toInt32(value);
2943 } 2943 if (endian !== Endianness.HOST_ENDIAN) {
2944 2944 set_value = _toEndianInt32(set_value, endian._littleEndian);
2945 int getUint64(int byteOffset) { 2945 }
2946 if (byteOffset < 0 || byteOffset >= length) { 2946 _typeddata._setInt32(_offset + byteOffset, set_value);
2947 _throwRangeError(byteOffset, length); 2947 }
2948 } 2948
2949 return _typeddata._getUint64(_offset + byteOffset); 2949 int getUint32(int byteOffset, [Endianness endian = Endianness.BIG_ENDIAN]) {
2950 } 2950 if (byteOffset < 0 || byteOffset >= length) {
2951 void setUint64(int byteOffset, int value) { 2951 _throwRangeError(byteOffset, length);
2952 if (byteOffset < 0 || byteOffset >= length) { 2952 }
2953 _throwRangeError(byteOffset, length); 2953 var result = _typeddata._getUint32(_offset + byteOffset);
2954 } 2954 if (endian === Endianness.HOST_ENDIAN) {
2955 _typeddata._setUint64(_offset + byteOffset, _toUint64(value)); 2955 return result;
2956 } 2956 }
2957 2957 return _toEndianUint32(result, endian._littleEndian);
2958 double getFloat32(int byteOffset) { 2958 }
2959 if (byteOffset < 0 || byteOffset >= length) { 2959 void setUint32(int byteOffset,
2960 _throwRangeError(byteOffset, length); 2960 int value,
2961 } 2961 [Endianness endian = Endianness.BIG_ENDIAN]) {
2962 return _typeddata._getFloat32(_offset + byteOffset); 2962 if (byteOffset < 0 || byteOffset >= length) {
2963 } 2963 _throwRangeError(byteOffset, length);
2964 void setFloat32(int byteOffset, double value) { 2964 }
2965 if (byteOffset < 0 || byteOffset >= length) { 2965 var set_value = _toUint32(value);
2966 _throwRangeError(byteOffset, length); 2966 if (endian !== Endianness.HOST_ENDIAN) {
2967 } 2967 set_value = _toEndianUint32(set_value, endian._littleEndian);
2968 _typeddata._setFloat32(_offset + byteOffset, value); 2968 }
2969 } 2969 _typeddata._setUint32(_offset + byteOffset, set_value);
2970 2970 }
2971 double getFloat64(int byteOffset) { 2971
2972 if (byteOffset < 0 || byteOffset >= length) { 2972 int getInt64(int byteOffset, [Endianness endian = Endianness.BIG_ENDIAN]) {
2973 _throwRangeError(byteOffset, length); 2973 if (byteOffset < 0 || byteOffset >= length) {
2974 } 2974 _throwRangeError(byteOffset, length);
2975 return _typeddata._getFloat64(_offset + byteOffset); 2975 }
2976 } 2976 var result = _typeddata._getInt64(_offset + byteOffset);
2977 void setFloat64(int byteOffset, double value) { 2977 if (endian === Endianness.HOST_ENDIAN) {
2978 if (byteOffset < 0 || byteOffset >= length) { 2978 return result;
2979 _throwRangeError(byteOffset, length); 2979 }
2980 } 2980 return _toEndianInt64(result, endian._littleEndian);
2981 _typeddata._setFloat64(_offset + byteOffset, value); 2981 }
2982 } 2982 void setInt64(int byteOffset,
2983 2983 int value,
2984 Float32x4 getFloat32x4(int byteOffset) { 2984 [Endianness endian = Endianness.BIG_ENDIAN]) {
2985 if (byteOffset < 0 || byteOffset >= length) { 2985 if (byteOffset < 0 || byteOffset >= length) {
2986 _throwRangeError(byteOffset, length); 2986 _throwRangeError(byteOffset, length);
2987 } 2987 }
2988 var set_value = _toInt64(value);
2989 if (endian !== Endianness.HOST_ENDIAN) {
2990 set_value = _toEndianInt64(set_value, endian._littleEndian);
2991 }
2992 _typeddata._setInt64(_offset + byteOffset, set_value);
2993 }
2994
2995 int getUint64(int byteOffset, [Endianness endian = Endianness.BIG_ENDIAN]) {
2996 if (byteOffset < 0 || byteOffset >= length) {
2997 _throwRangeError(byteOffset, length);
2998 }
2999 var result = _typeddata._getUint64(_offset + byteOffset);
3000 if (endian === Endianness.HOST_ENDIAN) {
3001 return result;
3002 }
3003 return _toEndianUint64(result, endian._littleEndian);
3004 }
3005 void setUint64(int byteOffset,
3006 int value,
3007 [Endianness endian = Endianness.BIG_ENDIAN]) {
3008 if (byteOffset < 0 || byteOffset >= length) {
3009 _throwRangeError(byteOffset, length);
3010 }
3011 var set_value = _toUint64(value);
3012 if (endian !== Endianness.HOST_ENDIAN) {
3013 set_value = _toEndianUint64(set_value, endian._littleEndian);
3014 }
3015 _typeddata._setUint64(_offset + byteOffset, set_value);
3016 }
3017
3018 double getFloat32(int byteOffset,
3019 [Endianness endian = Endianness.BIG_ENDIAN]) {
3020 if (byteOffset < 0 || byteOffset >= length) {
3021 _throwRangeError(byteOffset, length);
3022 }
3023 var result = _typeddata._getFloat32(_offset + byteOffset);
3024 if (endian === Endianness.HOST_ENDIAN) {
3025 return result;
3026 }
3027 return _toEndianFloat32(result, endian._littleEndian);
3028 }
3029 void setFloat32(int byteOffset,
3030 double value,
3031 [Endianness endian = Endianness.BIG_ENDIAN]) {
3032 if (byteOffset < 0 || byteOffset >= length) {
3033 _throwRangeError(byteOffset, length);
3034 }
3035 var set_value = value;
3036 if (endian !== Endianness.HOST_ENDIAN) {
3037 set_value = _toEndianFloat32(set_value, endian._littleEndian);
3038 }
3039 _typeddata._setFloat32(_offset + byteOffset, set_value);
3040 }
3041
3042 double getFloat64(int byteOffset,
3043 [Endianness endian = Endianness.BIG_ENDIAN]) {
3044 if (byteOffset < 0 || byteOffset >= length) {
3045 _throwRangeError(byteOffset, length);
3046 }
3047 var result = _typeddata._getFloat64(_offset + byteOffset);
3048 if (endian === Endianness.HOST_ENDIAN) {
3049 return result;
3050 }
3051 return _toEndianFloat64(result, endian._littleEndian);
3052 }
3053 void setFloat64(int byteOffset,
3054 double value,
3055 [Endianness endian = Endianness.BIG_ENDIAN]) {
3056 if (byteOffset < 0 || byteOffset >= length) {
3057 _throwRangeError(byteOffset, length);
3058 }
3059 var set_value = value;
3060 if (endian !== Endianness.HOST_ENDIAN) {
3061 set_value = _toEndianFloat64(set_value, endian._littleEndian);
3062 }
3063 _typeddata._setFloat64(_offset + byteOffset, set_value);
3064 }
3065
3066 Float32x4 getFloat32x4(int byteOffset,
3067 [Endianness endian = Endianness.BIG_ENDIAN]) {
3068 if (byteOffset < 0 || byteOffset >= length) {
3069 _throwRangeError(byteOffset, length);
3070 }
3071 // TODO(johnmccutchan) : Need to resolve this for endianity.
2988 return _typeddata._getFloat32x4(_offset + byteOffset); 3072 return _typeddata._getFloat32x4(_offset + byteOffset);
2989 } 3073 }
2990 void setFloat32x4(int byteOffset, Float32x4 value) { 3074 void setFloat32x4(int byteOffset,
2991 if (byteOffset < 0 || byteOffset >= length) { 3075 Float32x4 value,
2992 _throwRangeError(byteOffset, length); 3076 [Endianness endian = Endianness.BIG_ENDIAN]) {
2993 } 3077 if (byteOffset < 0 || byteOffset >= length) {
3078 _throwRangeError(byteOffset, length);
3079 }
3080 // TODO(johnmccutchan) : Need to resolve this for endianity.
2994 _typeddata._setFloat32x4(_offset + byteOffset, value); 3081 _typeddata._setFloat32x4(_offset + byteOffset, value);
2995 3082
2996 } 3083 }
2997 3084
3085
3086 // Internal utility methods.
3087
3088 static int _toEndianInt16(int host_value, bool little_endian)
3089 native "ByteData_ToEndianInt16";
3090 static int _toEndianUint16(int host_value, bool little_endian)
3091 native "ByteData_ToEndianUint16";
3092 static int _toEndianInt32(int host_value, bool little_endian)
3093 native "ByteData_ToEndianInt32";
3094 static int _toEndianUint32(int host_value, bool little_endian)
3095 native "ByteData_ToEndianUint32";
3096 static int _toEndianInt64(int host_value, bool little_endian)
3097 native "ByteData_ToEndianInt64";
3098 static int _toEndianUint64(int host_value, bool little_endian)
3099 native "ByteData_ToEndianUint64";
3100 static double _toEndianFloat32(double host_value, bool little_endian)
3101 native "ByteData_ToEndianFloat32";
3102 static double _toEndianFloat64(double host_value, bool little_endian)
3103 native "ByteData_ToEndianFloat64";
3104
3105
2998 final TypedData _typeddata; 3106 final TypedData _typeddata;
2999 final int _offset; 3107 final int _offset;
3000 final int length; 3108 final int length;
3001 } 3109 }
3002 3110
3003 3111
3004 // Top level utility methods. 3112 // Top level utility methods.
3005 int _toInt(int value, int mask) { 3113 int _toInt(int value, int mask) {
3006 value &= mask; 3114 value &= mask;
3007 if (value > (mask >> 1)) value -= mask + 1; 3115 if (value > (mask >> 1)) value -= mask + 1;
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
3074 return value; 3182 return value;
3075 } 3183 }
3076 return object; 3184 return object;
3077 } 3185 }
3078 3186
3079 3187
3080 void _throwRangeError(int index, int length) { 3188 void _throwRangeError(int index, int length) {
3081 String message = "$index must be in the range [0..$length)"; 3189 String message = "$index must be in the range [0..$length)";
3082 throw new RangeError(message); 3190 throw new RangeError(message);
3083 } 3191 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698