00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
#include "field_impl.h"
00028
#include "id3/utils.h"
00029
#include "io_helpers.h"
00030
00031
using namespace dami;
00032
00049 size_t
ID3_FieldImpl::Set(
const unicode_t* data)
00050 {
00051 size_t size = 0;
00052
if (this->
GetType() ==
ID3FTY_TEXTSTRING &&
00053 this->
GetEncoding() ==
ID3TE_UNICODE && data)
00054 {
00055 String text((
const char*) data, ucslen(data) * 2);
00056 size = this->SetText_i(text);
00057 }
00058
return size;
00059 }
00060
00061 size_t
ID3_FieldImpl::Add(
const unicode_t* data)
00062 {
00063 size_t size = 0;
00064
if (this->
GetType() ==
ID3FTY_TEXTSTRING &&
00065 this->
GetEncoding() ==
ID3TE_UNICODE)
00066 {
00067 String text((
const char*) data, ucslen(data) * 2);
00068 size = this->AddText_i(text);
00069 }
00070
return size;
00071 }
00072
00093 size_t
ID3_FieldImpl::Get(unicode_t *buffer, size_t maxLength)
const
00094
{
00095 size_t length = 0;
00096
if (this->
GetType() ==
ID3FTY_TEXTSTRING &&
00097 this->
GetEncoding() ==
ID3TE_UNICODE &&
00098 buffer !=
NULL && maxLength > 0)
00099 {
00100 size_t size = this->
Size();
00101 length =
dami::min(maxLength, size);
00102 ::memcpy((
void *)buffer, (
void *)_text.data(), length * 2);
00103
if (length < maxLength)
00104 {
00105 buffer[length] =
NULL_UNICODE;
00106 }
00107 }
00108
return length;
00109 }
00110
00111 const unicode_t*
ID3_FieldImpl::GetRawUnicodeText()
const
00112
{
00113
const unicode_t* text =
NULL;
00114
if (this->
GetType() ==
ID3FTY_TEXTSTRING &&
00115 this->
GetEncoding() ==
ID3TE_UNICODE)
00116 {
00117 text = (
unicode_t *)_text.data();
00118 }
00119
return text;
00120 }
00121
00122 const unicode_t*
ID3_FieldImpl::GetRawUnicodeTextItem(size_t index)
const
00123
{
00124
const unicode_t* text =
NULL;
00125
if (this->
GetType() ==
ID3FTY_TEXTSTRING &&
00126 this->
GetEncoding() ==
ID3TE_UNICODE &&
00127 index < this->
GetNumTextItems())
00128 {
00129 String unicode = _text +
'\0' +
'\0';
00130 text = (
unicode_t *) unicode.data();
00131
for (size_t i = 0; i < index; ++i)
00132 {
00133 text += ucslen(text) + 1;
00134 }
00135 }
00136
return text;
00137 }
00138
00139 size_t
ID3_FieldImpl::Get(unicode_t *buffer, size_t maxLength, size_t itemNum)
const
00140
{
00141 size_t length = 0;
00142 size_t total_items = this->
GetNumTextItems();
00143
if (this->
GetType() ==
ID3FTY_TEXTSTRING &&
00144 this->
GetEncoding() ==
ID3TE_UNICODE &&
00145 buffer !=
NULL && maxLength > 0 && itemNum < total_items)
00146 {
00147
const unicode_t* text = this->
GetRawUnicodeTextItem(itemNum);
00148
if (
NULL != text)
00149 {
00150 size_t length =
dami::min(maxLength, ucslen(text));
00151 ::memcpy(buffer, text, length * 2);
00152
if (length < maxLength)
00153 {
00154 buffer[length] =
NULL_UNICODE;
00155 }
00156 }
00157 }
00158
00159
return length;
00160 }
00161
00162