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

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 return _ToEndianInt16(result, endian.little_endian);
2885 } 2886 }
2886 void setInt16(int byteOffset, int value) { 2887 void setInt16(int byteOffset,
2888 int value,
2889 [Endianness endian = Endianness.BIG_ENDIAN]) {
2887 if (byteOffset < 0 || byteOffset >= length) { 2890 if (byteOffset < 0 || byteOffset >= length) {
2888 _throwRangeError(byteOffset, length); 2891 _throwRangeError(byteOffset, length);
2889 } 2892 }
2890 _typeddata._setInt16(_offset + byteOffset, _toInt16(value)); 2893 _typeddata._setInt16(_offset + byteOffset,
2894 _ToEndianInt16(_toInt16(value), endian.little_endian));
2891 } 2895 }
2892 2896
2893 int getUint16(int byteOffset) { 2897 int getUint16(int byteOffset, [Endianness endian = Endianness.BIG_ENDIAN]) {
2894 if (byteOffset < 0 || byteOffset >= length) { 2898 if (byteOffset < 0 || byteOffset >= length) {
2895 _throwRangeError(byteOffset, length); 2899 _throwRangeError(byteOffset, length);
2896 } 2900 }
2897 return _typeddata._getUint16(_offset + byteOffset); 2901 var result = _typeddata._getUint16(_offset + byteOffset);
2902 return _ToEndianUint16(result, endian.little_endian);
2898 } 2903 }
2899 void setUint16(int byteOffset, int value) { 2904 void setUint16(int byteOffset,
2905 int value,
2906 [Endianness endian = Endianness.BIG_ENDIAN]) {
2900 if (byteOffset < 0 || byteOffset >= length) { 2907 if (byteOffset < 0 || byteOffset >= length) {
2901 _throwRangeError(byteOffset, length); 2908 _throwRangeError(byteOffset, length);
2902 } 2909 }
2903 _typeddata._setUint16(_offset + byteOffset, _toUint16(value)); 2910 _typeddata._setUint16(
2911 _offset + byteOffset,
2912 _ToEndianUint16(_toUint16(value), endian.little_endian));
2904 } 2913 }
2905 2914
2906 int getInt32(int byteOffset) { 2915 int getInt32(int byteOffset, [Endianness endian = Endianness.BIG_ENDIAN]) {
2907 if (byteOffset < 0 || byteOffset >= length) { 2916 if (byteOffset < 0 || byteOffset >= length) {
2908 _throwRangeError(byteOffset, length); 2917 _throwRangeError(byteOffset, length);
2909 } 2918 }
2910 return _typeddata._getInt32(_offset + byteOffset); 2919 var result = _typeddata._getInt32(_offset + byteOffset);
2920 return _ToEndianInt32(result, endian.little_endian);
2911 } 2921 }
2912 void setInt32(int byteOffset, int value) { 2922 void setInt32(int byteOffset,
2923 int value,
2924 [Endianness endian = Endianness.BIG_ENDIAN]) {
2913 if (byteOffset < 0 || byteOffset >= length) { 2925 if (byteOffset < 0 || byteOffset >= length) {
2914 _throwRangeError(byteOffset, length); 2926 _throwRangeError(byteOffset, length);
2915 } 2927 }
2916 _typeddata._setInt32(_offset + byteOffset, _toInt32(value)); 2928 _typeddata._setInt32(_offset + byteOffset,
2929 _ToEndianInt32(_toInt32(value), endian.little_endian));
2917 } 2930 }
2918 2931
2919 int getUint32(int byteOffset) { 2932 int getUint32(int byteOffset, [Endianness endian = Endianness.BIG_ENDIAN]) {
2920 if (byteOffset < 0 || byteOffset >= length) { 2933 if (byteOffset < 0 || byteOffset >= length) {
2921 _throwRangeError(byteOffset, length); 2934 _throwRangeError(byteOffset, length);
2922 } 2935 }
2923 return _typeddata._getUint32(_offset + byteOffset); 2936 var result = _typeddata._getUint32(_offset + byteOffset);
2937 return _ToEndianUint32(result, endian.little_endian);
2924 } 2938 }
2925 void setUint32(int byteOffset, int value) { 2939 void setUint32(int byteOffset,
2940 int value,
2941 [Endianness endian = Endianness.BIG_ENDIAN]) {
2926 if (byteOffset < 0 || byteOffset >= length) { 2942 if (byteOffset < 0 || byteOffset >= length) {
2927 _throwRangeError(byteOffset, length); 2943 _throwRangeError(byteOffset, length);
2928 } 2944 }
2929 _typeddata._setUint32(_offset + byteOffset, _toUint32(value)); 2945 _typeddata._setUint32(
2946 _offset + byteOffset,
2947 _ToEndianUint32(_toUint32(value), endian.little_endian));
2930 } 2948 }
2931 2949
2932 int getInt64(int byteOffset) { 2950 int getInt64(int byteOffset, [Endianness endian = Endianness.BIG_ENDIAN]) {
2933 if (byteOffset < 0 || byteOffset >= length) { 2951 if (byteOffset < 0 || byteOffset >= length) {
2934 _throwRangeError(byteOffset, length); 2952 _throwRangeError(byteOffset, length);
2935 } 2953 }
2936 return _typeddata._getInt64(_offset + byteOffset); 2954 var result = _typeddata._getInt64(_offset + byteOffset);
2955 return _ToEndianInt64(result, endian.little_endian);
2937 } 2956 }
2938 void setInt64(int byteOffset, int value) { 2957 void setInt64(int byteOffset,
2958 int value,
2959 [Endianness endian = Endianness.BIG_ENDIAN]) {
2939 if (byteOffset < 0 || byteOffset >= length) { 2960 if (byteOffset < 0 || byteOffset >= length) {
2940 _throwRangeError(byteOffset, length); 2961 _throwRangeError(byteOffset, length);
2941 } 2962 }
2942 _typeddata._setInt64(_offset + byteOffset, _toInt64(value)); 2963 _typeddata._setInt64(_offset + byteOffset,
2964 _ToEndianInt64(_toInt64(value), endian.little_endian));
2943 } 2965 }
2944 2966
2945 int getUint64(int byteOffset) { 2967 int getUint64(int byteOffset, [Endianness endian = Endianness.BIG_ENDIAN]) {
2946 if (byteOffset < 0 || byteOffset >= length) { 2968 if (byteOffset < 0 || byteOffset >= length) {
2947 _throwRangeError(byteOffset, length); 2969 _throwRangeError(byteOffset, length);
2948 } 2970 }
2949 return _typeddata._getUint64(_offset + byteOffset); 2971 var result = _typeddata._getUint64(_offset + byteOffset);
2972 return _ToEndianUint64(result, endian.little_endian);
2950 } 2973 }
2951 void setUint64(int byteOffset, int value) { 2974 void setUint64(int byteOffset,
2975 int value,
2976 [Endianness endian = Endianness.BIG_ENDIAN]) {
2952 if (byteOffset < 0 || byteOffset >= length) { 2977 if (byteOffset < 0 || byteOffset >= length) {
2953 _throwRangeError(byteOffset, length); 2978 _throwRangeError(byteOffset, length);
2954 } 2979 }
2955 _typeddata._setUint64(_offset + byteOffset, _toUint64(value)); 2980 _typeddata._setUint64(
2981 _offset + byteOffset,
2982 _ToEndianUint64(_toUint64(value), endian.little_endian));
2956 } 2983 }
2957 2984
2958 double getFloat32(int byteOffset) { 2985 double getFloat32(int byteOffset,
2986 [Endianness endian = Endianness.BIG_ENDIAN]) {
2959 if (byteOffset < 0 || byteOffset >= length) { 2987 if (byteOffset < 0 || byteOffset >= length) {
2960 _throwRangeError(byteOffset, length); 2988 _throwRangeError(byteOffset, length);
2961 } 2989 }
2962 return _typeddata._getFloat32(_offset + byteOffset); 2990 var result = _typeddata._getFloat32(_offset + byteOffset);
2991 return _ToEndianFloat32(result, endian.little_endian);
2963 } 2992 }
2964 void setFloat32(int byteOffset, double value) { 2993 void setFloat32(int byteOffset,
2994 double value,
2995 [Endianness endian = Endianness.BIG_ENDIAN]) {
2965 if (byteOffset < 0 || byteOffset >= length) { 2996 if (byteOffset < 0 || byteOffset >= length) {
2966 _throwRangeError(byteOffset, length); 2997 _throwRangeError(byteOffset, length);
2967 } 2998 }
2968 _typeddata._setFloat32(_offset + byteOffset, value); 2999 _typeddata._setFloat32(_offset + byteOffset,
3000 _ToEndianFloat32(value, endian.little_endian));
2969 } 3001 }
2970 3002
2971 double getFloat64(int byteOffset) { 3003 double getFloat64(int byteOffset,
3004 [Endianness endian = Endianness.BIG_ENDIAN]) {
2972 if (byteOffset < 0 || byteOffset >= length) { 3005 if (byteOffset < 0 || byteOffset >= length) {
2973 _throwRangeError(byteOffset, length); 3006 _throwRangeError(byteOffset, length);
2974 } 3007 }
2975 return _typeddata._getFloat64(_offset + byteOffset); 3008 var result = _typeddata._getFloat64(_offset + byteOffset);
3009 return _ToEndianFloat64(result, endian.little_endian);
2976 } 3010 }
2977 void setFloat64(int byteOffset, double value) { 3011 void setFloat64(int byteOffset,
3012 double value,
3013 [Endianness endian = Endianness.BIG_ENDIAN]) {
2978 if (byteOffset < 0 || byteOffset >= length) { 3014 if (byteOffset < 0 || byteOffset >= length) {
2979 _throwRangeError(byteOffset, length); 3015 _throwRangeError(byteOffset, length);
2980 } 3016 }
2981 _typeddata._setFloat64(_offset + byteOffset, value); 3017 _typeddata._setFloat64(_offset + byteOffset,
3018 _ToEndianFloat64(value, endian.little_endian));
2982 } 3019 }
2983 3020
2984 Float32x4 getFloat32x4(int byteOffset) { 3021 Float32x4 getFloat32x4(int byteOffset,
3022 [Endianness endian = Endianness.BIG_ENDIAN]) {
2985 if (byteOffset < 0 || byteOffset >= length) { 3023 if (byteOffset < 0 || byteOffset >= length) {
2986 _throwRangeError(byteOffset, length); 3024 _throwRangeError(byteOffset, length);
2987 } 3025 }
3026 // TODO(johnmccutchan) : Need to resolve this for endianity.
2988 return _typeddata._getFloat32x4(_offset + byteOffset); 3027 return _typeddata._getFloat32x4(_offset + byteOffset);
2989 } 3028 }
2990 void setFloat32x4(int byteOffset, Float32x4 value) { 3029 void setFloat32x4(int byteOffset,
3030 Float32x4 value,
3031 [Endianness endian = Endianness.BIG_ENDIAN]) {
2991 if (byteOffset < 0 || byteOffset >= length) { 3032 if (byteOffset < 0 || byteOffset >= length) {
2992 _throwRangeError(byteOffset, length); 3033 _throwRangeError(byteOffset, length);
2993 } 3034 }
3035 // TODO(johnmccutchan) : Need to resolve this for endianity.
2994 _typeddata._setFloat32x4(_offset + byteOffset, value); 3036 _typeddata._setFloat32x4(_offset + byteOffset, value);
2995 3037
2996 } 3038 }
2997 3039
3040
3041 // Internal utility methods.
3042
3043 static int _ToEndianInt16(int host_value, bool little_endian)
Mads Ager (google) 2013/04/18 08:10:44 I think we usually start with a lower-case letter
siva 2013/04/18 17:17:47 Done.
3044 native "ByteData_ToEndianInt16";
3045 static int _ToEndianUint16(int host_value, bool little_endian)
3046 native "ByteData_ToEndianUint16";
3047 static int _ToEndianInt32(int host_value, bool little_endian)
3048 native "ByteData_ToEndianInt32";
3049 static int _ToEndianUint32(int host_value, bool little_endian)
3050 native "ByteData_ToEndianUint32";
3051 static int _ToEndianInt64(int host_value, bool little_endian)
3052 native "ByteData_ToEndianInt64";
3053 static int _ToEndianUint64(int host_value, bool little_endian)
3054 native "ByteData_ToEndianUint64";
3055 static double _ToEndianFloat32(double host_value, bool little_endian)
3056 native "ByteData_ToEndianFloat32";
3057 static double _ToEndianFloat64(double host_value, bool little_endian)
3058 native "ByteData_ToEndianFloat64";
3059
3060
2998 final TypedData _typeddata; 3061 final TypedData _typeddata;
2999 final int _offset; 3062 final int _offset;
3000 final int length; 3063 final int length;
3001 } 3064 }
3002 3065
3003 3066
3004 // Top level utility methods. 3067 // Top level utility methods.
3005 int _toInt(int value, int mask) { 3068 int _toInt(int value, int mask) {
3006 value &= mask; 3069 value &= mask;
3007 if (value > (mask >> 1)) value -= mask + 1; 3070 if (value > (mask >> 1)) value -= mask + 1;
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
3074 return value; 3137 return value;
3075 } 3138 }
3076 return object; 3139 return object;
3077 } 3140 }
3078 3141
3079 3142
3080 void _throwRangeError(int index, int length) { 3143 void _throwRangeError(int index, int length) {
3081 String message = "$index must be in the range [0..$length)"; 3144 String message = "$index must be in the range [0..$length)";
3082 throw new RangeError(message); 3145 throw new RangeError(message);
3083 } 3146 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698