OSDN Git Service

・ MBCS->Unicode対応
[seraphyscrtools/SeraphyScriptTools.git] / ObjectMap.cpp
index c86a8ad..e634fdf 100644 (file)
@@ -3,35 +3,23 @@
 #include "SeraphyScriptTools.h"
 #include "ObjectMap.h"
 #include "profilesection.h"
-#include "generic.h"
+#include "CComEnumDynaVARIANT.h"
 
 /////////////////////////////////////////////////////////////////////////////
 // CObjectMap
 
-
-STDMETHODIMP CObjectMap::InterfaceSupportsErrorInfo(REFIID riid)
-{
-       static const IID* arr[] = 
-       {
-               &IID_IObjectMap
-       };
-       for (int i=0; i < sizeof(arr) / sizeof(arr[0]); i++)
-       {
-               if (IsEqualGUID(*arr[i],riid))
-                       return S_OK;
-       }
-       return S_FALSE;
-}
-
 STDMETHODIMP CObjectMap::FindNear(VARIANT key, VARIANT *pVal)
 {
-       CComVariant varName;
        ::VariantInit(pVal);
-       if(varName.ChangeType(VT_BSTR,&key) != S_OK){
-               return DISP_E_TYPEMISMATCH;
+
+       CComVariant varName;
+       HRESULT hr;
+       if (FAILED(hr = varName.ChangeType(VT_BSTR, &key))) {
+               return hr;
        }
+
        VariantMap::iterator p = m_mapVariant.lower_bound(varName.bstrVal);
-       if(p != m_mapVariant.end()){
+       if (p != m_mapVariant.end()) {
                // \94­\8c©\82³\82ê\82½
                CComVariant findkey((LPCWSTR)p->first);
                findkey.ChangeType(VT_BSTR);
@@ -42,30 +30,36 @@ STDMETHODIMP CObjectMap::FindNear(VARIANT key, VARIANT *pVal)
 
 STDMETHODIMP CObjectMap::get_NearValue(VARIANT key, VARIANT *pVal)
 {
-       CComVariant varName;
        ::VariantInit(pVal);
-       if(varName.ChangeType(VT_BSTR,&key) != S_OK){
-               return DISP_E_TYPEMISMATCH;
+
+       CComVariant varName;
+       HRESULT hr;
+       if (FAILED(hr = varName.ChangeType(VT_BSTR, &key))) {
+               return hr;
        }
+
        VariantMap::iterator p = m_mapVariant.lower_bound(varName.bstrVal);
-       if(p != m_mapVariant.end()){
+       if (p != m_mapVariant.end()) {
                // \94­\8c©\82³\82ê\82½
-               VariantCopy(pVal,&p->second);
+               VariantCopy(pVal, &p->second);
        }
        return S_OK;
 }
 
 STDMETHODIMP CObjectMap::get_Value(VARIANT key, VARIANT *pVal)
 {
-       CComVariant varName;
        ::VariantInit(pVal);
-       if(varName.ChangeType(VT_BSTR,&key) != S_OK){
-               return DISP_E_TYPEMISMATCH;
+
+       CComVariant varName;
+       HRESULT hr;
+       if (FAILED(hr = varName.ChangeType(VT_BSTR, &key))) {
+               return hr;
        }
+
        VariantMap::iterator p = m_mapVariant.find(varName.bstrVal);
-       if(p != m_mapVariant.end()){
+       if (p != m_mapVariant.end()) {
                // \94­\8c©\82³\82ê\82½
-               VariantCopy(pVal,&p->second);
+               VariantCopy(pVal, &p->second);
        }
        return S_OK;
 }
@@ -73,20 +67,22 @@ STDMETHODIMP CObjectMap::get_Value(VARIANT key, VARIANT *pVal)
 STDMETHODIMP CObjectMap::put_Value(VARIANT key, VARIANT newVal)
 {
        CComVariant varName;
-       if(varName.ChangeType(VT_BSTR,&key) != S_OK){
-               return DISP_E_TYPEMISMATCH;
+       HRESULT hr;
+       if (FAILED(hr = varName.ChangeType(VT_BSTR, &key))) {
+               return hr;
        }
+
        VariantMap::iterator p = m_mapVariant.find(varName.bstrVal);
-       if(p != m_mapVariant.end()){
+       if (p != m_mapVariant.end()) {
                // \8aù\91
-               VariantCopy(&p->second,&newVal);
+               VariantCopy(&p->second, &newVal);
        }
-       else{
+       else {
                // \90V\8bK
                VARIANT tmp;
                ::VariantInit(&tmp);
-               VariantCopy(&tmp,&newVal);
-               m_mapVariant.insert(pair<_bstr_t,VARIANT>(varName.bstrVal,tmp));
+               VariantCopy(&tmp, &newVal);
+               m_mapVariant.insert(pair<_bstr_t, VARIANT>(varName.bstrVal, tmp));
        }
        return S_OK;
 }
@@ -101,7 +97,7 @@ STDMETHODIMP CObjectMap::Clear()
 {
        //VARIANT\82Ì\83N\83\8a\83A\82Æ\98A\91z\94z\97ñ\82Ì\89ð\95ú
        VariantMap::iterator p = m_mapVariant.begin();
-       while(p != m_mapVariant.end()){
+       while (p != m_mapVariant.end()) {
                ::VariantClear(&p->second);
                p++;
        }
@@ -114,16 +110,16 @@ STDMETHODIMP CObjectMap::Duplicate(IUnknown** punkVal)
 {
        *punkVal = NULL;
        CComObject<CObjectMap>* pMap = NULL;
-       if(pMap->CreateInstance(&pMap) == S_OK){
+       if (pMap->CreateInstance(&pMap) == S_OK) {
                // \8c»\8dÝ\82Ì\83I\83u\83W\83F\83N\83g\82ð\95¡\90»\82·\82é
                VariantMap::iterator p = m_mapVariant.begin();
-               while(p != m_mapVariant.end()){
+               while (p != m_mapVariant.end()) {
                        CComVariant key((LPCWSTR)p->first);
                        key.ChangeType(VT_BSTR);
-                       pMap->put_Value(key,p->second);
+                       pMap->put_Value(key, p->second);
                        p++;
                }
-               pMap->QueryInterface(IID_IUnknown,(void**)punkVal);
+               pMap->QueryInterface(IID_IUnknown, (void**)punkVal);
        }
        return S_OK;
 }
@@ -132,20 +128,20 @@ STDMETHODIMP CObjectMap::CreateMap(IUnknown** punkVal)
 {
        *punkVal = NULL;
        CComObject<CObjectMap>* pMap = NULL;
-       if(pMap->CreateInstance(&pMap) == S_OK){
-               pMap->QueryInterface(IID_IUnknown,(void**)punkVal);
+       if (SUCCEEDED(pMap->CreateInstance(&pMap))) {
+               return pMap->QueryInterface(IID_IUnknown, (void**)punkVal);
        }
-       return S_OK;
+       return E_FAIL;
 }
 
 STDMETHODIMP CObjectMap::get__NewEnum(IUnknown **pVal)
 {
        int mx = m_mapVariant.size();
-       VARIANT* pvarArray = new VARIANT[mx+1];
+       VARIANT* pvarArray = new VARIANT[mx + 1];
        // \8ai\94[\82³\82ê\82Ä\82¢\82é\96¼\91O\82Ì\97ñ\8b\93
        VariantMap::iterator p = m_mapVariant.begin();
        int i = 0;
-       while(p != m_mapVariant.end()){
+       while (p != m_mapVariant.end()) {
                ::VariantInit(&pvarArray[i]);
                pvarArray[i].vt = VT_BSTR;
                pvarArray[i].bstrVal = SysAllocString(p->first);
@@ -154,14 +150,14 @@ STDMETHODIMP CObjectMap::get__NewEnum(IUnknown **pVal)
        }
        // \97ñ\8b\93\83C\83\93\83^\81[\83t\83F\83C\83X\82Ì\90\90¬
        CComObject<CComEnumVARIANT>* pCol = NULL;
-       if(pCol->CreateInstance(&pCol) == S_OK){
+       if (pCol->CreateInstance(&pCol) == S_OK) {
                pCol->AddRef();
-               pCol->Init(&pvarArray[0],&pvarArray[mx],pCol,AtlFlagCopy);
+               pCol->Init(&pvarArray[0], &pvarArray[mx], pCol, AtlFlagCopy);
                *pVal = pCol;
        }
        // \8am\95Û\82µ\82½\83o\83\8a\83A\83\93\83g\82Ì\94j\8aü(\83\8a\83\8a\81[\83X\82ð\8ds\82¤\95K\97v\82 \82è)
        i = 0;
-       while(i < mx){
+       while (i < mx) {
                ::VariantClear(&pvarArray[i++]);
        }
        delete[]pvarArray;
@@ -170,69 +166,69 @@ STDMETHODIMP CObjectMap::get__NewEnum(IUnknown **pVal)
 
 STDMETHODIMP CObjectMap::ExpandVariables(VARIANT text, VARIANT env, VARIANT *pVal)
 {
-       CComVariant varText,varEnv,varResult;
-       if(varText.ChangeType(VT_BSTR,&text) != S_OK){
+       CComVariant varText, varEnv, varResult;
+       if (varText.ChangeType(VT_BSTR, &text) != S_OK) {
                return DISP_E_TYPEMISMATCH;
        }
        // \8aÂ\8b«\95Ï\90\94\82ð\93W\8aJ\82·\82é\82©?
        BOOL bEnv = false;
-       if(varEnv.ChangeType(VT_I2,&env) == S_OK){
+       if (varEnv.ChangeType(VT_I2, &env) == S_OK) {
                bEnv = varEnv.iVal;
        }
        // \83t\83F\81[\83Y1 : \8aÜ\82Ü\82ê\82é\95Ï\90\94\82ð\92²\8d¸\82µ\82Ä\95K\97v\82È\83o\83b\83t\83@\83T\83C\83Y\82ð\8b\81\82ß\82é
        // \83t\83F\81[\83Y2 ; \8eÀ\8dÛ\82É\93W\8aJ\82·\82é
        DWORD expandsize = 0;
-       UINT writeidx    = 0;
+       UINT writeidx = 0;
        LPWSTR pExpandBuffer = NULL;
-       for(int phase = 0;phase < 2;phase++){
+       for (int phase = 0; phase < 2; phase++) {
                LPCWSTR str = varText.bstrVal;
                UINT length = SysStringLen(varText.bstrVal);
-               UINT idx    = 0;
-               while(idx < length){
-                       if(str[idx] == '%'){
+               UINT idx = 0;
+               while (idx < length) {
+                       if (str[idx] == '%') {
                                // \95Ï\90\94\93W\8aJ\83X\83^\81[\83g
                                WCHAR name[MAX_PATH] = {0};
                                UINT len = 0;
                                // \98A\91±\82·\82é%\82É\82æ\82é%\8e©\90g\82Ì\8fo\97Í\82Å\82 \82é\82©?
                                idx++;
-                               if(str[idx] == '%'){
-                                       if(phase == 0){
+                               if (str[idx] == '%') {
+                                       if (phase == 0) {
                                                idx++;
                                        }
-                                       else{
+                                       else {
                                                pExpandBuffer[writeidx++] = str[idx++];
                                        }
                                        continue;
                                }
                                // \95Ï\90\94\96¼\82Ì\8eæ\82è\8fo\82µ
-                               while(idx < length && str[idx] != '%'){
+                               while (idx < length && str[idx] != '%') {
                                        name[len++] = str[idx++];
                                }
                                name[len] = 0;
-                               if(str[idx] == '%'){
+                               if (str[idx] == '%') {
                                        idx++;
                                }
                                // \95Ï\90\94\82Ì\8eÀ\8dÝ\83`\83F\83b\83N
                                VariantMap::iterator p = m_mapVariant.find(name);
-                               if(p != m_mapVariant.end()){
+                               if (p != m_mapVariant.end()) {
                                        // \94­\8c©\82³\82ê\82½
                                        CComVariant tmp;
-                                       if(tmp.ChangeType(VT_BSTR,&p->second) == S_OK){
-                                               if(phase == 0){
+                                       if (tmp.ChangeType(VT_BSTR, &p->second) == S_OK) {
+                                               if (phase == 0) {
                                                        // \83t\83F\81[\83Y1\82Í\83T\83C\83Y\82ð\83J\83E\83\93\83g\82·\82é\82¾\82¯
                                                        expandsize += SysStringLen(tmp.bstrVal);
                                                }
-                                               else{
+                                               else {
                                                        // \83t\83F\81[\83Y2\82Í\8c»\8dÝ\88Ê\92u\82É\95Ï\90\94\82ð\93W\8aJ\82·\82é
                                                        UINT len = SysStringLen(tmp.bstrVal);
                                                        UINT i;
-                                                       for(i=0;i<len;i++){
+                                                       for (i = 0; i < len; i++) {
                                                                pExpandBuffer[writeidx++] = tmp.bstrVal[i];
                                                        }
                                                }
                                        }
                                }
-                               else if (bEnv){
+                               else if (bEnv) {
                                        // \98A\91z\94z\97ñ\82É\82Í\91\8dÝ\82¹\82¸\81A\8aÂ\8b«\95Ï\90\94\93W\8aJ\82ª\8ew\8e¦\82³\82ê\82Ä\82¢\82é
                                        ATL::CString szName(name);
                                        TCHAR szBuf[MAX_PATH] = {0};
@@ -243,10 +239,10 @@ STDMETHODIMP CObjectMap::ExpandVariables(VARIANT text, VARIANT env, VARIANT *pVa
                                                        // \83t\83G\81[\83Y1\82Í\83J\83E\83\93\83g\82·\82é\82¾\82¯
                                                        expandsize += ret;
                                                }
-                                               else{
+                                               else {
                                                        // \83t\83F\81[\83Y2\82Í\8eÀ\8dÛ\82É\8f\91\82«\8d\9e\82Þ
                                                        ATL::CStringW wbuf(szBuf);
-                                                       for (UINT i=0; i < ret; i++) {
+                                                       for (UINT i = 0; i < ret; i++) {
                                                                pExpandBuffer[writeidx++] = wbuf[i];
                                                        }
                                                }
@@ -254,21 +250,21 @@ STDMETHODIMP CObjectMap::ExpandVariables(VARIANT text, VARIANT env, VARIANT *pVa
                                }
                                continue;
                        }
-                       if(phase == 0){
+                       if (phase == 0) {
                                // \83t\83F\81[\83Y1\82Í\89½\82à\82µ\82È\82¢
                                idx++;
                        }
-                       else{
+                       else {
                                // \83t\83F\81[\83Y2\82Í\83o\83b\83t\83@\82É\92Ê\8fí\8f\91\82«\8d\9e\82Ý\82·\82é
                                pExpandBuffer[writeidx++] = str[idx++];
                        }
                }
                //
-               if(phase == 0){
+               if (phase == 0) {
                        // \83t\83F\81[\83Y1\82ª\8fI\97¹\82µ\82½\82Ì\82Å\83o\83b\83t\83@\83T\83C\83Y\82ª\94»\96¾\82µ\82½\81B
                        pExpandBuffer = new WCHAR[length + expandsize + 1];
                }
-               else{
+               else {
                        // \83t\83F\81[\83Y2\82ª\8fI\97¹\82µ\82½\82Ì\82Å\92u\8a·\82ª\8a®\97¹\82µ\82½
                        pExpandBuffer[writeidx] = 0;
                        varResult = (LPCWSTR)pExpandBuffer;
@@ -282,13 +278,16 @@ STDMETHODIMP CObjectMap::ExpandVariables(VARIANT text, VARIANT env, VARIANT *pVa
 
 STDMETHODIMP CObjectMap::get_IsExist(VARIANT key, BOOL *pVal)
 {
-       CComVariant varName;
        *pVal = VB_FALSE;
-       if(varName.ChangeType(VT_BSTR,&key) != S_OK){
-               return DISP_E_TYPEMISMATCH;
+
+       CComVariant varName;
+       HRESULT hr;
+       if (FAILED(hr = varName.ChangeType(VT_BSTR, &key))) {
+               return hr;
        }
+
        VariantMap::iterator p = m_mapVariant.find(varName.bstrVal);
-       if(p != m_mapVariant.end()){
+       if (p != m_mapVariant.end()) {
                // \91\8dÝ\82·\82é
                *pVal = VB_TRUE;
        }
@@ -298,11 +297,13 @@ STDMETHODIMP CObjectMap::get_IsExist(VARIANT key, BOOL *pVal)
 STDMETHODIMP CObjectMap::Erase(VARIANT key)
 {
        CComVariant varName;
-       if(varName.ChangeType(VT_BSTR,&key) != S_OK){
-               return DISP_E_TYPEMISMATCH;
+       HRESULT hr;
+       if (FAILED(hr = varName.ChangeType(VT_BSTR, &key))) {
+               return hr;
        }
+
        VariantMap::iterator p = m_mapVariant.find(varName.bstrVal);
-       if(p != m_mapVariant.end()){
+       if (p != m_mapVariant.end()) {
                m_mapVariant.erase(p);
        }
        return S_OK;
@@ -311,28 +312,34 @@ STDMETHODIMP CObjectMap::Erase(VARIANT key)
 STDMETHODIMP CObjectMap::LoadProfile(IUnknown *punkVal)
 {
        ISeraphyScriptTools_ProfileSection* pSection = NULL;
-       if(punkVal->QueryInterface(IID_ISeraphyScriptTools_ProfileSection,(void**)&pSection) != S_OK){
-               return DISP_E_UNKNOWNINTERFACE;
+       HRESULT hr;
+       if (FAILED(hr = punkVal->QueryInterface(
+               IID_ISeraphyScriptTools_ProfileSection, (void**)&pSection))) {
+               return hr;
        }
-       // 
+
        CComVariant varArray;
-       pSection->GetKeyNames(&varArray);
-       if(!(varArray.vt & VT_ARRAY)){
+       if (FAILED(hr = pSection->GetKeyNames(&varArray))) {
+               return hr;
+       }
+       if (!(varArray.vt & VT_ARRAY)) {
                // Internal Error
                return DISP_E_UNKNOWNINTERFACE;
        }
+
        // \94z\97ñ\82Ì\8f\87\8f\98\93I\8eæ\93¾
        long mx = 0;
-       HRESULT ret = SafeArrayGetUBound(varArray.parray,1,&mx);
-       if(ret != S_OK){
+       HRESULT ret = SafeArrayGetUBound(varArray.parray, 1, &mx);
+       if (ret != S_OK) {
                mx = -1;
        }
+
        long idx = 0;
-       while(idx <= mx){
-               CComVariant varKey,varVal;
-               if(SafeArrayGetElement(varArray.parray,&idx,&varKey) == S_OK){
-                       if(pSection->get_Value(varKey,&varVal) == S_OK){
-                               put_Value(varKey,varVal);
+       while (idx <= mx) {
+               CComVariant varKey, varVal;
+               if (SafeArrayGetElement(varArray.parray, &idx, &varKey) == S_OK) {
+                       if (pSection->get_Value(varKey, &varVal) == S_OK) {
+                               put_Value(varKey, varVal);
                        }
                }
                idx++;
@@ -344,16 +351,19 @@ STDMETHODIMP CObjectMap::LoadProfile(IUnknown *punkVal)
 STDMETHODIMP CObjectMap::SaveProfile(IUnknown *punkVal)
 {
        ISeraphyScriptTools_ProfileSection* pSection = NULL;
-       if(punkVal->QueryInterface(IID_ISeraphyScriptTools_ProfileSection,(void**)&pSection) != S_OK){
-               return DISP_E_UNKNOWNINTERFACE;
+       HRESULT hr;
+       if (FAILED(hr = punkVal->QueryInterface(
+               IID_ISeraphyScriptTools_ProfileSection, (void**)&pSection))) {
+               return hr;
        }
+
        // \8ai\94[\82³\82ê\82Ä\82¢\82é\96¼\91O\82Ì\97ñ\8b\93
        VariantMap::iterator p = m_mapVariant.begin();
-       while(p != m_mapVariant.end()){
+       while (p != m_mapVariant.end()) {
                CComVariant varTmp;
-               if(varTmp.ChangeType(VT_BSTR,&p->second) == S_OK){
+               if (SUCCEEDED(varTmp.ChangeType(VT_BSTR, &p->second))) {
                        CComVariant varIdx = (BSTR)p->first;
-                       pSection->put_Value(varIdx,varTmp);
+                       pSection->put_Value(varIdx, varTmp);
                }
                p++;
        }