URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [libgo/] [runtime/] [string.goc] - Rev 747
Compare with Previous | Blame | View Log
// Copyright 2009, 2010 The Go Authors. All rights reserved.// Use of this source code is governed by a BSD-style// license that can be found in the LICENSE file.package runtime#include "runtime.h"#include "arch.h"#include "malloc.h"#define charntorune(pv, str, len) __go_get_rune(str, len, pv)int32runtime_findnull(const byte *s){if(s == nil)return 0;return __builtin_strlen((const char*) s);}Stringruntime_gostringnocopy(const byte *str){String s;s.__data = (const unsigned char *) str;s.__length = runtime_findnull(str);return s;}enum{Runeself = 0x80,};func stringiter(s String, k int32) (retk int32) {int32 l, n;if(k >= s.__length) {// retk=0 is end of iterationretk = 0;goto out;}l = s.__data[k];if(l < Runeself) {retk = k+1;goto out;}// multi-char runen = charntorune(&l, s.__data+k, s.__length-k);retk = k + (n ? n : 1);out:}func stringiter2(s String, k int32) (retk int32, retv int32) {int32 n;if(k >= s.__length) {// retk=0 is end of iterationretk = 0;retv = 0;goto out;}retv = s.__data[k];if(retv < Runeself) {retk = k+1;goto out;}// multi-char runen = charntorune(&retv, s.__data+k, s.__length-k);retk = k + (n ? n : 1);out:}
