Array (and string) slicing should now be in master for Genie

Please test and let me know if there are any problems with it

jamie

On Sat, 2010-05-22 at 19:56 -0400, Arc Riley wrote:
> We are working with IO which returns the number of bytes written, not
> utf-8 characters.
> 
> The following shows this fairly well:
> init
>   var utf8 = "𐑣𐑩𐑤𐑴, 𐑢𐑻𐑤𐑛!"
>   print "%d", (int) utf8.length
> 11
> 
> Python (3.1.2) does the same:
> >>> utf8 = "𐑣𐑩𐑤𐑴, 𐑢𐑻𐑤𐑛!"
> >>> len(utf8)
> 11
> 
> However, we can see that this is not the number of bytes:
> >>> buff = bytes(utf8, "utf-8")
> >>> len(buff)
> 35
> 
> Of course we can't do this with Genie since it has a broken to_utf8()
> function:
>   print "%d", (int) utf8.to_utf8().length
> 4196432
> 
> IO read/write functions return bytes for the number read and written.
> For this reason, I wrote us up an alternative mapping of GString for
> using chra[] instead of string, and we avoid string whenever we have
> data which could have utf8 content.
> 
> The pointer solution seems to work in this case, but Genie does not
> have slice support currently (I checked), where Vala does and
> implements it in nearly the same way Python does.
> 
> 
> 
> 
> On Sat, May 22, 2010 at 11:46 AM, jamie <jamie.mccr...@googlemail.com>
> wrote:
>         
>         On Sat, 2010-05-22 at 06:38 -0400, Arc Riley wrote:
>         > I'm migrating some C code to Genie and ran into a troubling
>         limitation; the
>         > following line of code does not seem to have an equivalent
>         in Genie:
>         >
>         >         session->wbuff = g_string_append_len(session->wbuff,
>         str+sent,
>         > len-sent);
>         >
>         > What this means is "when you can't send all the data you'd
>         like, append the
>         > rest to our (known to be empty) GString buffer".
>         >
>         > The key part here is "the rest" - getting a slice of an
>         array, such as C's
>         > array + value syntax (Incompatible operand) or Python's
>         array[start:] syntax
>         > (error: syntax error, expected `]' but got `:' with previous
>         identifier).
>         >
>         > We can't use Genie strings for the buffer because UTF8
>         length != byte
>         > length.
>         
>         > _______________________________________________
>         
>         You should be using the StringBuilder class for this
>         
>         public unowned StringBuilder append_len (string val, ssize_t
>         len);
>         
>         (StringBuilder is a GString)
>         
>         Also string class has a size method which uses strlen - it
>         would
>         probably be clearer if it was called ByteLength
>         
>         See http://git.gnome.org/browse/vala/tree/vapi/glib-2.0.vapi
>         
>         If there are still problems let me know - I will be bug fixing
>         genie
>         tomorrow
>         
>         jamie
>         
>         
> 


_______________________________________________
vala-list mailing list
vala-list@gnome.org
http://mail.gnome.org/mailman/listinfo/vala-list

Reply via email to