void SetPropertyValues()

in Unix/scriptext/py/PMI_Instance.c [505:945]


void SetPropertyValues(MI_Type elementType, PyObject *propertyValue, MI_Value *miValue)
{
	MI_Value value;
	switch (elementType)
	{
		case MI_BOOLEAN:
		{
			MI_Boolean booleanValue = propertyValue == Py_True? MI_TRUE:MI_FALSE;
			value.boolean = booleanValue;
			*miValue = value;
			break; 
		}
		case MI_SINT8:
		{
			MI_Sint8 sint8Value = PyInt_AsLong(propertyValue);
			value.sint8 = sint8Value;
			*miValue = value;
			break;
		}
		case MI_UINT8:
		{
			MI_Uint8 uint8Value = PyInt_AsLong(propertyValue);
			value.uint8 = uint8Value;
			*miValue = value;
			break;
		}
		case MI_SINT16:
		{
			MI_Sint16 sint16Value = PyInt_AsLong(propertyValue);
			value.sint16 = sint16Value;
			*miValue = value;
			break;
		}
		case MI_UINT16:
		{
			MI_Uint16 uint16Value = PyInt_AsLong(propertyValue);
			value.uint16 = uint16Value;
			*miValue = value;
			break;
		}
		case MI_SINT32:	
		{
			MI_Sint32 sint32Value = PyInt_AsLong(propertyValue);
			value.sint32 = sint32Value;
			*miValue = value;
			break;
		}
		case MI_UINT32:
		{
			MI_Uint32 uint32Value = PyInt_AsLong(propertyValue);
			value.uint32 = uint32Value;
			*miValue = value;
			break;
		}
		case MI_SINT64:
		{
			MI_Sint64 sint64Value = PyLong_AsLong(propertyValue);
			value.sint64 = sint64Value;
			*miValue = value;
			break;
		}
		case MI_UINT64:
		{			
			MI_Uint64 uint64Value = PyLong_AsUnsignedLong(propertyValue);
			value.uint64 = uint64Value;
			*miValue = value;
			break;
		}
		case MI_REAL32:
		{
			MI_Real32 real32Value = PyFloat_AsDouble(propertyValue);
			value.real32 = real32Value;
			*miValue = value;
			break;
		}
		case MI_REAL64:
		{
			MI_Real64 real64Value = PyFloat_AsDouble(propertyValue);
			value.real64 = real64Value;
			*miValue = value;
			break;
		}
		case MI_CHAR16:
		{
			MI_Char16 char16Value = PyInt_AsLong(propertyValue);
			value.char16 = char16Value;
			*miValue = value;
			break;
		}
		case MI_STRING:
		{
			char *stringValue = PyString_AsString(propertyValue);
			value.string = stringValue;
			*miValue = value;
			break;
		}
		
		case MI_DATETIME:
		{
			/*Check whether the input python object is of type DateTime or TimeDelta */
			if(PyDateTime_Check(propertyValue))
			{
			    MI_Datetime dateTime;
			    MI_Timestamp timeStamp;
			    dateTime.isTimestamp = 1;
			    int year = PyDateTime_GET_YEAR(propertyValue);
		 	    int month = PyDateTime_GET_MONTH(propertyValue);
			    int day = PyDateTime_GET_DAY(propertyValue);
			    int hour = PyDateTime_DATE_GET_HOUR(propertyValue);
			    int minute = PyDateTime_DATE_GET_MINUTE(propertyValue);
			    int second = PyDateTime_DATE_GET_SECOND(propertyValue);
			    int microseconds = PyDateTime_DATE_GET_MICROSECOND(propertyValue);
			    timeStamp.year = year;
			    timeStamp.month = month;	
			    timeStamp.day = day;
			    timeStamp.hour = hour;	
			    timeStamp.minute = minute;
			    timeStamp.second = second;
			    timeStamp.microseconds = microseconds;
				//if timezone not specified, set the default to UTC time
			    timeStamp.utc = 5;
			    dateTime.u.timestamp = timeStamp; 
			    value.datetime = dateTime;
			    *miValue = value;
			}
			/* no equivalent way of doing conversions. pydatetime object does not have days */
			else
			{
				MI_Datetime dateTime;
				dateTime.isTimestamp = 0;
				MI_Interval interval;
				int days = PyDateTime_GET_DAY(propertyValue);
				int seconds = PyDateTime_DATE_GET_SECOND(propertyValue);
				int hours = (int)seconds/60/60;
				int minutes = (seconds-hours*60*60)/60;
				seconds = seconds - hours*60*60 - minutes *60;
				int microseconds = PyDateTime_DATE_GET_MICROSECOND(propertyValue);
				interval.days = days;
				interval.hours = hours;
				interval.minutes = minutes;
				interval.seconds = seconds;
				interval.microseconds = microseconds;
				interval.__padding1 = 0;
				interval.__padding2 = 0;
				interval.__padding3 = 0;
				dateTime.u.interval = interval;
				value.datetime = dateTime;
				*miValue = value;		
			} 
			break;
		} 
		case MI_BOOLEANA:
		{
			Py_ssize_t size = PyList_Size(propertyValue);
			MI_BooleanA miBooleanA;
			miBooleanA.size = size;
			int i;
			MI_Boolean booleanA[size];
			for (i = 0; i < size; i++)
			{
			    PyObject* boolean = PyList_GetItem(propertyValue,i);
			    if(boolean == Py_False)
			    {
					booleanA[i] = MI_FALSE;
			    }
			    else
			    {
					booleanA[i] = MI_TRUE;
			    }
			}
			miBooleanA.data = booleanA;
			value.booleana = miBooleanA;
			*miValue = value;
			break; 
		}
		case MI_UINT8A:
		{
			Py_ssize_t size = PyList_Size(propertyValue);
			MI_Uint8A miUint8A;
			miUint8A.size = size;
			int i;
			MI_Uint8 uint8A[size];			
			for (i = 0; i < size; i++)
			{
				PyObject *value = PyList_GetItem(propertyValue,i);
				uint8A[i] = PyInt_AsLong(value);
			}
			miUint8A.data = uint8A;
			value.uint8a = miUint8A;
			*miValue = value;
			break;
		}
		case MI_SINT8A:
		{
			Py_ssize_t size = PyList_Size(propertyValue);
			MI_Sint8A miSint8A;
			miSint8A.size = size;
			int i;
			MI_Sint8 sint8A[size];	
			for (i = 0; i < size; i++)
			{
				PyObject *value = PyList_GetItem(propertyValue,i);
				sint8A[i] = PyInt_AsLong(value);
			}
			miSint8A.data = sint8A;
			value.sint8a = miSint8A;
			*miValue = value;
			break;
		}
		case MI_UINT16A:
		{
			Py_ssize_t size = PyList_Size(propertyValue);
			MI_Uint16A miUint16A;
			miUint16A.size = size;
			int i;
			MI_Uint16 uint16A[size];
			for (i = 0; i < size; i++)
			{
				PyObject *value = PyList_GetItem(propertyValue,i);
				uint16A[i] = PyInt_AsLong(value);
			}
			miUint16A.data = uint16A;
			value.uint16a = miUint16A;
			*miValue = value;
			break;
		}
		case MI_SINT16A:
		{
			Py_ssize_t size = PyList_Size(propertyValue);
			MI_Sint16A miSint16A;
			miSint16A.size = size;
			int i;
			MI_Sint16 sint16A[size];			
			for (i = 0; i < size; i++)
			{
				PyObject *value = PyList_GetItem(propertyValue,i);
				sint16A[i] = PyInt_AsLong(value);
			}
			miSint16A.data = sint16A;
			value.sint16a = miSint16A;
			*miValue = value;
			break;
		}
		case MI_UINT32A:
		{
			Py_ssize_t size = PyList_Size(propertyValue);
			MI_Uint32A miUint32A;
			miUint32A.size = size;
			int i;
			MI_Uint32 uint32A[size];			
			for (i = 0; i < size; i++)
			{
				PyObject *value = PyList_GetItem(propertyValue,i);
				uint32A[i] = PyLong_AsLong(value);
			}
			miUint32A.data = uint32A;
			value.uint32a = miUint32A;
			*miValue = value;
			break;
		}
		case MI_SINT32A:
		{
			Py_ssize_t size = PyList_Size(propertyValue);
			MI_Sint32A miSint32A;
			miSint32A.size = size;
			int i;
			MI_Sint32 sint32A[size];			
			for (i = 0; i < size; i++)
			{
				PyObject *value = PyList_GetItem(propertyValue,i);
				sint32A[i] = PyLong_AsLong(value);
			}
			miSint32A.data = sint32A;
			value.sint32a = miSint32A;
			*miValue = value;
			break;
		}
		case MI_UINT64A:
		{
			Py_ssize_t size = PyList_Size(propertyValue);
			MI_Uint64A miUint64A;
			miUint64A.size = size;
			int i;
			MI_Uint64 uint64A[size];			
			for (i = 0; i < size; i++)
			{
				PyObject *value = PyList_GetItem(propertyValue,i);
				uint64A[i] = PyLong_AsUnsignedLong(value);
			}
			miUint64A.data = uint64A;
			value.uint64a = miUint64A;
			*miValue = value;
			break;
		}
		case MI_SINT64A:
		{
			Py_ssize_t size = PyList_Size(propertyValue);
			MI_Sint64A miSint64A;
			miSint64A.size = size;
			int i;
			MI_Sint64 sint64A[size];			
			for (i = 0; i < size; i++)
			{
				PyObject *value = PyList_GetItem(propertyValue,i);
				sint64A[i] = PyLong_AsLong(value);
			}
			miSint64A.data = sint64A;
			value.sint64a = miSint64A;
			*miValue = value;
			break;
		}
		case MI_REAL32A:	
		{
			Py_ssize_t size = PyList_Size(propertyValue);
			MI_Real32A miReal32A;
			miReal32A.size = size;
			int i;
			MI_Real32 real32A[size];			
			for (i = 0; i < size; i++)
			{
				PyObject *value = PyList_GetItem(propertyValue,i);
				real32A[i] = PyFloat_AsDouble(value);
			}
			miReal32A.data = real32A;
			value.real32a = miReal32A;
			*miValue = value;
			break;
		}
		case MI_REAL64A:	
		{
			Py_ssize_t size = PyList_Size(propertyValue);
			MI_Real64A miReal64A;
			miReal64A.size = size;
			int i;
			MI_Real64 real64A[size];			
			for (i = 0; i < size; i++)
			{
				PyObject *value = PyList_GetItem(propertyValue,i);
				real64A[i] = PyFloat_AsDouble(value);
			}
			miReal64A.data = real64A;
			value.real64a = miReal64A;
			*miValue = value;
			break;
		}
		case MI_CHAR16A:
		{
			Py_ssize_t size = PyList_Size(propertyValue);
			MI_Char16A miChar16A;
			miChar16A.size = size;
			int i;
			MI_Char16 char16A[size];			
			for (i = 0; i < size; i++)
			{
				PyObject *value = PyList_GetItem(propertyValue,i);
				char16A[i] = PyInt_AsLong(value);
			}
			miChar16A.data = char16A;
			value.char16a = miChar16A;
			*miValue = value;
			break;
		}
		case MI_STRINGA:
		{
			Py_ssize_t size = PyList_Size(propertyValue);
			MI_StringA miStringA;
			miStringA.size = size;
			int i;
			MI_Char *stringA[size];			
			for (i = 0; i < size; i++)
			{
				PyObject *value = PyList_GetItem(propertyValue,i);
				stringA[i] = PyString_AsString(value);
			}
			miStringA.data = stringA;
			value.stringa = miStringA;
			*miValue = value;
			break;
		}
		case MI_DATETIMEA:
		{
			//to implement
			Py_ssize_t size = PyList_Size(propertyValue);
			MI_DatetimeA miDatetimeA;
			miDatetimeA.size = size;
			break;
		}
		case MI_INSTANCE:
		{
			PMI_Instance *pmiInstance = (PMI_Instance *)propertyValue;
			MI_Instance *miInstance = pmiInstance->miInstance;
			value.instance = miInstance;
			*miValue = value;
			break;
		}
		case MI_REFERENCE:
		{
			PMI_Instance *pmiInstance = (PMI_Instance *)propertyValue;
			MI_Instance *miReference = pmiInstance->miInstance;
			value.reference = miReference;
			*miValue = value;
			break;
		}
		case MI_INSTANCEA:
		{
			Py_ssize_t size = PyList_Size(propertyValue);
			MI_InstanceA miInstanceA;
			miInstanceA.size = size;
			int i;
			MI_Instance *instanceA[size]; 
			for(i = 0; i< size; i++)
			{
				PyObject *value = PyList_GetItem(propertyValue,i);
				PMI_Instance *pmiInstance = (PMI_Instance *)value;				
				instanceA[i] = pmiInstance->miInstance;
			}
			miInstanceA.data = instanceA;
			value.instancea = miInstanceA;
			*miValue = value;
			break;
		}
		case MI_REFERENCEA:
		{
			Py_ssize_t size = PyList_Size(propertyValue);
			MI_ReferenceA miReferenceA;
			miReferenceA.size = size;
			int i;
			MI_Instance *referenceA[size];			
			for(i = 0; i< size; i++)
			{
				PyObject *value = PyList_GetItem(propertyValue,i);
				PMI_Instance *pmiInstance = (PMI_Instance *)value;
				referenceA[i] = pmiInstance->miInstance;
			}
			miReferenceA.data = referenceA;
			value.referencea = miReferenceA;
			*miValue = value;
			break;
		}
	}
}