2020
2121// MODULES //
2222
23- var ndarray2object = require ( '@stdlib/ndarray/base/ndarraylike2object' ) ;
23+ var isAccessorArray = require ( '@stdlib/array/base/assert/is-accessor-array' ) ;
24+ var accessorSetter = require ( '@stdlib/array/base/accessor-setter' ) ;
2425var isComplexDataType = require ( '@stdlib/ndarray/base/assert/is-complex-floating-point-data-type' ) ;
25- var ctorComplex = require ( '@stdlib/complex/ctors' ) ;
26+ var ctors = require ( '@stdlib/complex/ctors' ) ;
2627var max = require ( '@stdlib/math/base/special/max' ) ;
2728var min = require ( '@stdlib/math/base/special/min' ) ;
2829var zeros = require ( '@stdlib/ndarray/base/zeros' ) ;
@@ -73,7 +74,6 @@ function setter( buf, idx, v ) {
7374*/
7475function eye ( dtype , rows , cols , k , order ) {
7576 var ctor ;
76- var tmp ;
7777 var len ;
7878 var buf ;
7979 var set ;
@@ -87,38 +87,36 @@ function eye( dtype, rows, cols, k, order ) {
8787 var c ;
8888 var x ;
8989
90- x = zeros ( dtype , [ rows , cols ] , order ) ;
91-
92- if ( isComplexDataType ( x . dtype ) ) {
93- ctor = ctorComplex ( x . dtype ) ;
94- v = new ctor ( 1.0 , 0.0 ) ;
95- } else {
96- v = 1.0 ;
97- }
98-
99- // TODO: Use better approach instead of allocating a new object
100- tmp = ndarray2object ( x ) ;
101- if ( tmp . accessorProtocol === true ) {
102- set = tmp . accessors [ 1 ] ;
103- } else {
104- set = setter ;
105- }
106-
10790 if ( k < 0 ) {
10891 r = - k ;
10992 c = 0 ;
11093 } else {
11194 r = 0 ;
11295 c = k ;
11396 }
114- len = max ( 0 , min ( rows - r , cols - c ) ) ;
97+
98+ x = zeros ( dtype , [ rows , cols ] , order ) ;
11599
116100 sr = x . strides [ 0 ] ;
117101 sc = x . strides [ 1 ] ;
118102 ix = x . offset + ( r * sr ) + ( c * sc ) ; // offset + (row * row_stride) + (col * col_stride)
119103 dx = sr + sc ;
120104
105+ if ( isAccessorArray ( x . data ) ) {
106+ set = accessorSetter ( dtype ) ;
107+ } else {
108+ set = setter ;
109+ }
121110 buf = x . data ;
111+ len = max ( 0 , min ( rows - r , cols - c ) ) ;
112+
113+ if ( isComplexDataType ( dtype ) ) {
114+ ctor = ctors ( dtype ) ;
115+ v = new ctor ( 1.0 , 0.0 ) ;
116+ } else {
117+ v = 1.0 ;
118+ }
119+
122120 for ( i = 0 ; i < len ; i ++ ) {
123121 set ( buf , ix , v ) ;
124122 ix += dx ;
0 commit comments