summaryrefslogtreecommitdiffstats
path: root/intl/uconv/util/nsUCConstructors.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'intl/uconv/util/nsUCConstructors.cpp')
-rw-r--r--intl/uconv/util/nsUCConstructors.cpp134
1 files changed, 134 insertions, 0 deletions
diff --git a/intl/uconv/util/nsUCConstructors.cpp b/intl/uconv/util/nsUCConstructors.cpp
new file mode 100644
index 000000000..e8ab5f89d
--- /dev/null
+++ b/intl/uconv/util/nsUCConstructors.cpp
@@ -0,0 +1,134 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/* 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/. */
+
+#include "nsUCSupport.h"
+#include "nsUCConstructors.h"
+
+template<class T>
+inline nsresult StabilizedQueryInterface(T* aNewObject,
+ REFNSIID aIID,
+ void **aResult)
+{
+ NS_ADDREF(aNewObject);
+ nsresult rv = aNewObject->QueryInterface(aIID, aResult);
+ NS_RELEASE(aNewObject);
+ return rv;
+}
+
+nsresult
+CreateMultiTableDecoder(int32_t aTableCount, const uRange * aRangeArray,
+ uScanClassID * aScanClassArray,
+ uMappingTable ** aMappingTable,
+ uint32_t aMaxLengthFactor,
+ nsISupports* aOuter,
+ REFNSIID aIID,
+ void** aResult)
+{
+
+ if (aOuter)
+ return NS_ERROR_NO_AGGREGATION;
+
+ nsMultiTableDecoderSupport* decoder =
+ new nsMultiTableDecoderSupport(aTableCount, aRangeArray,
+ aScanClassArray, aMappingTable,
+ aMaxLengthFactor);
+ if (!decoder)
+ return NS_ERROR_OUT_OF_MEMORY;
+
+ return StabilizedQueryInterface(decoder, aIID, aResult);
+}
+
+nsresult
+CreateMultiTableEncoder(int32_t aTableCount,
+ uScanClassID * aScanClassArray,
+ uShiftOutTable ** aShiftOutTable,
+ uMappingTable ** aMappingTable,
+ uint32_t aMaxLengthFactor,
+ nsISupports* aOuter,
+ REFNSIID aIID,
+ void** aResult)
+{
+
+ if (aOuter)
+ return NS_ERROR_NO_AGGREGATION;
+
+ nsMultiTableEncoderSupport* encoder =
+ new nsMultiTableEncoderSupport(aTableCount,
+ aScanClassArray,
+ aShiftOutTable,
+ aMappingTable,
+ aMaxLengthFactor);
+ if (!encoder)
+ return NS_ERROR_OUT_OF_MEMORY;
+
+ return StabilizedQueryInterface(encoder, aIID, aResult);
+}
+
+nsresult
+CreateMultiTableEncoder(int32_t aTableCount,
+ uScanClassID * aScanClassArray,
+ uMappingTable ** aMappingTable,
+ uint32_t aMaxLengthFactor,
+ nsISupports* aOuter,
+ REFNSIID aIID,
+ void** aResult)
+{
+ return CreateMultiTableEncoder(aTableCount, aScanClassArray,
+ nullptr,
+ aMappingTable, aMaxLengthFactor,
+ aOuter, aIID, aResult);
+}
+
+nsresult
+CreateTableEncoder(uScanClassID aScanClass,
+ uShiftOutTable * aShiftOutTable,
+ uMappingTable * aMappingTable,
+ uint32_t aMaxLengthFactor,
+ nsISupports* aOuter,
+ REFNSIID aIID,
+ void** aResult)
+{
+ if (aOuter)
+ return NS_ERROR_NO_AGGREGATION;
+
+ nsTableEncoderSupport* encoder =
+ new nsTableEncoderSupport(aScanClass,
+ aShiftOutTable, aMappingTable,
+ aMaxLengthFactor);
+ if (!encoder)
+ return NS_ERROR_OUT_OF_MEMORY;
+
+ return StabilizedQueryInterface(encoder, aIID, aResult);
+}
+
+nsresult
+CreateTableEncoder(uScanClassID aScanClass,
+ uMappingTable * aMappingTable,
+ uint32_t aMaxLengthFactor,
+ nsISupports* aOuter,
+ REFNSIID aIID,
+ void** aResult)
+{
+ return CreateTableEncoder(aScanClass, nullptr,
+ aMappingTable, aMaxLengthFactor,
+ aOuter, aIID, aResult);
+}
+
+nsresult
+CreateOneByteDecoder(uMappingTable * aMappingTable,
+ nsISupports* aOuter,
+ REFNSIID aIID,
+ void** aResult)
+{
+ if (aOuter) return NS_ERROR_NO_AGGREGATION;
+
+ nsOneByteDecoderSupport* decoder =
+ new nsOneByteDecoderSupport(aMappingTable);
+
+ if (!decoder)
+ return NS_ERROR_OUT_OF_MEMORY;
+
+ return StabilizedQueryInterface(decoder, aIID, aResult);
+}