Main Page | Class Hierarchy | Class List | Directories | File List | Class Members | File Members | Related Pages

DatabaseStringConverter.cpp

Go to the documentation of this file.
00001 #include "../include/DatabaseStringConverter.h"
00002 
00003 // Default the encoding converter
00004 DatabaseStringConverter::DatabaseStringConverter()
00005   : m_Encoding(wxT("UTF-8"))
00006 {
00007 }
00008 
00009 DatabaseStringConverter::DatabaseStringConverter(const wxChar* charset)
00010   : m_Encoding(charset)
00011 {
00012 }
00013 
00014 void DatabaseStringConverter::SetEncoding(wxFontEncoding encoding)
00015 {
00016   m_Encoding = wxCSConv(encoding);
00017 }
00018 
00019 void DatabaseStringConverter::SetEncoding(const wxCSConv* conv)
00020 {
00021   m_Encoding = *conv;
00022 }
00023 
00024 const wxCharBuffer DatabaseStringConverter::ConvertToUnicodeStream(const wxString& inputString)
00025 {
00026 #if wxUSE_UNICODE
00027   return wxConvUTF8.cWC2MB(inputString.wc_str(*wxConvCurrent));
00028 #else
00029   wxString str(inputString.wc_str(*wxConvCurrent), wxConvUTF8);
00030   return str.mb_str();
00031 #endif
00032 }
00033 
00034 size_t DatabaseStringConverter::GetEncodedStreamLength(const wxString& inputString)
00035 {
00036 #if wxUSE_UNICODE
00037   size_t length = wxConvUTF8.WC2MB(NULL, inputString.wc_str(), (unsigned int)0);
00038 #else
00039   size_t length = wxConvUTF8.WC2MB(NULL, inputString.wc_str(wxConvUTF8), (unsigned int)0);
00040 #endif
00041   if (length == 0)
00042   {
00043     wxCharBuffer tempCharBuffer = ConvertToUnicodeStream(inputString);
00044     length = wxStrlen((wxChar*)(const char*)tempCharBuffer);
00045   }
00046 
00047   return length;
00048 }
00049 
00050 wxString DatabaseStringConverter::ConvertFromUnicodeStream(const char* inputBuffer)
00051 {
00052   wxString strReturn(wxConvUTF8.cMB2WC(inputBuffer), *wxConvCurrent);
00053   
00054   // If the UTF-8 conversion didn't return anything, then try the default unicode conversion
00055   if (strReturn == wxEmptyString)
00056     strReturn << wxString(inputBuffer, *wxConvCurrent);
00057   
00058   return strReturn;
00059 }
00060 
00061 const wxCharBuffer DatabaseStringConverter::ConvertToUnicodeStream(const wxString& inputString, const char* encoding)
00062 {
00063 #if wxUSE_UNICODE
00064   return wxConvUTF8.cWC2MB(inputString.wc_str(*wxConvCurrent));
00065 #else
00066   wxString str(inputString.wc_str(*wxConvCurrent), wxConvUTF8);
00067   return str.mb_str();
00068 #endif
00069 }
00070 
00071 size_t DatabaseStringConverter::GetEncodedStreamLength(const wxString& inputString, const char* encoding)
00072 {
00073 #if wxUSE_UNICODE
00074   size_t length = wxConvUTF8.WC2MB(NULL, inputString.wc_str(), (unsigned int)0);
00075 #else
00076   size_t length = wxConvUTF8.WC2MB(NULL, inputString.wc_str(wxConvUTF8), (unsigned int)0);
00077 #endif
00078   if (length == 0)
00079   {
00080     wxCharBuffer tempCharBuffer = DatabaseStringConverter::ConvertToUnicodeStream(inputString, encoding);
00081     length = wxStrlen((wxChar*)(const char*)tempCharBuffer);
00082   }
00083 
00084   return length;
00085 }
00086 
00087 wxString DatabaseStringConverter::ConvertFromUnicodeStream(const char* inputBuffer, const char* encoding)
00088 {
00089   wxString strReturn(wxConvUTF8.cMB2WC(inputBuffer), *wxConvCurrent);
00090   
00091   // If the UTF-8 conversion didn't return anything, then try the default unicode conversion
00092   if (strReturn == wxEmptyString)
00093     strReturn << wxString(inputBuffer, *wxConvCurrent);
00094   
00095   return strReturn;
00096 }  
00097 

Generated on Sat May 13 17:31:34 2006 for databaselayer by  doxygen 1.4.1