Show
Ignore:
Timestamp:
08/11/07 04:53:46 (16 months ago)
Author:
krobillard
Message:

Removed slice! datatype - series now have an end.
Added slice test.
ur_makeBinary() now takes pointer argument.
Fixed bug in _makeComponent().
Fixed compiler warnings. Minor optimization to if/.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • branches/thune/thread_safe/print.c

    r442 r450  
    5555 
    5656/* 
    57    c2 must be a string! or string slice!. 
     57   c2 must be a string!. 
    5858*/ 
    5959void ur_strCatCell( UThread* ut, UString* out, int encoding, const UCell* c2 ) 
     
    6666    si = c2->series.it; 
    6767 
    68     used = str2->used; 
    69     if( ur_is(c2, UT_SLICE) ) 
    70     { 
    71         if( used > c2->slice.end ) 
    72             used = c2->slice.end; 
    73     } 
     68    used = ur_sliceEnd( c2, str2 ); 
    7469    used -= si; 
    7570 
     
    263258static void _binCellToStr( UThread* ut, UString* out, const UCell* val ) 
    264259{ 
    265     UString* bin = ur_binPtr( val->series.n ); 
    266     _binToStr( out,  
    267                bin->ptr.b + val->series.it, 
    268                bin->ptr.b + bin->used ); 
     260    UBinary* bin = ur_bin( val ); 
     261    UIndex n = ur_sliceEnd( val, bin ); 
     262    if( n < val->series.it ) 
     263        n = val->series.it; 
     264    _binToStr( out, bin->ptr.b + val->series.it, 
     265                    bin->ptr.b + n ); 
    269266} 
    270267 
     
    783780        case UT_BLOCK: 
    784781        { 
     782            UCell* vp; 
     783            UCell* end; 
    785784            UBlock* blk = ur_block( val ); 
    786             UCell* vp  = blk->ptr.cells + val->series.it; 
    787             UCell* end = blk->ptr.cells + blk->used; 
    788  
    789             if( vp != end ) 
    790             { 
     785            UIndex n = ur_sliceEnd( val, blk ); 
     786 
     787            if( n > val->series.it ) 
     788            { 
     789                vp  = blk->ptr.cells + val->series.it; 
     790                end = blk->ptr.cells + n; 
    791791                while( 1 ) 
    792792                { 
     
    799799            } 
    800800        } 
    801             break; 
    802  
    803         case UT_SLICE: 
    804             switch( ur_sliceDT(val) ) 
    805             { 
    806                 case UT_STRING: 
    807                     ur_strCatCell( ut, out, UR_ENC_ASCII, val ); 
    808                     break; 
    809             } 
    810801            break; 
    811802 
     
    10121003        { 
    10131004            UString* str = ur_bin( val ); 
     1005            UIndex n = ur_sliceEnd( val, str ); 
     1006            if( n < val->series.it ) 
     1007                n = val->series.it; 
    10141008            if( ur_encoding(val) == UR_ENC_UTF16 ) 
    10151009            { 
    10161010                _appendStringUtf16( out, str->ptr.u16 + val->series.it, 
    1017                                          str->ptr.u16 + str->used ); 
     1011                                         str->ptr.u16 + n ); 
    10181012            } 
    10191013            else 
    10201014            { 
    10211015                _appendStringAscii( out, str->ptr.c + val->series.it, 
    1022                                          str->ptr.c + str->used ); 
     1016                                         str->ptr.c + n ); 
    10231017            } 
    10241018        } 
     
    11821176        case UT_BLOCK: 
    11831177        { 
    1184             UBlock* blk = ur_blockPtr( val->series.n ); 
     1178            UBlock* blk = ur_block( val ); 
     1179            UIndex n = ur_sliceEnd( val, blk ); 
     1180 
     1181            if( n < val->series.it ) 
     1182                n = val->series.it; 
     1183 
    11851184            ur_blockToStr( ut, out, 
    11861185                           blk->ptr.cells + val->series.it, 
    1187                            blk->ptr.cells + blk->used, 
     1186                           blk->ptr.cells + n, 
    11881187                           ur_type(val), depth ); 
    11891188        } 
     
    12641263            break; 
    12651264 
    1266         case UT_SLICE: 
    1267             switch( ur_sliceDT(val) ) 
    1268             { 
    1269                 case UT_BINARY: 
    1270                 { 
    1271                     UBinary* bin = ur_bin(val); 
    1272                     _binToStr( out, 
    1273                                bin->ptr.b + val->slice.it, 
    1274                                bin->ptr.b + ur_sliceEnd(val, bin) ); 
    1275                 } 
    1276                     break; 
    1277  
    1278                 case UT_STRING: 
    1279                 { 
    1280                     UString* str = ur_bin(val); 
    1281                     if( ur_encoding(val) == UR_ENC_UTF16 ) 
    1282                     { 
    1283                         _appendStringUtf16( out, str->ptr.u16 + val->slice.it, 
    1284                                        str->ptr.u16 + ur_sliceEnd(val,str) ); 
    1285                     } 
    1286                     else 
    1287                     { 
    1288                         _appendStringAscii( out, str->ptr.c + val->slice.it, 
    1289                                        str->ptr.c + ur_sliceEnd(val,str) ); 
    1290                     } 
    1291                 } 
    1292                     break; 
    1293  
    1294                 case UT_BLOCK: 
    1295                 case UT_PAREN: 
    1296                 { 
    1297                     UBlock* blk = ur_block(val); 
    1298                     ur_blockToStr( ut, out, 
    1299                                    blk->ptr.cells + val->slice.it, 
    1300                                    blk->ptr.cells + ur_sliceEnd(val, blk), 
    1301                                    ur_sliceDT(val), depth ); 
    1302                 } 
    1303                     break; 
    1304  
    1305                 default: 
    1306                     append( out, "?slice!?", 8 ); 
    1307                     break; 
    1308             } 
    1309             break; 
    1310  
    13111265        case UT_VECTOR: 
    13121266            _arrayToStr( ut, out, val, depth );