From 89711b175e318ba17b9e1504382e16c88cafbeea Mon Sep 17 00:00:00 2001 From: Dmitry Mikhirev Date: Fri, 4 Jan 2013 15:53:08 +0400 Subject: better encapsulation in utf8 class --- utf8.cpp | 56 +++++++++++++++++++++++++++++++++----------------------- 1 file changed, 33 insertions(+), 23 deletions(-) (limited to 'utf8.cpp') diff --git a/utf8.cpp b/utf8.cpp index 745e888..d4e605e 100644 --- a/utf8.cpp +++ b/utf8.cpp @@ -1,7 +1,7 @@ /* Brainuino Aleph - Copyright (C) 2012 Dmitry Mikhirev + Copyright (C) 2012, 2013 Dmitry Mikhirev This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -22,20 +22,20 @@ utf8::utf8 (char* input) { - bytes = strlen(input); - string = strdup(input); - chars = 0; - for (_index = 0; _index < bytes; _index++) { - if ((string[_index] & 0x80) == 0x00) { - chars++; - } else if ((string[_index] & 0x20) == 0x00) { - chars++; + _bytes = strlen(input); + _string = strdup(input); + _chars = 0; + for (_index = 0; _index < _bytes; _index++) { + if ((_string[_index] & 0x80) == 0x00) { + _chars++; + } else if ((_string[_index] & 0x20) == 0x00) { + _chars++; _index ++; - } else if ((string[_index] & 0x10) == 0x00) { - chars++; + } else if ((_string[_index] & 0x10) == 0x00) { + _chars++; _index += 2; - } else if ((string[_index] & 0x08) == 0x00) { - chars++; + } else if ((_string[_index] & 0x08) == 0x00) { + _chars++; _index += 3; } } @@ -44,24 +44,34 @@ utf8::utf8 (char* input) utf8::~utf8 () { - free(string); + free(_string); } int32_t utf8::get() { int32_t code; - if ((string[_index] & 0x80) == 0) { - code = int32_t(string[_index]); + if ((_string[_index] & 0x80) == 0) { + code = int32_t(_string[_index]); _index++; - } else if ((string[_index] & 0x20) == 0) { - code = int32_t(string[_index] & 0x1f) << 6 | int32_t(string[_index+1] & 0x3f); + } else if ((_string[_index] & 0x20) == 0) { + code = int32_t(_string[_index] & 0x1f) << 6 | int32_t(_string[_index+1] & 0x3f); _index += 2; - } else if ((string[_index] & 0x10) == 0) { - code = int32_t(string[_index] & 0xf) << 12 | int32_t(string[_index+1] & 0x3f) << 6 | int32_t(string[_index+2] & 0x3f); + } else if ((_string[_index] & 0x10) == 0) { + code = int32_t(_string[_index] & 0xf) << 12 | int32_t(_string[_index+1] & 0x3f) << 6 | int32_t(_string[_index+2] & 0x3f); _index += 3; - } else if ((string[_index] & 0x8) == 0) { - code = int32_t(string[_index] & 0x7) << 18 | int32_t(string[_index+1] & 0x3f) << 12 | int32_t(string[_index+2] & 0x3f) << 6 | int32_t(string[_index+3] & 0x3f); + } else if ((_string[_index] & 0x8) == 0) { + code = int32_t(_string[_index] & 0x7) << 18 | int32_t(_string[_index+1] & 0x3f) << 12 | int32_t(_string[_index+2] & 0x3f) << 6 | int32_t(_string[_index+3] & 0x3f); } - if (_index >= bytes) _index = 0; + if (_index >= _bytes) _index = 0; return code; } + +uint16_t utf8::chars() +{ + return _chars; +} + +uint16_t utf8::bytes() +{ + return _bytes; +} -- cgit v1.2.1