home *** CD-ROM | disk | FTP | other *** search
- /*++
-
- Copyright (c) 1996 Microsoft Corporation
-
- Module Name:
-
- SmpOper.cpp
-
- Abstract:
-
- SampleDS DataType Operation routines
-
- Author:
-
- Environment:
-
- User mode
-
- Revision History :
-
- --*/
- #include "adssmp.h"
- #pragma hdrstop
-
-
- HRESULT
- SampleDSTypeFreeSampleDSSynId1(
- PSampleDSOBJECT lpSampleDSDestObject
- )
- {
- HRESULT hr = S_OK;
-
- FreeProvStr(lpSampleDSDestObject->SampleDSValue.value_1.DNString);
-
- RRETURN(hr);
- }
-
- HRESULT
- SampleDSTypeFreeSampleDSSynId2(
- PSampleDSOBJECT lpSampleDSDestObject
- )
- {
- HRESULT hr = S_OK;
-
- //
- // Do nothing - Integer
- //
-
- RRETURN(hr);
-
- }
-
- HRESULT
- SampleDSTypeClear(
- PSampleDSOBJECT lpSampleDSDestObject
- )
- {
- HRESULT hr = S_OK;
- switch (lpSampleDSDestObject->SampleDSType) {
- case 1:
- hr = SampleDSTypeFreeSampleDSSynId1(
- lpSampleDSDestObject
- );
- break;
- case 2:
- hr = SampleDSTypeFreeSampleDSSynId2(
- lpSampleDSDestObject
- );
- break;
-
-
- default:
- hr = E_FAIL;
- break;
- }
-
- RRETURN(hr);
- }
-
- void
- SampleDSTypeFreeSampleDSObjects(
- PSampleDSOBJECT pSampleDSObject,
- DWORD dwNumValues
- )
- {
- DWORD i = 0;
-
- for (i = 0; i < dwNumValues; i++ ) {
- SampleDSTypeClear(pSampleDSObject + i);
- }
-
- FreeProvMem(pSampleDSObject);
-
- return;
- }
-
-
- HRESULT
- SampleDSTypeCopySampleDSSynId1(
- PSampleDSOBJECT lpSampleDSSrcObject,
- PSampleDSOBJECT lpSampleDSDestObject
- )
- {
- HRESULT hr = S_OK;
-
- lpSampleDSDestObject->SampleDSType = lpSampleDSSrcObject->SampleDSType;
-
- lpSampleDSDestObject->SampleDSValue.value_1.DNString =
- (LPWSTR)AllocProvStr(
- lpSampleDSSrcObject->SampleDSValue.value_1.DNString
- );
- RRETURN(hr);
- }
-
- HRESULT
- SampleDSTypeCopySampleDSSynId2(
- PSampleDSOBJECT lpSampleDSSrcObject,
- PSampleDSOBJECT lpSampleDSDestObject
- )
- {
- HRESULT hr = S_OK;
-
- lpSampleDSDestObject->SampleDSType = lpSampleDSSrcObject->SampleDSType;
-
-
- lpSampleDSDestObject->SampleDSValue.value_2.Integer =
- lpSampleDSSrcObject->SampleDSValue.value_2.Integer;
-
- RRETURN(hr);
-
- }
-
- HRESULT
- SampleDSTypeCopy(
- PSampleDSOBJECT lpSampleDSSrcObject,
- PSampleDSOBJECT lpSampleDSDestObject
- )
- {
- HRESULT hr = S_OK;
- switch (lpSampleDSSrcObject->SampleDSType) {
- case 1:
- hr = SampleDSTypeCopySampleDSSynId1(
- lpSampleDSSrcObject,
- lpSampleDSDestObject
- );
- break;
- case 2:
- hr = SampleDSTypeCopySampleDSSynId2(
- lpSampleDSSrcObject,
- lpSampleDSDestObject
- );
- break;
-
-
- default:
- hr = E_FAIL;
- break;
- }
-
- RRETURN(hr);
- }
-
-
-
- HRESULT
- SampleDSTypeCopyConstruct(
- LPSampleDSOBJECT pSampleDSSrcObjects,
- DWORD dwNumObjects,
- LPSampleDSOBJECT * ppSampleDSDestObjects
- )
- {
-
- DWORD i = 0;
- LPSampleDSOBJECT pSampleDSDestObjects = NULL;
- HRESULT hr = S_OK;
-
- pSampleDSDestObjects = (LPSampleDSOBJECT)AllocProvMem(
- dwNumObjects * sizeof(SampleDSOBJECT)
- );
-
- if (!pSampleDSDestObjects) {
- RRETURN(E_FAIL);
- }
-
- for (i = 0; i < dwNumObjects; i++ ) {
- hr = SampleDSTypeCopy(pSampleDSSrcObjects + i,
- pSampleDSDestObjects + i
- );
- }
-
- *ppSampleDSDestObjects = pSampleDSDestObjects;
-
- RRETURN(S_OK);
-
- }
-
- HRESULT
- UnMarshallSampleDSToSampleDSSynId(
- DWORD dwSyntaxId,
- DWORD dwNumValues,
- LPBYTE lpValue,
- PSampleDSOBJECT * ppSampleDSObject
- )
- {
- LPBYTE lpByte = lpValue;
- DWORD i = 0;
- PSampleDSOBJECT pSampleDSObject = NULL;
-
- pSampleDSObject = (PSampleDSOBJECT)AllocProvMem(
- dwNumValues * sizeof(SampleDSOBJECT)
- );
-
- if (!pSampleDSObject) {
- RRETURN(E_FAIL);
- }
-
-
- for (i = 0; i < dwNumValues; i++) {
-
- lpByte = CopySampleDSToSampleDSSynId(
- dwSyntaxId,
- lpByte,
- (pSampleDSObject + i)
- );
-
- }
-
- *ppSampleDSObject = pSampleDSObject;
-
- RRETURN(S_OK);
- }
-
- LPBYTE
- CopySampleDS1ToSampleDSSynId1(
- LPBYTE lpByte,
- PSampleDSOBJECT lpSampleDSObject
- )
- {
- LPSampleDS_TYPE_1 lpData_1 = (LPSampleDS_TYPE_1) lpByte;
-
- lpSampleDSObject->SampleDSType = 1;
-
- lpSampleDSObject->SampleDSValue.value_1.DNString =
- (LPWSTR)AllocProvStr(lpData_1->DNString);
-
- lpByte = (LPBYTE ) lpData_1 + sizeof(SampleDS_TYPE_1);
-
- return(lpByte);
- }
-
- LPBYTE
- CopySampleDS2ToSampleDSSynId2(
- LPBYTE lpByte,
- PSampleDSOBJECT lpSampleDSObject
- )
-
- {
- LPSampleDS_TYPE_2 lpData_2 = (LPSampleDS_TYPE_2) lpByte;
-
- lpSampleDSObject->SampleDSType = 2;
-
- lpSampleDSObject->SampleDSValue.value_2.Integer = lpData_2->Integer;
-
- lpByte = (LPBYTE ) lpData_2 + sizeof(SampleDS_TYPE_2);
-
- return(lpByte);
- }
-
- LPBYTE
- CopySampleDSToSampleDSSynId(
- DWORD dwSyntaxId,
- LPBYTE lpByte,
- PSampleDSOBJECT lpSampleDSObject
- )
- {
- switch (dwSyntaxId) {
- case 1:
- lpByte = CopySampleDS1ToSampleDSSynId1(
- lpByte,
- lpSampleDSObject
- );
- break;
- case 2:
- lpByte = CopySampleDS2ToSampleDSSynId2(
- lpByte,
- lpSampleDSObject
- );
- break;
-
- default:
- break;
-
- }
-
- return(lpByte);
- }
-
- HRESULT
- MarshallSampleDSSynIdToSampleDS(
- DWORD dwSyntaxId,
- PSampleDSOBJECT pSampleDSObject,
- DWORD dwNumValues,
- LPBYTE lpValue
- )
- {
-
- DWORD i = 0;
-
-
- for (i = 0; i < dwNumValues; i++) {
-
- lpValue = CopySampleDSSynIdToSampleDS(
- dwSyntaxId,
- lpValue,
- (pSampleDSObject + i)
- );
-
- }
-
- RRETURN(S_OK);
- }
-
- LPBYTE
- CopySampleDSSynId1ToSampleDS1(
- LPBYTE lpByte,
- PSampleDSOBJECT lpSampleDSObject
- )
- {
- LPSampleDS_TYPE_1 lpData_1 = (LPSampleDS_TYPE_1) lpByte;
-
- lpData_1->DNString =
- (LPWSTR)AllocProvStr(
- lpSampleDSObject->SampleDSValue.value_1.DNString
- );
-
- lpByte = (LPBYTE ) lpData_1 + sizeof(SampleDS_TYPE_1);
-
- return(lpByte);
-
- }
-
- LPBYTE
- CopySampleDSSynId2ToSampleDS2(
- LPBYTE lpByte,
- PSampleDSOBJECT lpSampleDSObject
- )
-
- {
- LPSampleDS_TYPE_2 lpData_2 = (LPSampleDS_TYPE_2) lpByte;
-
-
- lpData_2->Integer = lpSampleDSObject->SampleDSValue.value_2.Integer;
-
- lpByte = (LPBYTE ) lpData_2 + sizeof(SampleDS_TYPE_2);
-
- return(lpByte);
- }
-
-
- LPBYTE
- CopySampleDSSynIdToSampleDS(
- DWORD dwSyntaxId,
- LPBYTE lpByte,
- PSampleDSOBJECT lpSampleDSObject
- )
- {
- switch (dwSyntaxId) {
- case 1:
- lpByte = CopySampleDSSynId1ToSampleDS1(
- lpByte,
- lpSampleDSObject
- );
- break;
-
- case 2:
- lpByte = CopySampleDSSynId2ToSampleDS2(
- lpByte,
- lpSampleDSObject
- );
- break;
-
- default:
- break;
-
- }
-
- return(lpByte);
- }
-
-
- void
- VarTypeFreeVarObjects(
- VARIANT *pVarObject,
- DWORD dwNumValues
- )
- {
- DWORD i = 0;
-
- for (i = 0; i < dwNumValues; i++ ) {
- VariantClear(pVarObject + i);
- }
-
- FreeProvMem(pVarObject);
-
- return;
- }
-
-
- HRESULT
- SampleDSTypeToVarTypeCopySampleDSSynId1(
- PSampleDSOBJECT lpSampleDSSrcObject,
- VARIANT *lpVarDestObject
- )
- {
- HRESULT hr = S_OK;
-
- lpVarDestObject->vt = VT_BSTR;
-
- hr = ProvAllocString(
- lpSampleDSSrcObject->SampleDSValue.value_1.DNString,
- &(lpVarDestObject->bstrVal)
- );
-
- RRETURN(hr);
- }
-
- HRESULT
- SampleDSTypeToVarTypeCopySampleDSSynId2(
- PSampleDSOBJECT lpSampleDSSrcObject,
- PVARIANT lpVarDestObject
- )
- {
- HRESULT hr = S_OK;
-
- lpVarDestObject->vt = VT_I4;
-
- lpVarDestObject->lVal =
- lpSampleDSSrcObject->SampleDSValue.value_2.Integer;
-
- RRETURN(hr);
-
- }
-
-
- HRESULT
- SampleDSTypeToVarTypeCopy(
- PSampleDSOBJECT lpSampleDSSrcObject,
- VARIANT* lpVarDestObject
- )
- {
- HRESULT hr = S_OK;
- switch (lpSampleDSSrcObject->SampleDSType) {
- case 1:
- hr = SampleDSTypeToVarTypeCopySampleDSSynId1(
- lpSampleDSSrcObject,
- lpVarDestObject
- );
- break;
- case 2:
- hr = SampleDSTypeToVarTypeCopySampleDSSynId2(
- lpSampleDSSrcObject,
- lpVarDestObject
- );
- break;
-
-
- default:
- hr = E_FAIL;
- break;
- }
-
- RRETURN(hr);
- }
-
- HRESULT
- SampleDSTypeToVarTypeCopyConstruct(
- LPSampleDSOBJECT pSampleDSSrcObjects,
- DWORD dwNumObjects,
- VARIANT *pVarDestObjects
- )
- {
- long i = 0;
- HRESULT hr = S_OK;
-
- VariantInit(pVarDestObjects);
-
- if ( dwNumObjects == 1 )
- {
- hr = SampleDSTypeToVarTypeCopy( pSampleDSSrcObjects,
- pVarDestObjects );
-
- RRETURN(hr);
- }
-
- //
- // The following are for handling are multi-value properties
- //
-
- SAFEARRAY *aList = NULL;
- SAFEARRAYBOUND aBound;
-
- aBound.lLbound = 0;
- aBound.cElements = dwNumObjects;
-
- aList = SafeArrayCreate( VT_VARIANT, 1, &aBound );
-
- if ( aList == NULL )
- {
- hr = E_OUTOFMEMORY;
- BAIL_ON_FAILURE(hr);
- }
-
- for ( i = 0; i < (long) dwNumObjects; i++ )
- {
- VARIANT v;
-
- VariantInit(&v);
- hr = SampleDSTypeToVarTypeCopy( pSampleDSSrcObjects + i,
- &v );
- BAIL_ON_FAILURE(hr);
-
- hr = SafeArrayPutElement( aList, &i, &v );
- BAIL_ON_FAILURE(hr);
- }
-
- V_VT(pVarDestObjects) = VT_ARRAY | VT_VARIANT;
- V_ARRAY(pVarDestObjects) = aList;
-
- RRETURN(S_OK);
-
- error:
-
- if ( aList )
- SafeArrayDestroy( aList );
-
- RRETURN(hr);
- }
-
- HRESULT
- VarTypeToSampleDSTypeCopySampleDSSynId1(
- PVARIANT lpVarSrcObject,
- PSampleDSOBJECT lpSampleDSDestObject
- )
- {
- HRESULT hr = S_OK;
-
- if(lpVarSrcObject->vt != VT_BSTR){
- RRETURN(hr = E_ADS_CANT_CONVERT_DATATYPE);
- }
-
- lpSampleDSDestObject->SampleDSType = 1;
-
- lpSampleDSDestObject->SampleDSValue.value_1.DNString =
- AllocProvStr(
- lpVarSrcObject->bstrVal
- );
-
- RRETURN(hr);
- }
-
- HRESULT
- VarTypeToSampleDSTypeCopySampleDSSynId2(
- PVARIANT lpVarSrcObject,
- PSampleDSOBJECT lpSampleDSDestObject
- )
- {
- HRESULT hr = S_OK;
-
- if(lpVarSrcObject->vt != VT_I4){
- RRETURN(hr = E_ADS_CANT_CONVERT_DATATYPE);
- }
-
- lpSampleDSDestObject->SampleDSType = 2;
-
- lpSampleDSDestObject->SampleDSValue.value_2.Integer =
- lpVarSrcObject->lVal;
-
- RRETURN(hr);
- }
-
- HRESULT
- VarTypeToSampleDSTypeCopy(
- DWORD dwSampleDSType,
- PVARIANT lpVarSrcObject,
- PSampleDSOBJECT lpSampleDSDestObject
- )
- {
- HRESULT hr = S_OK;
- switch (dwSampleDSType){
- case 1:
- hr = VarTypeToSampleDSTypeCopySampleDSSynId1(
- lpVarSrcObject,
- lpSampleDSDestObject
- );
- break;
-
- case 2:
- hr = VarTypeToSampleDSTypeCopySampleDSSynId2(
- lpVarSrcObject,
- lpSampleDSDestObject
- );
- break;
- default:
- hr = E_FAIL;
- break;
- }
-
- RRETURN(hr);
- }
-
-
-
- HRESULT
- VarTypeToSampleDSTypeCopyConstruct(
- DWORD dwSampleDSType,
- LPVARIANT pVarSrcObjects,
- DWORD dwNumObjects,
- LPSampleDSOBJECT * ppSampleDSDestObjects
- )
- {
-
- DWORD i = 0;
- LPSampleDSOBJECT pSampleDSDestObjects = NULL;
- HRESULT hr = S_OK;
-
- pSampleDSDestObjects = (LPSampleDSOBJECT)AllocProvMem(
- dwNumObjects * sizeof(SampleDSOBJECT)
- );
-
- if (!pSampleDSDestObjects) {
- RRETURN(E_FAIL);
- }
-
- for (i = 0; i < dwNumObjects; i++ ) {
- hr = VarTypeToSampleDSTypeCopy(
- dwSampleDSType,
- pVarSrcObjects + i,
- pSampleDSDestObjects + i
- );
- BAIL_ON_FAILURE(hr);
-
- }
-
- *ppSampleDSDestObjects = pSampleDSDestObjects;
-
- RRETURN(S_OK);
-
- error:
-
- if (pSampleDSDestObjects) {
-
- SampleDSTypeFreeSampleDSObjects(
- pSampleDSDestObjects,
- dwNumObjects
- );
- }
-
- *ppSampleDSDestObjects = NULL;
-
- RRETURN(hr);
- }
-
-
-
-