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;
}
}
}