ICU-13417 Add the internal helper class CharStringByteSink.
This is an implementation of the public ICU ByteSink interface that writes to the ICU internal class CharString.
This commit is contained in:
parent
f779761bff
commit
3e8fb05f7c
@ -11,6 +11,7 @@
|
|||||||
#include "unicode/utf8.h"
|
#include "unicode/utf8.h"
|
||||||
#include "unicode/utf16.h"
|
#include "unicode/utf16.h"
|
||||||
#include "bytesinkutil.h"
|
#include "bytesinkutil.h"
|
||||||
|
#include "charstr.h"
|
||||||
#include "cmemory.h"
|
#include "cmemory.h"
|
||||||
#include "uassert.h"
|
#include "uassert.h"
|
||||||
|
|
||||||
@ -120,4 +121,41 @@ ByteSinkUtil::appendUnchanged(const uint8_t *s, const uint8_t *limit,
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CharStringByteSink::CharStringByteSink(CharString* dest) : dest_(*dest) {
|
||||||
|
}
|
||||||
|
|
||||||
|
CharStringByteSink::~CharStringByteSink() = default;
|
||||||
|
|
||||||
|
void
|
||||||
|
CharStringByteSink::Append(const char* bytes, int32_t n) {
|
||||||
|
UErrorCode status = U_ZERO_ERROR;
|
||||||
|
dest_.append(bytes, n, status);
|
||||||
|
// Any errors are silently ignored.
|
||||||
|
}
|
||||||
|
|
||||||
|
char*
|
||||||
|
CharStringByteSink::GetAppendBuffer(int32_t min_capacity,
|
||||||
|
int32_t desired_capacity_hint,
|
||||||
|
char* scratch,
|
||||||
|
int32_t scratch_capacity,
|
||||||
|
int32_t* result_capacity) {
|
||||||
|
if (min_capacity < 1 || scratch_capacity < min_capacity) {
|
||||||
|
*result_capacity = 0;
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
UErrorCode status = U_ZERO_ERROR;
|
||||||
|
char* result = dest_.getAppendBuffer(
|
||||||
|
min_capacity,
|
||||||
|
desired_capacity_hint,
|
||||||
|
*result_capacity,
|
||||||
|
status);
|
||||||
|
if (U_SUCCESS(status)) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
*result_capacity = scratch_capacity;
|
||||||
|
return scratch;
|
||||||
|
}
|
||||||
|
|
||||||
U_NAMESPACE_END
|
U_NAMESPACE_END
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
U_NAMESPACE_BEGIN
|
U_NAMESPACE_BEGIN
|
||||||
|
|
||||||
class ByteSink;
|
class ByteSink;
|
||||||
|
class CharString;
|
||||||
class Edits;
|
class Edits;
|
||||||
|
|
||||||
class U_COMMON_API ByteSinkUtil {
|
class U_COMMON_API ByteSinkUtil {
|
||||||
@ -58,4 +59,25 @@ private:
|
|||||||
ByteSink &sink, uint32_t options, Edits *edits);
|
ByteSink &sink, uint32_t options, Edits *edits);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class CharStringByteSink : public ByteSink {
|
||||||
|
public:
|
||||||
|
CharStringByteSink(CharString* dest);
|
||||||
|
~CharStringByteSink() override;
|
||||||
|
|
||||||
|
CharStringByteSink() = delete;
|
||||||
|
CharStringByteSink(const CharStringByteSink&) = delete;
|
||||||
|
CharStringByteSink& operator=(const CharStringByteSink&) = delete;
|
||||||
|
|
||||||
|
void Append(const char* bytes, int32_t n) override;
|
||||||
|
|
||||||
|
char* GetAppendBuffer(int32_t min_capacity,
|
||||||
|
int32_t desired_capacity_hint,
|
||||||
|
char* scratch,
|
||||||
|
int32_t scratch_capacity,
|
||||||
|
int32_t* result_capacity) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
CharString& dest_;
|
||||||
|
};
|
||||||
|
|
||||||
U_NAMESPACE_END
|
U_NAMESPACE_END
|
||||||
|
Loading…
Reference in New Issue
Block a user