[DEV] add capabilities at the unichar element
This commit is contained in:
parent
7a8b994ca9
commit
65c1c56edc
18
etk/Buffer.h
18
etk/Buffer.h
@ -282,14 +282,24 @@ namespace etk
|
|||||||
* @param[in] _items Data that might be inserted.
|
* @param[in] _items Data that might be inserted.
|
||||||
*/
|
*/
|
||||||
void Insert(int32_t _pos, etk::Vector<int8_t>& _items)
|
void Insert(int32_t _pos, etk::Vector<int8_t>& _items)
|
||||||
|
{
|
||||||
|
Insert(_pos, _items.DataPointer(), _items.Size());
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @brief Insert data in the buffer
|
||||||
|
* @param[in] _pos Position where data might be inserted
|
||||||
|
* @param[in] _items Data that might be inserted. (no need of '\0')
|
||||||
|
* @param[in] _nbElement number of element to insert
|
||||||
|
*/
|
||||||
|
void Insert(int32_t _pos, int8_t* _items, int32_t _nbElement)
|
||||||
{
|
{
|
||||||
if( _pos > Size()
|
if( _pos > Size()
|
||||||
|| _pos < 0 ) {
|
|| _pos < 0 ) {
|
||||||
TK_ERROR("Request higher than buffer size : pos=" << _pos << " bufferSize="<<Size());
|
TK_ERROR("Request higher than buffer size : pos=" << _pos << " bufferSize="<<Size());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if( _items.Size() > GapSize() ) {
|
if(_nbElement > GapSize()) {
|
||||||
if (false == GapResize(_pos, GAP_SIZE_MIN + _items.Size()) ) {
|
if (false == GapResize(_pos, GAP_SIZE_MIN + _nbElement) ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -297,10 +307,10 @@ namespace etk
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for(esize_t iii=0; iii<_items.Size(); iii++) {
|
for(esize_t iii=0; iii<_nbElement; iii++) {
|
||||||
m_data[m_gapStart+iii] = _items[iii];
|
m_data[m_gapStart+iii] = _items[iii];
|
||||||
}
|
}
|
||||||
m_gapStart += _items.Size();
|
m_gapStart += _nbElement;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* @brief Replace one element in the buffer
|
* @brief Replace one element in the buffer
|
||||||
|
@ -269,3 +269,27 @@ int8_t etk::UniChar::SetUtf8(const char* _input)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int8_t etk::UniChar::TheoricUTF8Len(const char _input)
|
||||||
|
{
|
||||||
|
if((_input&0x80) == 0x00 ) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if((_input&0xE0) == 0xC0) {
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
if((_input&0xF0) == 0xE0) {
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
if((_input&0xF8) == 0xF0) {
|
||||||
|
return 4;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool etk::UniChar::TheoricUTF8First(const char _input)
|
||||||
|
{
|
||||||
|
if((_input&0x80) == 0x80 ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
@ -178,6 +178,19 @@ namespace etk
|
|||||||
int8_t GetUtf8(char _output[5]) const;
|
int8_t GetUtf8(char _output[5]) const;
|
||||||
//etk::Vector<int8_t> GetUtf8(void) const;
|
//etk::Vector<int8_t> GetUtf8(void) const;
|
||||||
int8_t SetUtf8(const char* _input);
|
int8_t SetUtf8(const char* _input);
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* @brief Get the size of an utf8 char with his first char.
|
||||||
|
* @param[in] _input Char to parse
|
||||||
|
* @return number of char needed
|
||||||
|
*/
|
||||||
|
static int8_t TheoricUTF8Len(const char _input);
|
||||||
|
/**
|
||||||
|
* @brief When parsing a string in a reverse mode, we need to know if we get the first char
|
||||||
|
* @param[in] _input Char to parse.
|
||||||
|
* @return true if it was the first char.
|
||||||
|
*/
|
||||||
|
static bool TheoricUTF8First(const char _input);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user