| 3769 | |
| 3770 | template< typename T > |
| 3771 | ETrackedPropertyError CVRPropertyHelpers::GetPropertyVector( PropertyContainerHandle_t ulContainer, ETrackedDeviceProperty prop, PropertyTypeTag_t unExpectedTag, std::vector<T> *pvecResults ) |
| 3772 | { |
| 3773 | ETrackedPropertyError err; |
| 3774 | PropertyTypeTag_t unTag; |
| 3775 | uint32_t unNeeded; |
| 3776 | if ( pvecResults->empty() ) |
| 3777 | unNeeded = GetProperty( ulContainer, prop, nullptr, 0, &unTag, &err ); |
| 3778 | else |
| 3779 | unNeeded = GetProperty( ulContainer, prop, &(*pvecResults)[0], (uint32_t)(pvecResults->size() * sizeof( T )), &unTag, &err ); |
| 3780 | uint32_t unFound = unNeeded / sizeof( T ); |
| 3781 | if ( err == TrackedProp_Success ) |
| 3782 | { |
| 3783 | if ( unTag != unExpectedTag && unFound > 0 ) |
| 3784 | { |
| 3785 | return TrackedProp_WrongDataType; |
| 3786 | } |
| 3787 | |
| 3788 | pvecResults->resize( unFound ); |
| 3789 | return TrackedProp_Success; |
| 3790 | } |
| 3791 | else if ( err == TrackedProp_BufferTooSmall ) |
| 3792 | { |
| 3793 | pvecResults->resize( unFound ); |
| 3794 | unNeeded = GetProperty( ulContainer, prop, &(*pvecResults)[0], (uint32_t)(pvecResults->size() * sizeof( T )), &unTag, &err ); |
| 3795 | unFound = unNeeded / sizeof( T ); |
| 3796 | |
| 3797 | if ( err == TrackedProp_Success ) |
| 3798 | { |
| 3799 | if ( unTag != unExpectedTag ) |
| 3800 | { |
| 3801 | return TrackedProp_WrongDataType; |
| 3802 | } |
| 3803 | |
| 3804 | pvecResults->resize( unFound ); |
| 3805 | return TrackedProp_Success; |
| 3806 | } |
| 3807 | } |
| 3808 | return err; |
| 3809 | } |
| 3810 | |
| 3811 | inline bool CVRPropertyHelpers::IsPropertySet( PropertyContainerHandle_t ulContainer, ETrackedDeviceProperty prop, ETrackedPropertyError *peError ) |
| 3812 | { |