10596faeddefbf198de137d5e893708495ab1584cFredrik Roubert// © 2016 and later: Unicode, Inc. and others. 264339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert// License & terms of use: http://www.unicode.org/copyright.html 3e8dd0ddd72048a9097be7a46a47e58068ec84055Andy Heninger/* 4e8dd0ddd72048a9097be7a46a47e58068ec84055Andy Heninger****************************************************************************** 5e8dd0ddd72048a9097be7a46a47e58068ec84055Andy Heninger* 664339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert* Copyright (C) 2016, International Business Machines 7e8dd0ddd72048a9097be7a46a47e58068ec84055Andy Heninger* Corporation and others. All Rights Reserved. 8e8dd0ddd72048a9097be7a46a47e58068ec84055Andy Heninger* 9e8dd0ddd72048a9097be7a46a47e58068ec84055Andy Heninger****************************************************************************** 10e8dd0ddd72048a9097be7a46a47e58068ec84055Andy Heninger* 11e8dd0ddd72048a9097be7a46a47e58068ec84055Andy Heninger* File: cstr.h 12e8dd0ddd72048a9097be7a46a47e58068ec84055Andy Heninger*/ 13e8dd0ddd72048a9097be7a46a47e58068ec84055Andy Heninger 14e8dd0ddd72048a9097be7a46a47e58068ec84055Andy Heninger#ifndef CSTR_H 15e8dd0ddd72048a9097be7a46a47e58068ec84055Andy Heninger#define CSTR_H 16e8dd0ddd72048a9097be7a46a47e58068ec84055Andy Heninger 17e8dd0ddd72048a9097be7a46a47e58068ec84055Andy Heninger#include "unicode/unistr.h" 18e8dd0ddd72048a9097be7a46a47e58068ec84055Andy Heninger#include "unicode/uobject.h" 19e8dd0ddd72048a9097be7a46a47e58068ec84055Andy Heninger#include "unicode/utypes.h" 20e8dd0ddd72048a9097be7a46a47e58068ec84055Andy Heninger 21e8dd0ddd72048a9097be7a46a47e58068ec84055Andy Heninger#include "charstr.h" 22e8dd0ddd72048a9097be7a46a47e58068ec84055Andy Heninger 23e8dd0ddd72048a9097be7a46a47e58068ec84055Andy Heninger/** 2464339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert * ICU-internal class CStr, a small helper class to facilitate passing UnicodeStrings 25e8dd0ddd72048a9097be7a46a47e58068ec84055Andy Heninger * to functions needing (const char *) strings, such as printf(). 26e8dd0ddd72048a9097be7a46a47e58068ec84055Andy Heninger * 27e8dd0ddd72048a9097be7a46a47e58068ec84055Andy Heninger * It is intended primarily for use in debugging or in tests. Uses platform 28e8dd0ddd72048a9097be7a46a47e58068ec84055Andy Heninger * default code page conversion, which will do the best job possible, 29e8dd0ddd72048a9097be7a46a47e58068ec84055Andy Heninger * but may be lossy, depending on the platform. 30e8dd0ddd72048a9097be7a46a47e58068ec84055Andy Heninger * 3164339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert * If no other conversion is available, use invariant conversion and substitue 3264339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert * '?' for non-invariant characters. 3364339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert * 34e8dd0ddd72048a9097be7a46a47e58068ec84055Andy Heninger * Example Usage: 35e8dd0ddd72048a9097be7a46a47e58068ec84055Andy Heninger * UnicodeString s = whatever; 36e8dd0ddd72048a9097be7a46a47e58068ec84055Andy Heninger * printf("%s", CStr(s)()); 37e8dd0ddd72048a9097be7a46a47e58068ec84055Andy Heninger * 38e8dd0ddd72048a9097be7a46a47e58068ec84055Andy Heninger * The explicit call to the CStr() constructor creates a temporary object. 39e8dd0ddd72048a9097be7a46a47e58068ec84055Andy Heninger * Operator () on the temporary object returns a (const char *) pointer. 40e8dd0ddd72048a9097be7a46a47e58068ec84055Andy Heninger * The lifetime of the (const char *) data is that of the temporary object, 41e8dd0ddd72048a9097be7a46a47e58068ec84055Andy Heninger * which works well when passing it as a parameter to another function, such as printf. 42e8dd0ddd72048a9097be7a46a47e58068ec84055Andy Heninger */ 43e8dd0ddd72048a9097be7a46a47e58068ec84055Andy Heninger 44e8dd0ddd72048a9097be7a46a47e58068ec84055Andy HeningerU_NAMESPACE_BEGIN 45e8dd0ddd72048a9097be7a46a47e58068ec84055Andy Heninger 46e8dd0ddd72048a9097be7a46a47e58068ec84055Andy Heningerclass U_COMMON_API CStr : public UMemory { 47e8dd0ddd72048a9097be7a46a47e58068ec84055Andy Heninger public: 48e8dd0ddd72048a9097be7a46a47e58068ec84055Andy Heninger CStr(const UnicodeString &in); 49e8dd0ddd72048a9097be7a46a47e58068ec84055Andy Heninger ~CStr(); 50e8dd0ddd72048a9097be7a46a47e58068ec84055Andy Heninger const char * operator ()() const; 51e8dd0ddd72048a9097be7a46a47e58068ec84055Andy Heninger 52e8dd0ddd72048a9097be7a46a47e58068ec84055Andy Heninger private: 53e8dd0ddd72048a9097be7a46a47e58068ec84055Andy Heninger CharString s; 54e8dd0ddd72048a9097be7a46a47e58068ec84055Andy Heninger CStr(const CStr &other); // Forbid copying of this class. 55e8dd0ddd72048a9097be7a46a47e58068ec84055Andy Heninger CStr &operator =(const CStr &other); // Forbid assignment. 56e8dd0ddd72048a9097be7a46a47e58068ec84055Andy Heninger}; 57e8dd0ddd72048a9097be7a46a47e58068ec84055Andy Heninger 58e8dd0ddd72048a9097be7a46a47e58068ec84055Andy HeningerU_NAMESPACE_END 59e8dd0ddd72048a9097be7a46a47e58068ec84055Andy Heninger 60e8dd0ddd72048a9097be7a46a47e58068ec84055Andy Heninger#endif 61