You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stdcxx.apache.org by se...@apache.org on 2006/03/08 02:13:13 UTC
svn commit: r384082 - in /incubator/stdcxx/trunk/tests: include/rw_char.h
src/char.cpp
Author: sebor
Date: Tue Mar 7 17:13:12 2006
New Revision: 384082
URL: http://svn.apache.org/viewcvs?rev=384082&view=rev
Log:
2006-03-07 Martin Sebor <se...@roguewave.com>
* rw_char.h (compare, length, find, copy, move, assign): Outlined
UserTraits<UserChar> members.
(rw_widen): New functions for the wideining of narrow characters
to the three character types used in the test suite (char, wchar_t,
and UserChar).
* char.cpp (compare, length, find, copy, move, assign, rw_widen):
Defined.
Added:
incubator/stdcxx/trunk/tests/src/char.cpp (with props)
Modified:
incubator/stdcxx/trunk/tests/include/rw_char.h
Modified: incubator/stdcxx/trunk/tests/include/rw_char.h
URL: http://svn.apache.org/viewcvs/incubator/stdcxx/trunk/tests/include/rw_char.h?rev=384082&r1=384081&r2=384082&view=diff
==============================================================================
--- incubator/stdcxx/trunk/tests/include/rw_char.h (original)
+++ incubator/stdcxx/trunk/tests/include/rw_char.h Tue Mar 7 17:13:12 2006
@@ -190,6 +190,7 @@
UserTraits<charT>::eof_ = std::char_traits<charT>::eof ();
+_TEST_EXPORT
_RWSTD_SPECIALIZED_CLASS
struct UserTraits<UserChar> // user-defined character traits
{
@@ -218,52 +219,25 @@
}
static int
- compare (const char_type *s1, const char_type *s2, _RWSTD_SIZE_T n) {
- for (_RWSTD_SIZE_T i = 0; i != n; ++i) {
- if (!eq (s1[i], s2[i])) {
- return lt (s1[i], s2[i]) ? -1 : 1;
- }
- }
- return 0;
- }
+ compare (const char_type*, const char_type*, _RWSTD_SIZE_T);
- static _RWSTD_SIZE_T length (const char_type *s) {
- _RWSTD_SIZE_T len = 0;
- for (; !eq (*s++, char_type::eos ()); ++len);
- return len;
- }
+ static _RWSTD_SIZE_T
+ length (const char_type*);
static const char_type*
- find (const char_type *s, _RWSTD_SIZE_T n, const char_type &c) {
- for (; n-- && !eq (*s, c); ++s);
- return eq (*s, c) ? s : 0;
- }
+ find (const char_type*, _RWSTD_SIZE_T, const char_type&);
static char_type*
- copy (char_type *dst, const char_type *src, _RWSTD_SIZE_T n) {
- for (; n--; *dst++ = *src++);
- return dst;
- }
+ copy (char_type*, const char_type*, _RWSTD_SIZE_T);
static char_type*
- move (char_type *s1, const char_type *s2, _RWSTD_SIZE_T n) {
- if (s1 < s2)
- copy (s1, s2, n);
- else if (s2 < s1) {
- s1 += n;
- s2 += n;
- for (_RWSTD_SIZE_T i = 0; i != n; ++i)
- assign (*--s1, *--s2);
- }
- return s1;
- }
+ move (char_type*, const char_type*, _RWSTD_SIZE_T);
- static char_type* assign (char_type *s, _RWSTD_SIZE_T n, char_type c) {
- for (char_type *tmp = s; n--; assign (*tmp++, c));
- return s;
- }
+ static char_type*
+ assign (char_type*, _RWSTD_SIZE_T, char_type);
- static int_type not_eof (const int_type &i) {
+ static int_type
+ not_eof (const int_type &i) {
if (eq_int_type (i, int_type::eof ())) {
const char_type c = { 0, 0 };
return int_type::from_char (c);
@@ -288,5 +262,18 @@
}
};
+
+_TEST_EXPORT
+char* rw_widen (char*, const char*, _RWSTD_SIZE_T = _RWSTD_SIZE_MAX);
+
+#ifndef _RWSTD_WCHAR_T
+
+_TEST_EXPORT
+wchar_t* rw_widen (wchar_t*, const char*, _RWSTD_SIZE_T = _RWSTD_SIZE_MAX);
+
+#endif // _RWSTD_WCHAR_T
+
+_TEST_EXPORT
+UserChar* rw_widen (UserChar*, const char*, _RWSTD_SIZE_T = _RWSTD_SIZE_MAX);
#endif // RW_CHAR_INCLUDED
Added: incubator/stdcxx/trunk/tests/src/char.cpp
URL: http://svn.apache.org/viewcvs/incubator/stdcxx/trunk/tests/src/char.cpp?rev=384082&view=auto
==============================================================================
--- incubator/stdcxx/trunk/tests/src/char.cpp (added)
+++ incubator/stdcxx/trunk/tests/src/char.cpp Tue Mar 7 17:13:12 2006
@@ -0,0 +1,188 @@
+/**************************************************************************
+ *
+ * char.cpp - helpers for user-defined character type and its traits
+ *
+ * $Id$
+ *
+ ***************************************************************************
+ *
+ * Copyright 2006 The Apache Software Foundation or its licensors,
+ * as applicable.
+ *
+ * Copyright 2006 Rogue Wave Software.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ **************************************************************************/
+
+// expand _TEST_EXPORT macros
+#define _RWSTD_TEST_SRC
+#include <rw_char.h>
+
+#include <string.h> // for memcpy()
+
+
+int UserTraits<UserChar>::
+compare (const char_type *s1, const char_type *s2, size_t n)
+{
+ RW_ASSERT (0 == n || s1 && s2);
+
+ for (size_t i = 0; i != n; ++i) {
+ if (!eq (s1[i], s2[i])) {
+ return lt (s1[i], s2[i]) ? -1 : 1;
+ }
+ }
+
+ return 0;
+}
+
+
+size_t UserTraits<UserChar>::
+length (const char_type *s)
+{
+ RW_ASSERT (0 != s);
+
+ size_t len = 0;
+ for (; !eq (*s++, char_type::eos ()); ++len);
+ return len;
+}
+
+
+const UserTraits<UserChar>::char_type*
+UserTraits<UserChar>::
+find (const char_type *s, size_t n, const char_type &c)
+{
+ RW_ASSERT (0 == n || s);
+
+ for (; n-- && !eq (*s, c); ++s);
+
+ return eq (*s, c) ? s : 0;
+}
+
+
+UserTraits<UserChar>::char_type*
+UserTraits<UserChar>::
+copy (char_type *dst, const char_type *src, size_t n)
+{
+ for (; n--; *dst++ = *src++);
+
+ return dst;
+}
+
+
+UserTraits<UserChar>::char_type*
+UserTraits<UserChar>::
+move (char_type *s1, const char_type *s2, size_t n)
+{
+ RW_ASSERT (0 == n || s1 && s2);
+
+ if (s1 < s2)
+ copy (s1, s2, n);
+ else if (s2 < s1) {
+ s1 += n;
+ s2 += n;
+ for (size_t i = 0; i != n; ++i)
+ assign (*--s1, *--s2);
+ }
+ return s1;
+}
+
+
+_TEST_EXPORT
+char*
+rw_widen (char *dst, const char *src, size_t len)
+{
+ // dst must point to an array of at least 1 element
+ RW_ASSERT (0 != dst);
+
+ // allow src to be null
+ if (0 == src)
+ src = "";
+
+ // compute the length of src if not specified
+ if (_RWSTD_SIZE_MAX == len)
+ len = src ? strlen (src) : 0;
+
+ // copy src into dst
+ if (len)
+ memcpy (dst, src, len);
+ else
+ *dst = '\0';
+
+ return dst;
+}
+
+
+#ifndef _RWSTD_WCHAR_T
+
+_TEST_EXPORT
+wchar_t*
+rw_widen (wchar_t *dst, const char *src, size_t len)
+{
+ // dst must point to an array of at least 1 element
+ RW_ASSERT (0 != dst);
+
+ // allow src to be null
+ if (0 == src)
+ src = "";
+
+ // compute the length of src if not specified
+ if (_RWSTD_SIZE_MAX == len)
+ len = src ? strlen (src) : 0;
+
+ // widen src into dst one element at a time
+ for (size_t i = 0; ; ++i) {
+ typedef unsigned char UChar;
+
+ // always NUL-terminate dst
+ dst [i] = wchar_t (UChar (src [i]));
+
+ if (i == len)
+ break;
+ }
+
+ return dst;
+}
+
+#endif // _RWSTD_WCHAR_T
+
+
+_TEST_EXPORT
+UserChar*
+rw_widen (UserChar *dst, const char *src, size_t len)
+{
+ // dst must point to an array of at least 1 element
+ RW_ASSERT (0 != dst);
+
+ // allow src to be null
+ if (0 == src)
+ src = "";
+
+ // compute the length of src if not specified
+ if (_RWSTD_SIZE_MAX == len)
+ len = src ? strlen (src) : 0;
+
+ // widen src into dst one element at a time
+ for (size_t i = 0; ; ++i) {
+ typedef unsigned char UChar;
+
+ // always NUL-terminate dst
+ dst [i].f = 0;
+ dst [i].c = UChar (src [i]);
+
+ if (i == len)
+ break;
+ }
+
+ return dst;
+}
Propchange: incubator/stdcxx/trunk/tests/src/char.cpp
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/stdcxx/trunk/tests/src/char.cpp
------------------------------------------------------------------------------
svn:keywords = Id