Tweak width so it can be inlined.
diff --git a/scannerc.go b/scannerc.go
index a7ae55c..1066c4d 100644
--- a/scannerc.go
+++ b/scannerc.go
@@ -513,19 +513,8 @@
 
 // Copy a character to a string buffer and advance pointers.
 func read(parser *yaml_parser_t, s *[]byte) bool {
-	//w := width(parser.buffer[parser.buffer_pos])
-	b := parser.buffer[parser.buffer_pos]
-	w := 0
-	switch {
-	case b&0x80 == 0x00:
-		w = 1
-	case b&0xE0 == 0xC0:
-		w = 2
-	case b&0xF0 == 0xE0:
-		w = 3
-	case b&0xF8 == 0xF0:
-		w = 4
-	default:
+	w := width(parser.buffer[parser.buffer_pos])
+	if w == 0 {
 		panic("invalid character sequence")
 	}
 	if len(*s) == 0 {
@@ -534,10 +523,11 @@
 	if w == 1 && len(*s)+w <= cap(*s) {
 		*s = (*s)[:len(*s)+1]
 		(*s)[len(*s)-1] = parser.buffer[parser.buffer_pos]
+		parser.buffer_pos++
 	} else {
 		*s = append(*s, parser.buffer[parser.buffer_pos:parser.buffer_pos+w]...)
+		parser.buffer_pos += w
 	}
-	parser.buffer_pos += w
 	parser.mark.index++
 	parser.mark.column++
 	parser.unread--
diff --git a/yamlprivateh.go b/yamlprivateh.go
index f5325a6..fd8414b 100644
--- a/yamlprivateh.go
+++ b/yamlprivateh.go
@@ -154,15 +154,20 @@
 
 // Determine the width of the character.
 func width(b byte) int {
-	switch {
-	case b&0x80 == 0x00:
+	// Don't replace these by a switch without first
+	// confirming that it is being inlined.
+	if b&0x80 == 0x00 {
 		return 1
-	case b&0xE0 == 0xC0:
+	}
+	if b&0xE0 == 0xC0 {
 		return 2
-	case b&0xF0 == 0xE0:
+	}
+	if b&0xF0 == 0xE0 {
 		return 3
-	case b&0xF8 == 0xF0:
+	}
+	if b&0xF8 == 0xF0 {
 		return 4
 	}
 	return 0
+
 }