/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- * vim: sw=2 ts=2 et lcs=trail\:.,tab\:>~ : * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
//////////////////////////////////////////////////////////////////////////////// //// Local Helper Functions
namespace {
/** * Helper function for the UTF-8 locale collations. * * @param aService * The Service that owns the collator used by this collation. * @param aLen1 * The number of bytes in aStr1. * @param aStr1 * The string to be compared against aStr2 as provided by SQLite. It * must be a non-null-terminated char* buffer. * @param aLen2 * The number of bytes in aStr2. * @param aStr2 * The string to be compared against aStr1 as provided by SQLite. It * must be a non-null-terminated char* buffer. * @param aSensitivity * The sorting sensitivity. * @return aStr1 - aStr2. That is, if aStr1 < aStr2, returns a negative number. * If aStr1 > aStr2, returns a positive number. If aStr1 == aStr2, * returns 0.
*/ int localeCollationHelper8(void* aService, int aLen1, constvoid* aStr1, int aLen2, constvoid* aStr2,
Collator::Sensitivity aSensitivity) {
NS_ConvertUTF8toUTF16 str1(static_cast<constchar*>(aStr1), aLen1);
NS_ConvertUTF8toUTF16 str2(static_cast<constchar*>(aStr2), aLen2);
Service* serv = static_cast<Service*>(aService); return serv->localeCompareStrings(str1, str2, aSensitivity);
}
/** * Helper function for the UTF-16 locale collations. * * @param aService * The Service that owns the collator used by this collation. * @param aLen1 * The number of bytes (not characters) in aStr1. * @param aStr1 * The string to be compared against aStr2 as provided by SQLite. It * must be a non-null-terminated char16_t* buffer. * @param aLen2 * The number of bytes (not characters) in aStr2. * @param aStr2 * The string to be compared against aStr1 as provided by SQLite. It * must be a non-null-terminated char16_t* buffer. * @param aSensitivity * The sorting sensitivity. * @return aStr1 - aStr2. That is, if aStr1 < aStr2, returns a negative number. * If aStr1 > aStr2, returns a positive number. If aStr1 == aStr2, * returns 0.
*/ int localeCollationHelper16(void* aService, int aLen1, constvoid* aStr1, int aLen2, constvoid* aStr2,
Collator::Sensitivity aSensitivity) { const char16_t* buf1 = static_cast<const char16_t*>(aStr1); const char16_t* buf2 = static_cast<const char16_t*>(aStr2);
// The second argument to the nsDependentSubstring constructor is exclusive: // It points to the char16_t immediately following the last one in the target // substring. Since aLen1 and aLen2 are in bytes, divide by sizeof(char16_t) // so that the pointer arithmetic is correct.
nsDependentSubstring str1(buf1, buf1 + (aLen1 / sizeof(char16_t)));
nsDependentSubstring str2(buf2, buf2 + (aLen2 / sizeof(char16_t)));
Service* serv = static_cast<Service*>(aService); return serv->localeCompareStrings(str1, str2, aSensitivity);
}
// This struct is used only by registerCollations below, but ISO C++98 forbids // instantiating a template dependent on a locally-defined type. Boo-urns! struct Collations { constchar* zName; int enc; int (*xCompare)(void*, int, constvoid*, int, constvoid*);
};
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.