1/*****************************************************************************/
2// Copyright 2006-2007 Adobe Systems Incorporated
3// All Rights Reserved.
4//
5// NOTICE:  Adobe permits you to use, modify, and distribute this file in
6// accordance with the terms of the Adobe license agreement accompanying it.
7/*****************************************************************************/
8
9/* $Id: //mondo/dng_sdk_1_4/dng_sdk/source/dng_string.h#2 $ */
10/* $DateTime: 2012/07/31 22:04:34 $ */
11/* $Change: 840853 $ */
12/* $Author: tknoll $ */
13
14/** \file
15 * Text string representation.
16 */
17
18/*****************************************************************************/
19
20#ifndef __dng_string__
21#define __dng_string__
22
23/*****************************************************************************/
24
25#include "dng_types.h"
26#include "dng_memory.h"
27
28/*****************************************************************************/
29
30class dng_string
31	{
32
33	private:
34
35		// Always stored internally as a UTF-8 encoded string.
36
37		dng_memory_data fData;
38
39	public:
40
41		dng_string ();
42
43		dng_string (const dng_string &s);
44
45		dng_string & operator= (const dng_string &s);
46
47		~dng_string ();
48
49		const char * Get () const;
50
51		bool IsASCII () const;
52
53		void Set (const char *s);
54
55		void Set_ASCII (const char *s);
56
57		void Set_UTF8 (const char *s);
58
59		uint32 Get_SystemEncoding (dng_memory_data &buffer) const;
60
61		void Set_SystemEncoding (const char *s);
62
63		bool ValidSystemEncoding () const;
64
65		void Set_JIS_X208_1990 (const char *s);
66
67		static uint32 DecodeUTF8 (const char *&s,
68								  uint32 maxBytes = 6,
69								  bool *isValid = NULL);
70
71		static bool IsUTF8 (const char *s);
72
73		void Set_UTF8_or_System (const char *s);
74
75		uint32 Get_UTF16 (dng_memory_data &buffer) const;
76
77		void Set_UTF16 (const uint16 *s);
78
79		void Clear ();
80
81		void Truncate (uint32 maxBytes);
82
83		bool TrimTrailingBlanks ();
84
85		bool TrimLeadingBlanks ();
86
87		bool IsEmpty () const;
88
89		bool NotEmpty () const
90			{
91			return !IsEmpty ();
92			}
93
94		uint32 Length () const;
95
96		bool operator== (const dng_string &s) const;
97
98		bool operator!= (const dng_string &s) const
99			{
100			return !(*this == s);
101			}
102
103		// A utility for doing case insensitive comparisons on strings...
104
105		static bool Matches (const char *t,
106							 const char *s,
107							 bool case_sensitive = false);
108
109		// ...wrapped up for use with dng_string.
110
111		bool Matches (const char *s,
112					  bool case_sensitive = false) const;
113
114		bool StartsWith (const char *s,
115						 bool case_sensitive = false) const;
116
117		bool EndsWith (const char *s,
118					   bool case_sensitive = false) const;
119
120		bool Contains (const char *s,
121					   bool case_sensitive = false,
122					   int32 *match_offset = NULL) const;
123
124		bool Replace (const char *old_string,
125					  const char *new_string,
126					  bool case_sensitive = true);
127
128		bool TrimLeading (const char *s,
129						  bool case_sensitive = false);
130
131		void Append (const char *s);
132
133		void SetUppercase ();
134
135		void SetLowercase ();
136
137		void SetLineEndings (char ending);
138
139		void SetLineEndingsToNewLines ()
140			{
141			SetLineEndings ('\n');
142			}
143
144		void SetLineEndingsToReturns ()
145			{
146			SetLineEndings ('\r');
147			}
148
149		void StripLowASCII ();
150
151		void ForceASCII ();
152
153		int32 Compare (const dng_string &s) const;
154
155		// A utility to convert fields of numbers into comma separated numbers.
156
157		void NormalizeAsCommaSeparatedNumbers ();
158
159	};
160
161/*****************************************************************************/
162
163#endif
164
165/*****************************************************************************/
166