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 2005/09/05 22:57:48 UTC
svn commit: r278837 [4/4] - in /incubator/stdcxx/trunk: etc/config/ tests/
tests/include/ tests/localization/ tests/src/
Added: incubator/stdcxx/trunk/tests/src/valcmp.cpp
URL: http://svn.apache.org/viewcvs/incubator/stdcxx/trunk/tests/src/valcmp.cpp?rev=278837&view=auto
==============================================================================
--- incubator/stdcxx/trunk/tests/src/valcmp.cpp (added)
+++ incubator/stdcxx/trunk/tests/src/valcmp.cpp Mon Sep 5 13:57:44 2005
@@ -0,0 +1,697 @@
+/************************************************************************
+ *
+ * valcmp.cpp - definitions of the rw_valcmp() family of helper functions
+ *
+ * $Id$
+ *
+ ************************************************************************
+ *
+ * Copyright (c) 1994-2005 Quovadx, Inc., acting through its Rogue Wave
+ * Software division. 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 <valcmp.h>
+
+#include <stdio.h> // for fprintf, stderr
+#include <stdlib.h> // for abort
+#include <string.h> // for memcmp
+
+
+typedef unsigned char UChar;
+
+
+static const UChar
+rw_upper [] = {
+
+#if 'A' == 0x41
+
+ // basic ASCII:
+ // .0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .a .b .c .d .e .f
+ // --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---
+ // NUL SOH STX ETX EOT ENQ ACK BEL BS TAB LF VT FF CR SO SI
+ /* 0. */ "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
+ // DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US
+ /* 1. */ "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"
+ // SPC ! " # $ % ' ' ( ) * + , - . /
+ /* 2. */ "\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f"
+ // 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
+ /* 3. */ "\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f"
+ // A B C D E F G H I J K L M N O
+ /* 4. */ "\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f"
+ // P Q R S T U V W X Y Z [ \ ] ^ _
+ /* 5. */ "\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f"
+ // ` a b c d e f g h i j k l m n o
+ /* 6. */ "\x60\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f"
+ // p q r s t u v w x y z { | } ~ DEL
+ /* 7. */ "\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x7b\x7c\x7d\x7e\x7f"
+
+ // extended ASCII:
+ /* 8. */ "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
+ /* 9. */ "\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
+ /* a. */ "\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf"
+ /* b. */ "\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf"
+ /* c. */ "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf"
+ /* d. */ "\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf"
+ /* e. */ "\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef"
+ /* f. */ "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"
+
+#elif 'A' == 0xc1
+
+ // EBCDIC:
+ // .0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .a .b .c .d .e .f
+ // --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---
+ // NUL SOH STX ETX PF HT LC DEL SMM VT FF CR SO SI
+ /* 0. */ "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
+ // DLE DC1 DC2 TM RES NL BS IL CAN EM CC CU1 IFS IGS IRS IUS
+ /* 1. */ "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"
+ // DS SOS FS BYP LF ETB ESC SM CU2 ENQ ACK BEL
+ /* 2. */ "\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f"
+ // SYN PN RS UC EOT CU3 DC4 NAK SUB
+ /* 3. */ "\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f"
+ // SP ct. . < ( + |
+ /* 4. */ "\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f"
+ // & ! $ * ) ; ~
+ /* 5. */ "\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f"
+ // - / , % _ > ?
+ /* 6. */ "\x60\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f"
+ // : # @ ' = "
+ /* 7. */ "\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f"
+ // a b c d e f g h i
+ /* 8. */ "\x80\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\x8a\x8b\x8c\x8d\x8e\x8f"
+ // j k l m n o p q r
+ /* 9. */ "\x90\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\x9a\x9b\x9c\x9d\x9e\x9f"
+ // s t u v w x y z
+ /* a. */ "\xa0\xa1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xaa\xab\xac\xad\xae\xaf"
+ // `
+ /* b. */ "\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf"
+ // A B C D E F G H I
+ /* c. */ "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf"
+ // J K L M N O P Q R
+ /* d. */ "\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf"
+ // S T U V W X Y Z
+ /* e. */ "\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef"
+ // 0 1 2 3 4 5 6 7 8 9
+ /* f. */ "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"
+
+#else // 'A' != 0x41 && 'A' != 0xc1
+# error unknown character set (neither ASCII nor EBCDIC)
+#endif // ASCII or EBCDIC
+
+};
+
+
+// returns 1 iff all size bytes of the object pointed to by buf are 0
+static int
+rw_iszero (const void *buf, _RWSTD_SIZE_T size)
+{
+ for (_RWSTD_SIZE_T i = 0; i != size; ++i)
+ if (_RWSTD_STATIC_CAST (const UChar*, buf)[i])
+ return 0;
+
+ return 1;
+}
+
+
+// compares two objects of equal size
+static int
+rw_cmpx (const void *buf1,
+ const void *buf2,
+ _RWSTD_SIZE_T nelems,
+ _RWSTD_SIZE_T size,
+ int flags = 0)
+{
+ const UChar *p1 = _RWSTD_STATIC_CAST (const UChar*, buf1);
+ const UChar *p2 = _RWSTD_STATIC_CAST (const UChar*, buf2);
+
+ int ret;
+
+ for ( ; nelems; p1 += size, p2 += size, --nelems) {
+
+ ret = memcmp (p1, p2, size);
+
+ if (flags & CMP_NULTERM) {
+
+ const int zero1 = rw_iszero (p1, size);
+ const int zero2 = rw_iszero (p2, size);
+
+ if (zero1 || zero2) {
+ ret = zero1 - zero2;
+ break;
+ }
+ }
+
+ if (ret && (flags & CMP_NOCASE)) {
+ // FIXME: implement
+ fprintf (stderr,
+ "%s:%d: case insensitive comparison not implemented\n",
+ __FILE__, __LINE__);
+ abort ();
+ }
+ }
+
+ if (flags & CMP_RETOFF) {
+ // FIXME: implement
+ fprintf (stderr,
+ "%s:%d: returning offset not implemented\n",
+ __FILE__, __LINE__);
+ abort ();
+ }
+
+ return ret < 0 ? -1 : ret ? +1 : 0;
+}
+
+
+// compares two byte arrays
+static int
+rw_cmp1 (const void *buf1,
+ const void *buf2,
+ _RWSTD_SIZE_T nelems,
+ int flags = 0)
+{
+#ifdef _RWSTD_UINT8_T
+
+ typedef _RWSTD_UINT8_T UI8T;
+
+ if (0 == flags) {
+ const int ret = memcmp (buf1, buf2, nelems);
+ return ret < 0 ? -1 : ret ? +1 : 0;
+ }
+
+ if (CMP_NULTERM == flags) {
+ const int ret =
+ strncmp (_RWSTD_STATIC_CAST (const char*, buf1),
+ _RWSTD_STATIC_CAST (const char*, buf2),
+ nelems);
+ return ret < 0 ? -1 : ret ? +1 : 0;
+ }
+
+ int ret = 0;
+ int inx = 0;
+
+ const UI8T *pi1 = _RWSTD_STATIC_CAST (const UI8T*, buf1);
+ const UI8T *pi2 = _RWSTD_STATIC_CAST (const UI8T*, buf2);
+
+ for (; nelems; ++pi1, ++pi2, --nelems, ++inx) {
+
+ const UI8T ui1 = *pi1;
+ const UI8T ui2 = *pi2;
+
+ if (flags & CMP_NULTERM) {
+
+ if (0 == ui1) {
+ ret = ui2 ? -1 : 0;
+ break;
+ }
+
+ if (0 == ui2) {
+ ret = +1;
+ break;
+ }
+ }
+
+ if (ui1 != ui2) {
+ if (flags & CMP_NOCASE) {
+ if (rw_upper [ui1] != rw_upper [ui2]) {
+ ret = rw_upper [ui1] < rw_upper [ui2] ? -1 : +1;
+ break;
+ }
+ }
+ else {
+ ret = ui1 < ui2 ? -1 : +1;
+ break;
+ }
+ }
+ }
+
+ if (CMP_RETOFF & flags) {
+ ret = _RWSTD_STATIC_CAST (_RWSTD_SIZE_T, inx) < nelems ? inx : -1;
+ }
+
+ return ret;
+
+#else // if !defined (_RWSTD_UINT8_T)
+# error _RWSTD_UINT8_T not #defined (configuration problem?)
+#endif // _RWSTD_UINT8_T
+
+}
+
+
+// compares two arrays of objects each 16 bits in size
+static int
+rw_cmp2 (const void *buf1,
+ const void *buf2,
+ _RWSTD_SIZE_T nelems,
+ int flags = 0)
+{
+#ifdef _RWSTD_UINT16_T
+
+ typedef _RWSTD_UINT16_T UI16T;
+
+ int ret = 0;
+ int inx = 0;
+
+ const UI16T *pi1 = _RWSTD_STATIC_CAST (const UI16T*, buf1);
+ const UI16T *pi2 = _RWSTD_STATIC_CAST (const UI16T*, buf2);
+
+ for (; nelems; ++pi1, ++pi2, --nelems) {
+
+ const UI16T ui1 = *pi1;
+ const UI16T ui2 = *pi2;
+
+ if (flags & CMP_NULTERM) {
+
+ if (0 == ui1) {
+ ret = ui2 ? -1 : 0;
+ break;
+ }
+
+ if (0 == ui2) {
+ ret = +1;
+ break;
+ }
+ }
+
+ if (ui1 != ui2) {
+ if (flags & CMP_NOCASE) {
+ if (_RWSTD_UCHAR_MAX < ui1 || _RWSTD_UCHAR_MAX < ui2) {
+ ret = ui1 < ui2 ? -1 : +1;
+ break;
+ }
+ else if (rw_upper [ui1] != rw_upper [ui2]) {
+ ret = rw_upper [ui1] < rw_upper [ui2] ? -1 : +1;
+ break;
+ }
+ }
+ else {
+ ret = ui1 < ui2 ? -1 : +1;
+ break;
+ }
+ }
+ }
+
+ if (CMP_RETOFF & flags) {
+ ret = _RWSTD_STATIC_CAST (_RWSTD_SIZE_T, inx) < nelems ? inx : -1;
+ }
+
+ return ret;
+
+#else // if !defined (_RWSTD_UINT16_T)
+
+ return rw_cmpx (buf1, buf2, nelems, 2, flags);
+
+#endif // _RWSTD_UINT16_T
+}
+
+
+// compares two arrays of objects each 32 bits in size
+static int
+rw_cmp4 (const void *buf1,
+ const void *buf2,
+ _RWSTD_SIZE_T nelems,
+ int flags = 0)
+{
+#ifdef _RWSTD_UINT32_T
+
+ typedef _RWSTD_UINT32_T UI32T;
+
+ int ret = 0;
+ int inx = 0;
+
+ const UI32T *pi1 = _RWSTD_STATIC_CAST (const UI32T*, buf1);
+ const UI32T *pi2 = _RWSTD_STATIC_CAST (const UI32T*, buf2);
+
+ for (; nelems; ++pi1, ++pi2, --nelems) {
+
+ const UI32T ui1 = *pi1;
+ const UI32T ui2 = *pi2;
+
+ if (flags & CMP_NULTERM) {
+
+ if (0 == ui1) {
+ ret = ui2 ? -1 : 0;
+ break;
+ }
+
+ if (0 == ui2) {
+ ret = +1;
+ break;
+ }
+ }
+
+ if (ui1 != ui2) {
+ if (flags & CMP_NOCASE) {
+ if (_RWSTD_UCHAR_MAX < ui1 || _RWSTD_UCHAR_MAX < ui2) {
+ ret = ui1 < ui2 ? -1 : +1;
+ break;
+ }
+ else if (rw_upper [ui1] != rw_upper [ui2]) {
+ ret = rw_upper [ui1] < rw_upper [ui2] ? -1 : +1;
+ break;
+ }
+ }
+ else {
+ ret = ui1 < ui2 ? -1 : +1;
+ break;
+ }
+ }
+ }
+
+ if (CMP_RETOFF & flags) {
+ ret = _RWSTD_STATIC_CAST (_RWSTD_SIZE_T, inx) < nelems ? inx : -1;
+ }
+
+ return ret;
+
+#else // if !defined (_RWSTD_UINT32_T)
+
+ return rw_cmpx (buf1, buf2, nelems, 4, flags);
+
+#endif // _RWSTD_UINT32_T
+}
+
+
+// compares two arrays of objects each 64 bits in size
+static int
+rw_cmp8 (const void *buf1,
+ const void *buf2,
+ _RWSTD_SIZE_T nelems,
+ int flags = 0)
+{
+#ifdef _RWSTD_UINT64_T
+
+ typedef _RWSTD_UINT64_T UI64T;
+
+ int ret = 0;
+ int inx = 0;
+
+ const UI64T *pi1 = _RWSTD_STATIC_CAST (const UI64T*, buf1);
+ const UI64T *pi2 = _RWSTD_STATIC_CAST (const UI64T*, buf2);
+
+ for (; nelems; ++pi1, ++pi2, --nelems) {
+
+ const UI64T ui1 = *pi1;
+ const UI64T ui2 = *pi2;
+
+ if (flags & CMP_NULTERM) {
+
+ if (0 == ui1) {
+ ret = ui2 ? -1 : 0;
+ break;
+ }
+
+ if (0 == ui2) {
+ ret = +1;
+ break;
+ }
+ }
+
+ if (ui1 != ui2) {
+ if (flags & CMP_NOCASE) {
+ if (_RWSTD_UCHAR_MAX < ui1 || _RWSTD_UCHAR_MAX < ui2) {
+ ret = ui1 < ui2 ? -1 : +1;
+ break;
+ }
+ else if (rw_upper [ui1] != rw_upper [ui2]) {
+ ret = rw_upper [ui1] < rw_upper [ui2] ? -1 : +1;
+ break;
+ }
+ }
+ else {
+ ret = ui1 < ui2 ? -1 : +1;
+ break;
+ }
+ }
+ }
+
+ if (CMP_RETOFF & flags) {
+ ret = _RWSTD_STATIC_CAST (_RWSTD_SIZE_T, inx) < nelems ? inx : -1;
+ }
+
+ return ret;
+
+#else // if !defined (_RWSTD_UINT64_T)
+
+ return rw_cmpx (buf1, buf2, nelems, 8, flags);
+
+#endif // _RWSTD_UINT64_T
+}
+
+
+// compares two arrays of objects of unequal size
+static int
+rw_cmpxx (const void* buf1,
+ const void* buf2,
+ _RWSTD_SIZE_T nelems,
+ _RWSTD_SIZE_T size1,
+ _RWSTD_SIZE_T size2,
+ int flags)
+{
+ int ret = 0;
+ int inx = 0;
+
+ for (; nelems; --nelems, ++inx) {
+
+#ifdef _RWSTD_UINT64_T
+
+ _RWSTD_UINT64_T ui1;
+ _RWSTD_UINT64_T ui2;
+
+#else // if !defined (_RWSTD_UINT64_T)
+
+ _RWSTD_SIZE_T ui1;
+ _RWSTD_SIZE_T ui2;
+
+#endif // _RWSTD_UINT64_T
+
+ switch (size1) {
+
+#ifdef _RWSTD_UINT8_T
+
+ case 1: {
+ const _RWSTD_UINT8_T* ptr =
+ _RWSTD_STATIC_CAST (const _RWSTD_UINT8_T*, buf1);
+ ui1 = *ptr++;
+ buf1 = ptr;
+ break;
+ }
+
+#endif // _RWSTD_UINT8_T
+
+#ifdef _RWSTD_UINT16_T
+
+ case 2: {
+ const _RWSTD_UINT16_T* ptr =
+ _RWSTD_STATIC_CAST (const _RWSTD_UINT16_T*, buf1);
+ ui1 = *ptr++;
+ buf1 = ptr;
+ break;
+ }
+
+#endif // _RWSTD_UINT16_T
+
+#ifdef _RWSTD_UINT32_T
+
+ case 4: {
+ const _RWSTD_UINT32_T* ptr =
+ _RWSTD_STATIC_CAST (const _RWSTD_UINT32_T*, buf1);
+ ui1 = *ptr++;
+ buf1 = ptr;
+ break;
+ }
+
+#endif // _RWSTD_UINT32_T
+
+#ifdef _RWSTD_UINT64_T
+
+ case 8: {
+ const _RWSTD_UINT64_T* ptr =
+ _RWSTD_STATIC_CAST (const _RWSTD_UINT64_T*, buf1);
+ ui1 = *ptr++;
+ buf1 = ptr;
+ break;
+ }
+
+#endif // _RWSTD_UINT64_T
+
+ default:
+ fprintf (stderr,
+ "%s:%d: comparison of objects %u and %u bytes in size "
+ "not implemented\n", __FILE__, __LINE__, size1, size2);
+ abort ();
+ }
+
+ switch (size2) {
+
+#ifdef _RWSTD_UINT8_T
+
+ case 1: {
+ const _RWSTD_UINT8_T* ptr =
+ _RWSTD_STATIC_CAST (const _RWSTD_UINT8_T*, buf2);
+ ui2 = *ptr++;
+ buf2 = ptr;
+ break;
+ }
+
+#endif // _RWSTD_UINT8_T
+
+#ifdef _RWSTD_UINT16_T
+
+ case 2: {
+ const _RWSTD_UINT16_T* ptr =
+ _RWSTD_STATIC_CAST (const _RWSTD_UINT16_T*, buf2);
+ ui2 = *ptr++;
+ buf2 = ptr;
+ break;
+ }
+
+#endif // _RWSTD_UINT16_T
+
+#ifdef _RWSTD_UINT32_T
+
+ case 4: {
+ const _RWSTD_UINT32_T* ptr =
+ _RWSTD_STATIC_CAST (const _RWSTD_UINT32_T*, buf2);
+ ui2 = *ptr++;
+ buf2 = ptr;
+ break;
+ }
+
+#endif // _RWSTD_UINT32_T
+
+#ifdef _RWSTD_UINT64_T
+
+ case 8: {
+ const _RWSTD_UINT64_T* ptr =
+ _RWSTD_STATIC_CAST (const _RWSTD_UINT64_T*, buf2);
+ ui2 = *ptr++;
+ buf2 = ptr;
+ break;
+ }
+
+#endif // _RWSTD_UINT64_T
+
+ default:
+ fprintf (stderr,
+ "%s:%d: comparison of objects %u and %u bytes in size "
+ "not implemented\n", __FILE__, __LINE__, size1, size2);
+ abort ();
+ }
+
+ if (flags & CMP_NULTERM) {
+
+ if (0 == ui1) {
+ ret = ui2 ? -1 : 0;
+ break;
+ }
+
+ if (0 == ui2) {
+ ret = +1;
+ break;
+ }
+ }
+
+ if (ui1 != ui2) {
+ if (flags & CMP_NOCASE) {
+ if (_RWSTD_UCHAR_MAX < ui1 || _RWSTD_UCHAR_MAX < ui2) {
+ ret = ui1 < ui2 ? -1 : +1;
+ break;
+ }
+ else if (rw_upper [ui1] != rw_upper [ui2]) {
+ ret = rw_upper [ui1] < rw_upper [ui2] ? -1 : +1;
+ break;
+ }
+ }
+ else {
+ ret = ui1 < ui2 ? -1 : +1;
+ break;
+ }
+ }
+ }
+
+ if (CMP_RETOFF & flags) {
+ ret = _RWSTD_STATIC_CAST (_RWSTD_SIZE_T, inx) < nelems ? inx : -1;
+ }
+
+ return ret;
+}
+
+
+_TEST_EXPORT int
+rw_valcmp (const void* buf1,
+ const void* buf2,
+ _RWSTD_SIZE_T nelems,
+ _RWSTD_SIZE_T size1,
+ _RWSTD_SIZE_T size2,
+ int flags /* = 0 */)
+{
+ if (size1 == size2) {
+
+ switch (size1) {
+ case 1: return rw_cmp1 (buf1, buf2, nelems, flags);
+ case 2: return rw_cmp2 (buf1, buf2, nelems, flags);
+ case 4: return rw_cmp4 (buf1, buf2, nelems, flags);
+ case 8: return rw_cmp8 (buf1, buf2, nelems, flags);
+ }
+
+ return rw_cmpx (buf1, buf2, nelems, size1, flags);
+ }
+
+ return rw_cmpxx (buf1, buf2, nelems, size1, size2, flags);
+}
+
+
+_TEST_EXPORT int
+rw_strncmp (const char* str1,
+ const char* str2,
+ _RWSTD_SIZE_T nelems /* = _RWSTD_SIZE_MAX */,
+ int flags /* = CMP_NULTERM */)
+{
+ return rw_valcmp (str1, str2, nelems, 1, 1, flags);
+}
+
+
+#ifndef _RWSTD_NO_WCHAR_T
+
+_TEST_EXPORT int
+rw_strncmp (const char* str1,
+ const wchar_t* str2,
+ _RWSTD_SIZE_T nelems /* = _RWSTD_SIZE_MAX */,
+ int flags /* = CMP_NULTERM */)
+{
+ return rw_valcmp (str1, str2, nelems, 1, sizeof (wchar_t), flags);
+}
+
+
+_TEST_EXPORT int
+rw_strncmp (const wchar_t* str1,
+ const char* str2,
+ _RWSTD_SIZE_T nelems /* = _RWSTD_SIZE_MAX */,
+ int flags /* = CMP_NULTERM */)
+{
+ return rw_valcmp (str1, str2, nelems, sizeof (wchar_t), 1, flags);
+}
+
+
+_TEST_EXPORT int
+rw_strncmp (const wchar_t* str1,
+ const wchar_t* str2,
+ _RWSTD_SIZE_T nelems /* = _RWSTD_SIZE_MAX */,
+ int flags /* = CMP_NULTERM */)
+{
+ return rw_valcmp (str1, str2, nelems,
+ sizeof (wchar_t), sizeof (wchar_t), flags);
+}
+
+#endif // _RWSTD_NO_WCHAR_T
Propchange: incubator/stdcxx/trunk/tests/src/valcmp.cpp
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/stdcxx/trunk/tests/src/valcmp.cpp
------------------------------------------------------------------------------
svn:keywords = Id