@@ -8,7 +8,29 @@ namespace Tensorflow
88{
99 public partial class Tensor
1010 {
11- public unsafe IntPtr StringTensor ( string [ ] strings , TensorShape shape )
11+ const ulong TF_TSRING_SIZE = 24 ;
12+
13+ public IntPtr StringTensor25 ( string [ ] strings , TensorShape shape )
14+ {
15+ var handle = c_api . TF_AllocateTensor ( TF_DataType . TF_STRING ,
16+ shape . dims . Select ( x => ( long ) x ) . ToArray ( ) ,
17+ shape . ndim ,
18+ ( ulong ) shape . size * TF_TSRING_SIZE ) ;
19+
20+ var data = c_api . TF_TensorData ( handle ) ;
21+ var tstr = c_api . TF_StringInit ( handle ) ;
22+ // AllocationHandle = tstr;
23+ // AllocationType = AllocationType.Tensorflow;
24+ for ( int i = 0 ; i < strings . Length ; i ++ )
25+ {
26+ c_api . TF_StringCopy ( tstr , strings [ i ] , strings [ i ] . Length ) ;
27+ tstr += ( int ) TF_TSRING_SIZE ;
28+ }
29+ // c_api.TF_StringDealloc(tstr);
30+ return handle ;
31+ }
32+
33+ public IntPtr StringTensor ( string [ ] strings , TensorShape shape )
1234 {
1335 // convert string array to byte[][]
1436 var buffer = new byte [ strings . Length ] [ ] ;
@@ -61,11 +83,27 @@ public unsafe IntPtr StringTensor(byte[][] buffer, TensorShape shape)
6183 return handle ;
6284 }
6385
86+ public string [ ] StringData25 ( )
87+ {
88+ string [ ] strings = new string [ c_api . TF_Dim ( _handle , 0 ) ] ;
89+ var tstrings = TensorDataPointer ;
90+ for ( int i = 0 ; i < strings . Length ; i ++ )
91+ {
92+ var tstringData = c_api . TF_StringGetDataPointer ( tstrings ) ;
93+ /*var size = c_api.TF_StringGetSize(tstrings);
94+ var capacity = c_api.TF_StringGetCapacity(tstrings);
95+ var type = c_api.TF_StringGetType(tstrings);*/
96+ strings [ i ] = c_api . StringPiece ( tstringData ) ;
97+ tstrings += ( int ) TF_TSRING_SIZE ;
98+ }
99+ return strings ;
100+ }
101+
64102 /// <summary>
65103 /// Extracts string array from current Tensor.
66104 /// </summary>
67105 /// <exception cref="InvalidOperationException">When <see cref="dtype"/> != TF_DataType.TF_STRING</exception>
68- public unsafe string [ ] StringData ( )
106+ public string [ ] StringData ( )
69107 {
70108 var buffer = StringBytes ( ) ;
71109
0 commit comments