23 #ifndef __SYMMETRIC_MATRIX_H__
24 #define __SYMMETRIC_MATRIX_H__
26 #include "data_management/data/numeric_table.h"
27 #include "services/daal_memory.h"
28 #include "services/daal_defines.h"
29 #include "data_management/data/data_serialize.h"
33 namespace data_management
46 class PackedArrayNumericTableIface
49 virtual ~PackedArrayNumericTableIface()
59 virtual services::Status getPackedArray(ReadWriteMode rwflag, BlockDescriptor<double> &block) = 0;
69 virtual services::Status getPackedArray(ReadWriteMode rwflag, BlockDescriptor<float> &block) = 0;
79 virtual services::Status getPackedArray(ReadWriteMode rwflag, BlockDescriptor<int> &block) = 0;
85 virtual services::Status releasePackedArray(BlockDescriptor<double> &block) = 0;
91 virtual services::Status releasePackedArray(BlockDescriptor<float> &block) = 0;
97 virtual services::Status releasePackedArray(BlockDescriptor<int> &block) = 0;
105 template<NumericTableIface::StorageLayout packedLayout,
typename DataType = DAAL_DATA_TYPE>
106 class DAAL_EXPORT PackedSymmetricMatrix :
public NumericTable,
public PackedArrayNumericTableIface
109 DECLARE_SERIALIZABLE_TAG();
110 DECLARE_SERIALIZABLE_IMPL();
115 typedef DataType baseDataType;
124 PackedSymmetricMatrix( DataType *
const ptr = 0,
size_t nDim = 0 ):
125 NumericTable( nDim, nDim )
127 _layout = packedLayout;
128 this->_status |= setArray( services::SharedPtr<DataType>(ptr, services::EmptyDeleter()) );
130 NumericTableFeature df;
131 df.setType<DataType>();
132 this->_status |= _ddict->setAllFeatures(df);
141 PackedSymmetricMatrix(
const services::SharedPtr<DataType> &ptr,
size_t nDim ):
142 NumericTable( nDim, nDim )
144 _layout = packedLayout;
145 this->_status |= setArray( ptr );
147 NumericTableFeature df;
148 df.setType<DataType>();
149 this->_status |= _ddict->setAllFeatures(df);
152 PackedSymmetricMatrix(
size_t nDim ):
153 NumericTable( nDim, nDim )
155 _layout = packedLayout;
157 NumericTableFeature df;
158 df.setType<DataType>();
159 this->_status |= _ddict->setAllFeatures(df);
169 static services::SharedPtr<PackedSymmetricMatrix> create(DataType *
const ptr = 0,
size_t nDim = 0,
170 services::Status* stat = NULL)
172 return create(services::SharedPtr<DataType>(ptr, services::EmptyDeleter()), nDim, stat);
182 static services::SharedPtr<PackedSymmetricMatrix> create(
const services::SharedPtr<DataType> &ptr,
size_t nDim,
183 services::Status* stat = NULL)
185 DAAL_DEFAULT_CREATE_TEMPLATE_IMPL_EX(PackedSymmetricMatrix, DAAL_TEMPLATE_ARGUMENTS(packedLayout,DataType), ptr, nDim);
195 PackedSymmetricMatrix( DataType *
const ptr,
size_t nDim,
const DataType &constValue ):
196 NumericTable( nDim, nDim )
198 _layout = packedLayout;
199 this->_status |= setArray( services::SharedPtr<DataType>(ptr, services::EmptyDeleter()) );
201 NumericTableFeature df;
202 df.setType<DataType>();
203 this->_status |= _ddict->setAllFeatures(df);
205 this->_status |= assign( constValue );
215 PackedSymmetricMatrix(
const services::SharedPtr<DataType>& ptr,
size_t nDim,
const DataType &constValue ) :
216 NumericTable( nDim, nDim )
218 _layout = packedLayout;
219 this->_status |= setArray( ptr );
221 NumericTableFeature df;
222 df.setType<DataType>();
223 this->_status |= _ddict->setAllFeatures(df);
225 this->_status |= assign( constValue );
236 static services::SharedPtr<PackedSymmetricMatrix> create(DataType *
const ptr,
size_t nDim,
const DataType &constValue,
237 services::Status* stat = NULL)
239 return create(services::SharedPtr<DataType>(ptr, services::EmptyDeleter()), nDim, constValue, stat);
250 static services::SharedPtr<PackedSymmetricMatrix> create(
const services::SharedPtr<DataType> &ptr,
size_t nDim,
const DataType &constValue,
251 services::Status* stat = NULL)
253 DAAL_DEFAULT_CREATE_TEMPLATE_IMPL_EX(PackedSymmetricMatrix, DAAL_TEMPLATE_ARGUMENTS(packedLayout,DataType), ptr, nDim, constValue);
262 PackedSymmetricMatrix(
size_t nDim, AllocationFlag memoryAllocationFlag ):
263 NumericTable( nDim, nDim )
265 _layout = packedLayout;
267 NumericTableFeature df;
268 df.setType<DataType>();
269 this->_status |= _ddict->setAllFeatures(df);
271 if( memoryAllocationFlag == doAllocate ) this->_status |= allocateDataMemoryImpl();
281 static services::SharedPtr<PackedSymmetricMatrix> create(
size_t nDim, AllocationFlag memoryAllocationFlag,
282 services::Status* stat = NULL)
284 DAAL_DEFAULT_CREATE_TEMPLATE_IMPL_EX(PackedSymmetricMatrix, DAAL_TEMPLATE_ARGUMENTS(packedLayout,DataType), nDim, memoryAllocationFlag);
294 PackedSymmetricMatrix(
size_t nDim, NumericTable::AllocationFlag memoryAllocationFlag,
295 const DataType &constValue ):
296 NumericTable( nDim, nDim )
298 _layout = packedLayout;
300 NumericTableFeature df;
301 df.setType<DataType>();
302 this->_status |= _ddict->setAllFeatures(df);
304 if( memoryAllocationFlag == doAllocate ) this->_status |= allocateDataMemoryImpl();
305 this->_status |= assign(constValue);
316 static services::SharedPtr<PackedSymmetricMatrix> create(
size_t nDim, NumericTable::AllocationFlag memoryAllocationFlag,
317 const DataType &constValue, services::Status* stat = NULL)
319 DAAL_DEFAULT_CREATE_TEMPLATE_IMPL_EX(PackedSymmetricMatrix, DAAL_TEMPLATE_ARGUMENTS(packedLayout,DataType), \
320 nDim, memoryAllocationFlag, constValue);
324 virtual ~PackedSymmetricMatrix()
326 freeDataMemoryImpl();
333 DataType *getArray()
const
335 return (DataType*)_ptr.get();
342 services::SharedPtr<DataType> getArraySharedPtr()
const
344 return services::reinterpretPointerCast<DataType, byte>(_ptr);
351 services::Status setArray( DataType *
const ptr )
353 freeDataMemoryImpl();
355 return services::Status(services::ErrorEmptyHomogenNumericTable);
357 _ptr = services::SharedPtr<byte>((byte*)ptr, services::EmptyDeleter());
358 _memStatus = userAllocated;
359 return services::Status();
366 services::Status setArray(
const services::SharedPtr<DataType>& ptr )
368 freeDataMemoryImpl();
370 return services::Status(services::ErrorEmptyHomogenNumericTable);
372 _ptr = services::reinterpretPointerCast<byte, DataType>(ptr);
373 _memStatus = userAllocated;
374 return services::Status();
381 template <
typename T>
382 services::Status assign(T value)
384 if( _memStatus == notAllocated )
385 return services::Status(services::ErrorEmptyHomogenNumericTable);
387 size_t nDim = getNumberOfColumns();
389 DataType * ptr = (DataType*)_ptr.get();
390 DataType valueDataType = (DataType)value;
391 for(
size_t i = 0; i < (nDim * (nDim + 1)) / 2 ; i++ )
393 ptr[i] = valueDataType;
395 return services::Status();
401 virtual services::Status assign(
float value) DAAL_C11_OVERRIDE {
return assign<DataType>((DataType)value);}
406 virtual services::Status assign(
double value) DAAL_C11_OVERRIDE {
return assign<DataType>((DataType)value);}
411 virtual services::Status assign(
int value) DAAL_C11_OVERRIDE {
return assign<DataType>((DataType)value);}
413 services::Status getBlockOfRows(
size_t vector_idx,
size_t vector_num, ReadWriteMode rwflag, BlockDescriptor<double> &block) DAAL_C11_OVERRIDE
415 return getTBlock<double>(vector_idx, vector_num, rwflag, block);
417 services::Status getBlockOfRows(
size_t vector_idx,
size_t vector_num, ReadWriteMode rwflag, BlockDescriptor<float> &block) DAAL_C11_OVERRIDE
419 return getTBlock<float>(vector_idx, vector_num, rwflag, block);
421 services::Status getBlockOfRows(
size_t vector_idx,
size_t vector_num, ReadWriteMode rwflag, BlockDescriptor<int> &block) DAAL_C11_OVERRIDE
423 return getTBlock<int>(vector_idx, vector_num, rwflag, block);
426 services::Status releaseBlockOfRows(BlockDescriptor<double> &block) DAAL_C11_OVERRIDE
428 return releaseTBlock<double>(block);
430 services::Status releaseBlockOfRows(BlockDescriptor<float> &block) DAAL_C11_OVERRIDE
432 return releaseTBlock<float>(block);
434 services::Status releaseBlockOfRows(BlockDescriptor<int> &block) DAAL_C11_OVERRIDE
436 return releaseTBlock<int>(block);
439 services::Status getBlockOfColumnValues(
size_t feature_idx,
size_t vector_idx,
size_t value_num,
440 ReadWriteMode rwflag, BlockDescriptor<double> &block) DAAL_C11_OVERRIDE
442 return getTFeature<double>(feature_idx, vector_idx, value_num, rwflag, block);
444 services::Status getBlockOfColumnValues(
size_t feature_idx,
size_t vector_idx,
size_t value_num,
445 ReadWriteMode rwflag, BlockDescriptor<float> &block) DAAL_C11_OVERRIDE
447 return getTFeature<float>(feature_idx, vector_idx, value_num, rwflag, block);
449 services::Status getBlockOfColumnValues(
size_t feature_idx,
size_t vector_idx,
size_t value_num,
450 ReadWriteMode rwflag, BlockDescriptor<int> &block) DAAL_C11_OVERRIDE
452 return getTFeature<int>(feature_idx, vector_idx, value_num, rwflag, block);
455 services::Status releaseBlockOfColumnValues(BlockDescriptor<double> &block) DAAL_C11_OVERRIDE
457 return releaseTFeature<double>(block);
459 services::Status releaseBlockOfColumnValues(BlockDescriptor<float> &block) DAAL_C11_OVERRIDE
461 return releaseTFeature<float>(block);
463 services::Status releaseBlockOfColumnValues(BlockDescriptor<int> &block) DAAL_C11_OVERRIDE
465 return releaseTFeature<int>(block);
469 services::Status getPackedArray(ReadWriteMode rwflag, BlockDescriptor<double> &block) DAAL_C11_OVERRIDE
471 return getTPackedArray<double>(rwflag, block);
473 services::Status getPackedArray(ReadWriteMode rwflag, BlockDescriptor<float> &block) DAAL_C11_OVERRIDE
475 return getTPackedArray<float>(rwflag, block);
477 services::Status getPackedArray(ReadWriteMode rwflag, BlockDescriptor<int> &block) DAAL_C11_OVERRIDE
479 return getTPackedArray<int>(rwflag, block);
482 services::Status releasePackedArray(BlockDescriptor<double> &block) DAAL_C11_OVERRIDE
484 return releaseTPackedArray<double>(block);
486 services::Status releasePackedArray(BlockDescriptor<float> &block) DAAL_C11_OVERRIDE
488 return releaseTPackedArray<float>(block);
490 services::Status releasePackedArray(BlockDescriptor<int> &block) DAAL_C11_OVERRIDE
492 return releaseTPackedArray<int>(block);
496 services::SharedPtr<byte> _ptr;
498 PackedSymmetricMatrix(
const services::SharedPtr<DataType> &ptr,
size_t nDim, services::Status &st):
499 NumericTable(nDim, nDim, DictionaryIface::notEqual, st)
501 _layout = packedLayout;
502 st |= setArray( ptr );
504 NumericTableFeature df;
505 df.setType<DataType>();
506 st |= _ddict->setAllFeatures(df);
509 PackedSymmetricMatrix(
const services::SharedPtr<DataType>& ptr,
size_t nDim,
const DataType &constValue,
510 services::Status &st) :
511 NumericTable(nDim, nDim, DictionaryIface::notEqual, st)
513 _layout = packedLayout;
514 st |= setArray( ptr );
516 NumericTableFeature df;
517 df.setType<DataType>();
518 st |= _ddict->setAllFeatures(df);
520 st |= assign( constValue );
523 PackedSymmetricMatrix(
size_t nDim, AllocationFlag memoryAllocationFlag, services::Status &st):
524 NumericTable(nDim, nDim, DictionaryIface::notEqual, st)
526 _layout = packedLayout;
528 NumericTableFeature df;
529 df.setType<DataType>();
530 st |= _ddict->setAllFeatures(df);
532 if( memoryAllocationFlag == doAllocate ) st |= allocateDataMemoryImpl();
535 PackedSymmetricMatrix(
size_t nDim, NumericTable::AllocationFlag memoryAllocationFlag,
536 const DataType &constValue, services::Status &st):
537 NumericTable(nDim, nDim, DictionaryIface::notEqual, st)
539 _layout = packedLayout;
541 NumericTableFeature df;
542 df.setType<DataType>();
543 st |= _ddict->setAllFeatures(df);
545 if( memoryAllocationFlag == doAllocate ) st |= allocateDataMemoryImpl();
546 st |= assign(constValue);
549 services::Status allocateDataMemoryImpl(daal::MemType type = daal::dram) DAAL_C11_OVERRIDE
551 freeDataMemoryImpl();
553 size_t nDim = getNumberOfColumns();
554 size_t size = (nDim * (nDim + 1)) / 2;
557 return services::Status(getNumberOfColumns() == 0 ? services::ErrorIncorrectNumberOfFeatures :
558 services::ErrorIncorrectNumberOfObservations);
560 _ptr = services::SharedPtr<byte>((byte *)daal::services::daal_malloc( size *
sizeof(DataType) ), services::ServiceDeleter());
563 return services::Status(services::ErrorMemoryAllocationFailed);
565 _memStatus = internallyAllocated;
566 return services::Status();
569 void freeDataMemoryImpl() DAAL_C11_OVERRIDE
572 _memStatus = notAllocated;
576 template<
typename Archive,
bool onDeserialize>
577 services::Status serialImpl( Archive *arch )
579 NumericTable::serialImpl<Archive, onDeserialize>( arch );
583 allocateDataMemoryImpl();
586 size_t nDim = getNumberOfColumns();
587 size_t size = (nDim * (nDim + 1)) / 2;
589 arch->set( (DataType*)_ptr.get(), size );
591 return services::Status();
595 template<
typename T1,
typename T2>
596 void internal_repack(
size_t p,
size_t n, T1 *src, T2 *dst )
598 if( IsSameType<T1, T2>::value )
600 if( src != (T1 *)dst )
602 daal::services::daal_memcpy_s(dst, n * p *
sizeof(T1), src, n * p *
sizeof(T1));
609 for(i = 0; i < n; i++)
611 for(j = 0; j < p; j++)
613 dst[i * p + j] =
static_cast<T2
>(src[i * p + j]);
619 template<
typename T1,
typename T2>
620 void internal_set_col_repack(
size_t p,
size_t n, T1 *src, T2 *dst )
624 for(i = 0; i < n; i++)
626 dst[i * p] =
static_cast<T2
>(src[i]);
631 baseDataType &getBaseValue(
size_t dim,
size_t rowIdx,
size_t colIdx )
633 size_t rowStartOffset, colStartOffset;
635 if( packedLayout == upperPackedSymmetricMatrix )
637 if( colIdx < rowIdx )
645 rowStartOffset = ((2 * dim - 1 * (rowIdx - 1)) * rowIdx) / 2;
646 colStartOffset = colIdx - rowIdx;
650 if( colIdx > rowIdx )
658 rowStartOffset = ((2 + 1 * (rowIdx - 1)) * rowIdx) / 2;
659 colStartOffset = colIdx;
662 return *((DataType*)_ptr.get() + rowStartOffset + colStartOffset);
665 template <
typename T>
666 T getValue(
size_t dim,
size_t rowIdx,
size_t colIdx )
668 return static_cast<T
>( getBaseValue( dim, rowIdx, colIdx ) );
671 template <
typename T>
672 services::Status setValue(
size_t dim,
size_t rowIdx,
size_t colIdx, T value )
674 getBaseValue( dim, rowIdx, colIdx ) =
static_cast<baseDataType
>( value );
675 return services::Status();
678 template <
typename T>
679 services::Status getTBlock(
size_t idx,
size_t nrows,
int rwFlag, BlockDescriptor<T> &block)
681 size_t nDim = getNumberOfColumns();
682 block.setDetails( 0, idx, rwFlag );
686 block.resizeBuffer( nDim, 0 );
687 return services::Status();
690 nrows = ( idx + nrows < nDim ) ? nrows : nDim - idx;
692 if( !block.resizeBuffer( nDim, nrows ) )
693 return services::Status(services::ErrorMemoryAllocationFailed);
695 if((rwFlag & (
int)readOnly))
697 T *buffer = block.getBlockPtr();
699 for(
size_t iRow = 0; iRow < nrows; iRow++)
701 for(
size_t iCol = 0; iCol < nDim; iCol++)
703 buffer[iRow * nDim + iCol] = getValue<T>(nDim, iRow + idx, iCol);
707 return services::Status();
710 template <
typename T>
711 services::Status releaseTBlock( BlockDescriptor<T> &block )
714 if(block.getRWFlag() & (int)writeOnly)
716 size_t nDim = getNumberOfColumns();
717 size_t nrows = block.getNumberOfRows();
718 size_t idx = block.getRowsOffset();
719 T *buffer = block.getBlockPtr();
721 for(
size_t iRow = 0; iRow < nrows; iRow++ )
723 for(
size_t iCol = 0; iCol < nDim; iCol++ )
725 s |= setValue<T>( nDim, idx + iRow, iCol, buffer[ iRow * nDim + iCol ] );
733 template <
typename T>
734 services::Status getTFeature(
size_t feat_idx,
size_t idx,
size_t nrows,
int rwFlag, BlockDescriptor<T> &block)
736 size_t nDim = getNumberOfColumns();
737 block.setDetails( feat_idx, idx, rwFlag );
741 block.resizeBuffer( nDim, 0 );
742 return services::Status();
745 nrows = ( idx + nrows < nDim ) ? nrows : nDim - idx;
747 if( !block.resizeBuffer( 1, nrows ) )
748 return services::Status();
750 if((block.getRWFlag() & (int)readOnly))
752 T *buffer = block.getBlockPtr();
754 for(
size_t iRow = 0; iRow < nrows; iRow++)
756 buffer[iRow] = getValue<T>(nDim, iRow + idx, feat_idx);
759 return services::Status();
762 template <
typename T>
763 services::Status releaseTFeature( BlockDescriptor<T> &block )
766 if (block.getRWFlag() & (int)writeOnly)
768 size_t nDim = getNumberOfColumns();
769 size_t nrows = block.getNumberOfRows();
770 size_t idx = block.getRowsOffset();
771 size_t feat_idx = block.getColumnsOffset();
772 T *buffer = block.getBlockPtr();
774 for(
size_t iRow = 0; iRow < nrows; iRow++ )
776 s |= setValue<T>( nDim, iRow + idx, feat_idx, buffer[ iRow ] );
783 template <
typename T>
784 services::Status getTPackedArray(
int rwFlag, BlockDescriptor<T> &block )
786 size_t nDim = getNumberOfColumns();
787 block.setDetails( 0, 0, rwFlag );
789 size_t nSize = (nDim * (nDim + 1)) / 2;
791 if( IsSameType<T, DataType>::value )
793 block.setPtr( &_ptr, _ptr.get(), 1, nSize );
794 return services::Status();
797 if( !block.resizeBuffer( 1, nSize ) )
return services::Status();
799 if( !(rwFlag & (
int)readOnly) )
return services::Status();
801 T *buffer = block.getBlockPtr();
802 DataType * ptr = (DataType*) _ptr.get();
803 for(
size_t i = 0; i < nSize; i++ )
805 buffer[ i ] =
static_cast<T
>(*(ptr + i));
807 return services::Status();
810 template <
typename T>
811 services::Status releaseTPackedArray( BlockDescriptor<T> &block )
813 if( (block.getRWFlag() & (int)writeOnly) && !IsSameType<T, DataType>::value )
815 size_t nDim = getNumberOfColumns();
816 size_t nSize = (nDim * (nDim + 1)) / 2;
817 T *buffer = block.getBlockPtr();
818 DataType * ptr = (DataType*) _ptr.get();
820 for(
size_t i = 0; i < nSize; i++ )
822 *(ptr + i) = static_cast<baseDataType>(buffer[ i ]);
826 return services::Status();
829 virtual services::Status setNumberOfColumnsImpl(
size_t nDim) DAAL_C11_OVERRIDE
831 if( _ddict->getNumberOfFeatures() != nDim )
833 _ddict->setNumberOfFeatures( nDim );
835 NumericTableFeature df;
836 df.setType<DataType>();
837 _ddict->setAllFeatures(df);
841 return services::Status();
844 virtual services::Status setNumberOfRowsImpl(
size_t nDim) DAAL_C11_OVERRIDE
846 setNumberOfColumnsImpl( nDim );
848 return services::Status();
857 template<NumericTableIface::StorageLayout packedLayout,
typename DataType = DAAL_DATA_TYPE>
858 class DAAL_EXPORT PackedTriangularMatrix :
public NumericTable,
public PackedArrayNumericTableIface
861 DECLARE_SERIALIZABLE_TAG();
866 typedef DataType baseDataType;
874 PackedTriangularMatrix( DataType *
const ptr = 0,
size_t nDim = 0 ):
875 NumericTable( nDim, nDim )
877 _layout = packedLayout;
878 this->_status |= setArray( services::SharedPtr<DataType>(ptr, services::EmptyDeleter()) );
880 NumericTableFeature df;
881 df.setType<DataType>();
882 this->_status |= _ddict->setAllFeatures(df);
890 PackedTriangularMatrix(
const services::SharedPtr<DataType> &ptr,
size_t nDim ):
891 NumericTable( nDim, nDim )
893 _layout = packedLayout;
894 this->_status |= setArray( ptr );
896 NumericTableFeature df;
897 df.setType<DataType>();
898 this->_status |= _ddict->setAllFeatures(df);
901 PackedTriangularMatrix(
size_t nDim ):
902 NumericTable( nDim, nDim )
904 _layout = packedLayout;
906 NumericTableFeature df;
907 df.setType<DataType>();
908 this->_status |= _ddict->setAllFeatures(df);
911 static services::SharedPtr<PackedTriangularMatrix> create(DataType *
const ptr = 0,
size_t nDim = 0,
912 services::Status* stat = NULL)
914 return create(services::SharedPtr<DataType>(ptr, services::EmptyDeleter()), nDim, stat);
917 static services::SharedPtr<PackedTriangularMatrix> create(
const services::SharedPtr<DataType> &ptr,
size_t nDim,
918 services::Status* stat = NULL)
920 services::SharedPtr<PackedTriangularMatrix> ntPtr(
new PackedTriangularMatrix(nDim));
923 services::Status s = ntPtr->setArray(ptr);
925 ntPtr = services::SharedPtr<PackedTriangularMatrix>();
932 *stat = services::Status(services::ErrorMemoryAllocationFailed);
943 PackedTriangularMatrix( DataType *
const ptr,
size_t nDim,
const DataType &constValue ):
944 NumericTable( nDim, nDim )
946 _layout = packedLayout;
947 this->_status |= setArray( services::SharedPtr<DataType>(ptr, services::EmptyDeleter()) );
949 NumericTableFeature df;
950 df.setType<DataType>();
951 this->_status |= _ddict->setAllFeatures(df);
953 this->_status |= assign( constValue );
962 PackedTriangularMatrix(
const services::SharedPtr<DataType>& ptr,
size_t nDim,
const DataType &constValue ) :
963 NumericTable( nDim, nDim )
965 _layout = packedLayout;
966 this->_status |= setArray( ptr );
968 NumericTableFeature df;
969 df.setType<DataType>();
970 this->_status |= _ddict->setAllFeatures(df);
972 this->_status |= assign( constValue );
975 static services::SharedPtr<PackedTriangularMatrix> create(DataType *
const ptr,
size_t nDim,
const DataType &constValue,
976 services::Status* stat = NULL)
978 services::SharedPtr<PackedTriangularMatrix> ntPtr(
new PackedTriangularMatrix(nDim));
981 services::Status s = ntPtr->setArray( services::SharedPtr<DataType>(ptr, services::EmptyDeleter()) );
982 s.add(ntPtr->assign(constValue));
984 ntPtr = services::SharedPtr<PackedTriangularMatrix>();
991 *stat = services::Status(services::ErrorMemoryAllocationFailed);
996 static services::SharedPtr<PackedTriangularMatrix> create(services::SharedPtr<DataType> &ptr,
size_t nDim,
const DataType &constValue,
997 services::Status* stat = NULL)
999 services::SharedPtr<PackedTriangularMatrix> ntPtr(
new PackedTriangularMatrix(nDim));
1002 services::Status s = ntPtr->setArray(ptr);
1003 s.add(ntPtr->assign(constValue));
1005 ntPtr = services::SharedPtr<PackedTriangularMatrix>();
1012 *stat = services::Status(services::ErrorMemoryAllocationFailed);
1022 PackedTriangularMatrix(
size_t nDim, AllocationFlag memoryAllocationFlag ):
1023 NumericTable( nDim, nDim )
1025 _layout = packedLayout;
1027 NumericTableFeature df;
1028 df.setType<DataType>();
1029 this->_status |= _ddict->setAllFeatures(df);
1031 if( memoryAllocationFlag == doAllocate ) this->_status |= allocateDataMemoryImpl();
1034 static services::SharedPtr<PackedTriangularMatrix> create(
size_t nDim, AllocationFlag memoryAllocationFlag,
1035 services::Status* stat = NULL)
1037 services::SharedPtr<PackedTriangularMatrix> ntPtr(
new PackedTriangularMatrix(nDim));
1041 if(memoryAllocationFlag == doAllocate)
1043 s = ntPtr->allocateDataMemoryImpl();
1045 ntPtr = services::SharedPtr<PackedTriangularMatrix>();
1048 ntPtr = services::SharedPtr<PackedTriangularMatrix>();
1055 *stat = services::Status(services::ErrorMemoryAllocationFailed);
1066 PackedTriangularMatrix(
size_t nDim, NumericTable::AllocationFlag memoryAllocationFlag,
1067 const DataType &constValue ):
1068 NumericTable( nDim, nDim )
1070 _layout = packedLayout;
1072 NumericTableFeature df;
1073 df.setType<DataType>();
1074 this->_status |= _ddict->setAllFeatures(df);
1076 if( memoryAllocationFlag == doAllocate ) this->_status |= allocateDataMemoryImpl();
1077 this->_status |= assign(constValue);
1080 static services::SharedPtr<PackedTriangularMatrix> create(
size_t nDim, NumericTable::AllocationFlag memoryAllocationFlag,
1081 const DataType &constValue, services::Status* stat = NULL)
1083 services::SharedPtr<PackedTriangularMatrix> ntPtr(
new PackedTriangularMatrix(nDim));
1087 if(memoryAllocationFlag == doAllocate)
1089 s = ntPtr->allocateDataMemoryImpl();
1090 s.add(ntPtr->assign(constValue));
1092 ntPtr = services::SharedPtr<PackedTriangularMatrix>();
1095 ntPtr = services::SharedPtr<PackedTriangularMatrix>();
1102 *stat = services::Status(services::ErrorMemoryAllocationFailed);
1108 virtual ~PackedTriangularMatrix()
1110 freeDataMemoryImpl();
1113 virtual services::Status setNumberOfColumns(
size_t nDim) DAAL_C11_OVERRIDE
1115 if( _ddict->getNumberOfFeatures() != nDim )
1117 _ddict->setNumberOfFeatures( nDim );
1119 NumericTableFeature df;
1120 df.setType<DataType>();
1121 _ddict->setAllFeatures(df);
1125 return services::Status();
1128 virtual services::Status setNumberOfRows(
size_t nDim) DAAL_C11_OVERRIDE
1130 return setNumberOfColumns( nDim );
1137 DataType *getArray()
const
1139 return (DataType*)_ptr.get();
1146 services::SharedPtr<DataType> getArraySharedPtr()
const
1148 return services::reinterpretPointerCast<DataType, byte>(_ptr);
1155 services::Status setArray( DataType *
const ptr )
1157 freeDataMemoryImpl();
1159 return services::Status(services::ErrorEmptyHomogenNumericTable);
1161 _ptr = services::SharedPtr<byte>((DataType*)ptr, services::EmptyDeleter());
1162 _memStatus = userAllocated;
1163 return services::Status();
1170 services::Status setArray(
const services::SharedPtr<DataType>& ptr )
1172 freeDataMemoryImpl();
1174 return services::Status(services::ErrorEmptyHomogenNumericTable);
1176 _ptr = services::reinterpretPointerCast<byte, DataType>(ptr);
1177 _memStatus = userAllocated;
1178 return services::Status();
1185 template <
typename T>
1186 services::Status assign(T value)
1188 if( _memStatus == notAllocated )
1189 return services::Status(services::ErrorEmptyHomogenNumericTable);
1191 size_t nDim = getNumberOfColumns();
1193 DataType * ptr = (DataType*)_ptr.get();
1194 DataType valueDataType = (DataType)value;
1195 for(
size_t i = 0; i < (nDim * (nDim + 1)) / 2 ; i++ )
1197 ptr[i] = valueDataType;
1199 return services::Status();
1205 virtual services::Status assign(
float value) DAAL_C11_OVERRIDE {
return assign<DataType>((DataType)value);}
1210 virtual services::Status assign(
double value) DAAL_C11_OVERRIDE {
return assign<DataType>((DataType)value);}
1215 virtual services::Status assign(
int value) DAAL_C11_OVERRIDE {
return assign<DataType>((DataType)value);}
1217 services::Status getBlockOfRows(
size_t vector_idx,
size_t vector_num, ReadWriteMode rwflag, BlockDescriptor<double> &block) DAAL_C11_OVERRIDE
1219 return getTBlock<double>(vector_idx, vector_num, rwflag, block);
1221 services::Status getBlockOfRows(
size_t vector_idx,
size_t vector_num, ReadWriteMode rwflag, BlockDescriptor<float> &block) DAAL_C11_OVERRIDE
1223 return getTBlock<float>(vector_idx, vector_num, rwflag, block);
1225 services::Status getBlockOfRows(
size_t vector_idx,
size_t vector_num, ReadWriteMode rwflag, BlockDescriptor<int> &block) DAAL_C11_OVERRIDE
1227 return getTBlock<int>(vector_idx, vector_num, rwflag, block);
1230 services::Status releaseBlockOfRows(BlockDescriptor<double> &block) DAAL_C11_OVERRIDE
1232 return releaseTBlock<double>(block);
1234 services::Status releaseBlockOfRows(BlockDescriptor<float> &block) DAAL_C11_OVERRIDE
1236 return releaseTBlock<float>(block);
1238 services::Status releaseBlockOfRows(BlockDescriptor<int> &block) DAAL_C11_OVERRIDE
1240 return releaseTBlock<int>(block);
1243 services::Status getBlockOfColumnValues(
size_t feature_idx,
size_t vector_idx,
size_t value_num,
1244 ReadWriteMode rwflag, BlockDescriptor<double> &block) DAAL_C11_OVERRIDE
1246 return getTFeature<double>(feature_idx, vector_idx, value_num, rwflag, block);
1248 services::Status getBlockOfColumnValues(
size_t feature_idx,
size_t vector_idx,
size_t value_num,
1249 ReadWriteMode rwflag, BlockDescriptor<float> &block) DAAL_C11_OVERRIDE
1251 return getTFeature<float>(feature_idx, vector_idx, value_num, rwflag, block);
1253 services::Status getBlockOfColumnValues(
size_t feature_idx,
size_t vector_idx,
size_t value_num,
1254 ReadWriteMode rwflag, BlockDescriptor<int> &block) DAAL_C11_OVERRIDE
1256 return getTFeature<int>(feature_idx, vector_idx, value_num, rwflag, block);
1259 services::Status releaseBlockOfColumnValues(BlockDescriptor<double> &block) DAAL_C11_OVERRIDE
1261 return releaseTFeature<double>(block);
1263 services::Status releaseBlockOfColumnValues(BlockDescriptor<float> &block) DAAL_C11_OVERRIDE
1265 return releaseTFeature<float>(block);
1267 services::Status releaseBlockOfColumnValues(BlockDescriptor<int> &block) DAAL_C11_OVERRIDE
1269 return releaseTFeature<int>(block);
1272 services::Status getPackedArray(ReadWriteMode rwflag, BlockDescriptor<double> &block) DAAL_C11_OVERRIDE
1274 return getTPackedArray<double>(rwflag, block);
1276 services::Status getPackedArray(ReadWriteMode rwflag, BlockDescriptor<float> &block) DAAL_C11_OVERRIDE
1278 return getTPackedArray<float>(rwflag, block);
1280 services::Status getPackedArray(ReadWriteMode rwflag, BlockDescriptor<int> &block) DAAL_C11_OVERRIDE
1282 return getTPackedArray<int>(rwflag, block);
1285 services::Status releasePackedArray(BlockDescriptor<double> &block) DAAL_C11_OVERRIDE
1287 return releaseTPackedArray<double>(block);
1289 services::Status releasePackedArray(BlockDescriptor<float> &block) DAAL_C11_OVERRIDE
1291 return releaseTPackedArray<float>(block);
1293 services::Status releasePackedArray(BlockDescriptor<int> &block) DAAL_C11_OVERRIDE
1295 return releaseTPackedArray<int>(block);
1299 services::Status serializeImpl (InputDataArchive *arch) DAAL_C11_OVERRIDE
1301 serialImpl<InputDataArchive, false>( arch );
1303 return services::Status();
1307 services::Status deserializeImpl(
const OutputDataArchive *arch) DAAL_C11_OVERRIDE
1309 serialImpl<const OutputDataArchive, true>( arch );
1311 return services::Status();
1315 services::SharedPtr<byte> _ptr;
1317 services::Status allocateDataMemoryImpl(daal::MemType type = daal::dram) DAAL_C11_OVERRIDE
1319 freeDataMemoryImpl();
1321 size_t nDim = getNumberOfColumns();
1322 size_t size = (nDim * (nDim + 1)) / 2;
1325 return services::Status(getNumberOfColumns() == 0 ? services::ErrorIncorrectNumberOfFeatures :
1326 services::ErrorIncorrectNumberOfObservations);
1328 _ptr = services::SharedPtr<byte>((byte *)daal::services::daal_malloc( size *
sizeof(DataType) ), services::ServiceDeleter());
1331 return services::Status(services::ErrorMemoryAllocationFailed);
1333 _memStatus = internallyAllocated;
1334 return services::Status();
1337 void freeDataMemoryImpl() DAAL_C11_OVERRIDE
1340 _memStatus = notAllocated;
1344 template<
typename Archive,
bool onDeserialize>
1345 services::Status serialImpl( Archive *arch )
1347 NumericTable::serialImpl<Archive, onDeserialize>( arch );
1351 allocateDataMemoryImpl();
1354 size_t nDim = getNumberOfColumns();
1355 size_t size = (nDim * (nDim + 1)) / 2;
1357 arch->set( (DataType*)_ptr.get(), size );
1359 return services::Status();
1363 template<
typename T1,
typename T2>
1364 void internal_repack(
size_t p,
size_t n, T1 *src, T2 *dst )
1366 if( IsSameType<T1, T2>::value )
1368 if( src != (T1 *)dst )
1370 daal::services::daal_memcpy_s(dst, n * p *
sizeof(T1), src, n * p *
sizeof(T1));
1377 for(i = 0; i < n; i++)
1379 for(j = 0; j < p; j++)
1381 dst[i * p + j] =
static_cast<T2
>(src[i * p + j]);
1387 template<
typename T1,
typename T2>
1388 void internal_set_col_repack(
size_t p,
size_t n, T1 *src, T2 *dst )
1392 for(i = 0; i < n; i++)
1394 dst[i * p] =
static_cast<T2
>(src[i]);
1399 baseDataType &getBaseValue(
size_t dim,
size_t rowIdx,
size_t colIdx, baseDataType &zero )
1401 size_t rowStartOffset, colStartOffset;
1403 if( packedLayout == upperPackedTriangularMatrix )
1405 if( colIdx < rowIdx )
1410 rowStartOffset = ((2 * dim - 1 * (rowIdx - 1)) * rowIdx) / 2;
1411 colStartOffset = colIdx - rowIdx;
1415 if( colIdx > rowIdx )
1420 rowStartOffset = ((2 + 1 * (rowIdx - 1)) * rowIdx) / 2;
1421 colStartOffset = colIdx;
1424 return *((DataType*)_ptr.get() + rowStartOffset + colStartOffset);
1427 template <
typename T>
1428 T getValue(
size_t dim,
size_t rowIdx,
size_t colIdx )
1430 baseDataType zero = (baseDataType)0;
1431 return static_cast<T
>( getBaseValue( dim, rowIdx, colIdx, zero ) );
1434 template <
typename T>
1435 services::Status setValue(
size_t dim,
size_t rowIdx,
size_t colIdx, T value )
1437 baseDataType zero = (baseDataType)0;
1438 getBaseValue( dim, rowIdx, colIdx, zero ) =
static_cast<baseDataType
>( value );
1439 return services::Status();
1442 template <
typename T>
1443 services::Status getTBlock(
size_t idx,
size_t nrows,
int rwFlag, BlockDescriptor<T> &block)
1445 size_t nDim = getNumberOfColumns();
1446 block.setDetails( 0, idx, rwFlag );
1450 block.resizeBuffer( nDim, 0 );
1451 return services::Status();
1454 nrows = ( idx + nrows < nDim ) ? nrows : nDim - idx;
1456 if( !block.resizeBuffer( nDim, nrows ) )
1457 return services::Status(services::ErrorMemoryAllocationFailed);
1459 if((rwFlag & (
int)readOnly))
1461 T *buffer = block.getBlockPtr();
1463 for(
size_t iRow = 0; iRow < nrows; iRow++)
1465 for(
size_t iCol = 0; iCol < nDim; iCol++)
1467 buffer[iRow * nDim + iCol] = getValue<T>(nDim, iRow + idx, iCol);
1471 return services::Status();
1474 template <
typename T>
1475 services::Status releaseTBlock( BlockDescriptor<T> &block )
1478 if(block.getRWFlag() & (int)writeOnly)
1480 size_t nDim = getNumberOfColumns();
1481 size_t nrows = block.getNumberOfRows();
1482 size_t idx = block.getRowsOffset();
1483 T *buffer = block.getBlockPtr();
1485 for(
size_t iRow = 0; iRow < nrows; iRow++ )
1487 for(
size_t iCol = 0; iCol < nDim; iCol++ )
1489 s |= setValue<T>( nDim, iRow + idx, iCol, buffer[ iRow * nDim + iCol ] );
1497 template <
typename T>
1498 services::Status getTFeature(
size_t feat_idx,
size_t idx,
size_t nrows,
int rwFlag, BlockDescriptor<T> &block)
1500 size_t nDim = getNumberOfColumns();
1501 block.setDetails( feat_idx, idx, rwFlag );
1505 block.resizeBuffer( nDim, 0 );
1506 return services::Status();
1509 nrows = ( idx + nrows < nDim ) ? nrows : nDim - idx;
1511 if( !block.resizeBuffer( 1, nrows ) )
1512 return services::Status();
1514 if((block.getRWFlag() & (int)readOnly))
1516 T *buffer = block.getBlockPtr();
1517 for(
size_t iRow = 0; iRow < nrows; iRow++ )
1519 buffer[ iRow ] = getValue<T>( nDim, iRow + idx, feat_idx );
1522 return services::Status();
1525 template <
typename T>
1526 services::Status releaseTFeature( BlockDescriptor<T> &block )
1529 if (block.getRWFlag() & (int)writeOnly)
1531 size_t nDim = getNumberOfColumns();
1532 size_t nrows = block.getNumberOfRows();
1533 size_t idx = block.getRowsOffset();
1534 size_t feat_idx = block.getColumnsOffset();
1535 T *buffer = block.getBlockPtr();
1537 for(
size_t iRow = 0; iRow < nrows; iRow++ )
1539 s |= setValue<T>( nDim, iRow + idx, feat_idx, buffer[ iRow ] );
1546 template <
typename T>
1547 services::Status getTPackedArray(
int rwFlag, BlockDescriptor<T> &block )
1549 size_t nDim = getNumberOfColumns();
1550 block.setDetails( 0, 0, rwFlag );
1552 size_t nSize = (nDim * (nDim + 1)) / 2;
1554 if( IsSameType<T, DataType>::value )
1556 block.setPtr( &_ptr, _ptr.get(), 1, nSize );
1557 return services::Status();
1560 if( !block.resizeBuffer( 1, nSize ) )
return services::Status();
1562 if( !(rwFlag & (
int)readOnly) )
return services::Status();
1564 T *buffer = block.getBlockPtr();
1565 DataType * ptr = (DataType*)_ptr.get();
1566 for(
size_t i = 0; i < nSize; i++ )
1568 buffer[ i ] =
static_cast<T
>(*(ptr + i));
1570 return services::Status();
1573 template <
typename T>
1574 services::Status releaseTPackedArray( BlockDescriptor<T> &block )
1576 if( (block.getRWFlag() & (int)writeOnly) && !IsSameType<T, DataType>::value )
1578 size_t nDim = getNumberOfColumns();
1579 size_t nSize = (nDim * (nDim + 1)) / 2;
1580 T *buffer = block.getBlockPtr();
1581 DataType * ptr = (DataType*)_ptr.get();
1583 for(
size_t i = 0; i < nSize; i++ )
1585 *(ptr + i) = static_cast<baseDataType>(buffer[ i ]);
1589 return services::Status();
1592 virtual services::Status setNumberOfColumnsImpl(
size_t nDim) DAAL_C11_OVERRIDE
1594 if( _ddict->getNumberOfFeatures() != nDim )
1596 _ddict->setNumberOfFeatures( nDim );
1598 NumericTableFeature df;
1599 df.setType<DataType>();
1600 _ddict->setAllFeatures(df);
1604 return services::Status();
1607 virtual services::Status setNumberOfRowsImpl(
size_t nDim) DAAL_C11_OVERRIDE
1609 setNumberOfColumnsImpl( nDim );
1611 return services::Status();
1616 using interface1::PackedArrayNumericTableIface;
1617 using interface1::PackedSymmetricMatrix;
1618 using interface1::PackedTriangularMatrix;
daal::data_management::interface1::PackedSymmetricMatrix::getBlockOfColumnValues
services::Status getBlockOfColumnValues(size_t feature_idx, size_t vector_idx, size_t value_num, ReadWriteMode rwflag, BlockDescriptor< float > &block) DAAL_C11_OVERRIDE
Definition: symmetric_matrix.h:444
daal::data_management::interface1::PackedTriangularMatrix::getBlockOfColumnValues
services::Status getBlockOfColumnValues(size_t feature_idx, size_t vector_idx, size_t value_num, ReadWriteMode rwflag, BlockDescriptor< float > &block) DAAL_C11_OVERRIDE
Definition: symmetric_matrix.h:1248
daal::data_management::interface1::NumericTableIface::AllocationFlag
AllocationFlag
Enumeration to specify whether the Numeric Table must allocate memory.
Definition: numeric_table.h:283
daal::data_management::interface1::PackedTriangularMatrix::getBlockOfColumnValues
services::Status getBlockOfColumnValues(size_t feature_idx, size_t vector_idx, size_t value_num, ReadWriteMode rwflag, BlockDescriptor< double > &block) DAAL_C11_OVERRIDE
Definition: symmetric_matrix.h:1243
daal::data_management::interface1::PackedSymmetricMatrix::getArray
DataType * getArray() const
Definition: symmetric_matrix.h:333
daal::data_management::interface1::PackedSymmetricMatrix::releasePackedArray
services::Status releasePackedArray(BlockDescriptor< float > &block) DAAL_C11_OVERRIDE
Definition: symmetric_matrix.h:486
daal
Definition: algorithm_base_common.h:31
daal::data_management::interface1::PackedSymmetricMatrix::getBlockOfRows
services::Status getBlockOfRows(size_t vector_idx, size_t vector_num, ReadWriteMode rwflag, BlockDescriptor< float > &block) DAAL_C11_OVERRIDE
Definition: symmetric_matrix.h:417
daal::data_management::interface1::PackedTriangularMatrix::PackedTriangularMatrix
PackedTriangularMatrix(DataType *const ptr=0, size_t nDim=0)
Definition: symmetric_matrix.h:874
daal::data_management::interface1::PackedSymmetricMatrix::releasePackedArray
services::Status releasePackedArray(BlockDescriptor< double > &block) DAAL_C11_OVERRIDE
Definition: symmetric_matrix.h:482
daal::data_management::interface1::PackedSymmetricMatrix::getBlockOfRows
services::Status getBlockOfRows(size_t vector_idx, size_t vector_num, ReadWriteMode rwflag, BlockDescriptor< double > &block) DAAL_C11_OVERRIDE
Definition: symmetric_matrix.h:413
daal::data_management::interface1::PackedSymmetricMatrix::getBlockOfColumnValues
services::Status getBlockOfColumnValues(size_t feature_idx, size_t vector_idx, size_t value_num, ReadWriteMode rwflag, BlockDescriptor< int > &block) DAAL_C11_OVERRIDE
Definition: symmetric_matrix.h:449
daal::data_management::interface1::PackedTriangularMatrix::setArray
services::Status setArray(DataType *const ptr)
Definition: symmetric_matrix.h:1155
daal::data_management::interface1::PackedSymmetricMatrix::releaseBlockOfColumnValues
services::Status releaseBlockOfColumnValues(BlockDescriptor< int > &block) DAAL_C11_OVERRIDE
Definition: symmetric_matrix.h:463
daal::data_management::interface1::PackedTriangularMatrix::releaseBlockOfColumnValues
services::Status releaseBlockOfColumnValues(BlockDescriptor< float > &block) DAAL_C11_OVERRIDE
Definition: symmetric_matrix.h:1263
daal::data_management::interface1::PackedSymmetricMatrix::setArray
services::Status setArray(DataType *const ptr)
Definition: symmetric_matrix.h:351
daal::data_management::interface1::PackedTriangularMatrix::getBlockOfColumnValues
services::Status getBlockOfColumnValues(size_t feature_idx, size_t vector_idx, size_t value_num, ReadWriteMode rwflag, BlockDescriptor< int > &block) DAAL_C11_OVERRIDE
Definition: symmetric_matrix.h:1253
daal::data_management::interface1::PackedArrayNumericTableIface
Abstract class that defines the interface of symmetric matrices stored as a one-dimensional array...
Definition: symmetric_matrix.h:46
daal::data_management::interface1::PackedSymmetricMatrix::PackedSymmetricMatrix
PackedSymmetricMatrix(size_t nDim, NumericTable::AllocationFlag memoryAllocationFlag, const DataType &constValue)
Definition: symmetric_matrix.h:294
daal::data_management::interface1::PackedTriangularMatrix::getPackedArray
services::Status getPackedArray(ReadWriteMode rwflag, BlockDescriptor< double > &block) DAAL_C11_OVERRIDE
Definition: symmetric_matrix.h:1272
daal::data_management::interface1::PackedTriangularMatrix::baseDataType
DataType baseDataType
Definition: symmetric_matrix.h:866
daal::data_management::interface1::PackedSymmetricMatrix::setArray
services::Status setArray(const services::SharedPtr< DataType > &ptr)
Definition: symmetric_matrix.h:366
daal::data_management::interface1::PackedTriangularMatrix::releasePackedArray
services::Status releasePackedArray(BlockDescriptor< double > &block) DAAL_C11_OVERRIDE
Definition: symmetric_matrix.h:1285
daal::data_management::interface1::PackedTriangularMatrix::PackedTriangularMatrix
PackedTriangularMatrix(DataType *const ptr, size_t nDim, const DataType &constValue)
Definition: symmetric_matrix.h:943
daal::services::ErrorMemoryAllocationFailed
Definition: error_indexes.h:146
daal::dram
Definition: daal_defines.h:133
daal::data_management::interface1::PackedTriangularMatrix::getPackedArray
services::Status getPackedArray(ReadWriteMode rwflag, BlockDescriptor< int > &block) DAAL_C11_OVERRIDE
Definition: symmetric_matrix.h:1280
daal::data_management::interface1::PackedTriangularMatrix::PackedTriangularMatrix
PackedTriangularMatrix(const services::SharedPtr< DataType > &ptr, size_t nDim)
Definition: symmetric_matrix.h:890
daal::data_management::interface1::PackedTriangularMatrix::getArray
DataType * getArray() const
Definition: symmetric_matrix.h:1137
daal::data_management::interface1::PackedSymmetricMatrix::getPackedArray
services::Status getPackedArray(ReadWriteMode rwflag, BlockDescriptor< double > &block) DAAL_C11_OVERRIDE
Definition: symmetric_matrix.h:469
daal::services::ErrorIncorrectNumberOfFeatures
Definition: error_indexes.h:70
daal::data_management::interface1::PackedSymmetricMatrix::baseDataType
DataType baseDataType
Definition: symmetric_matrix.h:115
daal::data_management::interface1::PackedSymmetricMatrix::releaseBlockOfRows
services::Status releaseBlockOfRows(BlockDescriptor< double > &block) DAAL_C11_OVERRIDE
Definition: symmetric_matrix.h:426
daal::data_management::interface1::PackedSymmetricMatrix::releaseBlockOfColumnValues
services::Status releaseBlockOfColumnValues(BlockDescriptor< double > &block) DAAL_C11_OVERRIDE
Definition: symmetric_matrix.h:455
daal::data_management::interface1::PackedTriangularMatrix::releaseBlockOfColumnValues
services::Status releaseBlockOfColumnValues(BlockDescriptor< int > &block) DAAL_C11_OVERRIDE
Definition: symmetric_matrix.h:1267
daal::data_management::interface1::PackedSymmetricMatrix::getBlockOfRows
services::Status getBlockOfRows(size_t vector_idx, size_t vector_num, ReadWriteMode rwflag, BlockDescriptor< int > &block) DAAL_C11_OVERRIDE
Definition: symmetric_matrix.h:421
daal::data_management::interface1::PackedSymmetricMatrix::getArraySharedPtr
services::SharedPtr< DataType > getArraySharedPtr() const
Definition: symmetric_matrix.h:342
daal::data_management::interface1::PackedSymmetricMatrix::getBlockOfColumnValues
services::Status getBlockOfColumnValues(size_t feature_idx, size_t vector_idx, size_t value_num, ReadWriteMode rwflag, BlockDescriptor< double > &block) DAAL_C11_OVERRIDE
Definition: symmetric_matrix.h:439
daal::data_management::interface1::PackedTriangularMatrix::getPackedArray
services::Status getPackedArray(ReadWriteMode rwflag, BlockDescriptor< float > &block) DAAL_C11_OVERRIDE
Definition: symmetric_matrix.h:1276
daal::data_management::interface1::PackedTriangularMatrix::setNumberOfRows
virtual services::Status setNumberOfRows(size_t nDim) DAAL_C11_OVERRIDE
Definition: symmetric_matrix.h:1128
daal::services::daal_memcpy_s
DAAL_EXPORT void daal_memcpy_s(void *dest, size_t numberOfElements, const void *src, size_t count)
daal::data_management::interface1::PackedTriangularMatrix::assign
virtual services::Status assign(double value) DAAL_C11_OVERRIDE
Definition: symmetric_matrix.h:1210
daal::data_management::interface1::PackedTriangularMatrix::setArray
services::Status setArray(const services::SharedPtr< DataType > &ptr)
Definition: symmetric_matrix.h:1170
daal::data_management::interface1::PackedTriangularMatrix::assign
virtual services::Status assign(int value) DAAL_C11_OVERRIDE
Definition: symmetric_matrix.h:1215
daal::data_management::interface1::PackedSymmetricMatrix::PackedSymmetricMatrix
PackedSymmetricMatrix(DataType *const ptr=0, size_t nDim=0)
Definition: symmetric_matrix.h:124
daal::services::daal_malloc
DAAL_EXPORT void * daal_malloc(size_t size, size_t alignment=DAAL_MALLOC_DEFAULT_ALIGNMENT)
daal::data_management::interface1::PackedSymmetricMatrix
Class that provides methods to access symmetric matrices stored as a one-dimensional array...
Definition: symmetric_matrix.h:106
daal::data_management::interface1::PackedSymmetricMatrix::getPackedArray
services::Status getPackedArray(ReadWriteMode rwflag, BlockDescriptor< int > &block) DAAL_C11_OVERRIDE
Definition: symmetric_matrix.h:477
daal::data_management::interface1::PackedTriangularMatrix::setNumberOfColumns
virtual services::Status setNumberOfColumns(size_t nDim) DAAL_C11_OVERRIDE
Definition: symmetric_matrix.h:1113
daal::data_management::interface1::NumericTable
Class for a data management component responsible for representation of data in the numeric format...
Definition: numeric_table.h:574
daal::data_management::interface1::PackedSymmetricMatrix::PackedSymmetricMatrix
PackedSymmetricMatrix(const services::SharedPtr< DataType > &ptr, size_t nDim)
Definition: symmetric_matrix.h:141
daal::data_management::interface1::PackedSymmetricMatrix::PackedSymmetricMatrix
PackedSymmetricMatrix(size_t nDim, AllocationFlag memoryAllocationFlag)
Definition: symmetric_matrix.h:262
daal::data_management::interface1::PackedTriangularMatrix::getBlockOfRows
services::Status getBlockOfRows(size_t vector_idx, size_t vector_num, ReadWriteMode rwflag, BlockDescriptor< int > &block) DAAL_C11_OVERRIDE
Definition: symmetric_matrix.h:1225
daal::data_management::interface1::PackedSymmetricMatrix::assign
services::Status assign(T value)
Definition: symmetric_matrix.h:382
daal::data_management::interface1::PackedSymmetricMatrix::releaseBlockOfRows
services::Status releaseBlockOfRows(BlockDescriptor< int > &block) DAAL_C11_OVERRIDE
Definition: symmetric_matrix.h:434
daal::data_management::interface1::PackedSymmetricMatrix::create
static services::SharedPtr< PackedSymmetricMatrix > create(DataType *const ptr, size_t nDim, const DataType &constValue, services::Status *stat=NULL)
Definition: symmetric_matrix.h:236
daal::data_management::interface1::PackedSymmetricMatrix::PackedSymmetricMatrix
PackedSymmetricMatrix(DataType *const ptr, size_t nDim, const DataType &constValue)
Definition: symmetric_matrix.h:195
daal::data_management::interface1::PackedSymmetricMatrix::assign
virtual services::Status assign(int value) DAAL_C11_OVERRIDE
Definition: symmetric_matrix.h:411
daal::data_management::interface1::PackedSymmetricMatrix::create
static services::SharedPtr< PackedSymmetricMatrix > create(DataType *const ptr=0, size_t nDim=0, services::Status *stat=NULL)
Definition: symmetric_matrix.h:169
daal::data_management::interface1::PackedTriangularMatrix::assign
virtual services::Status assign(float value) DAAL_C11_OVERRIDE
Definition: symmetric_matrix.h:1205
daal::data_management::interface1::PackedSymmetricMatrix::assign
virtual services::Status assign(double value) DAAL_C11_OVERRIDE
Definition: symmetric_matrix.h:406
daal::data_management::interface1::PackedSymmetricMatrix::create
static services::SharedPtr< PackedSymmetricMatrix > create(const services::SharedPtr< DataType > &ptr, size_t nDim, const DataType &constValue, services::Status *stat=NULL)
Definition: symmetric_matrix.h:250
daal::data_management::interface1::PackedTriangularMatrix::releaseBlockOfRows
services::Status releaseBlockOfRows(BlockDescriptor< double > &block) DAAL_C11_OVERRIDE
Definition: symmetric_matrix.h:1230
daal::data_management::interface1::PackedTriangularMatrix::getBlockOfRows
services::Status getBlockOfRows(size_t vector_idx, size_t vector_num, ReadWriteMode rwflag, BlockDescriptor< float > &block) DAAL_C11_OVERRIDE
Definition: symmetric_matrix.h:1221
daal::data_management::interface1::PackedSymmetricMatrix::releaseBlockOfColumnValues
services::Status releaseBlockOfColumnValues(BlockDescriptor< float > &block) DAAL_C11_OVERRIDE
Definition: symmetric_matrix.h:459
daal::data_management::interface1::PackedSymmetricMatrix::create
static services::SharedPtr< PackedSymmetricMatrix > create(const services::SharedPtr< DataType > &ptr, size_t nDim, services::Status *stat=NULL)
Definition: symmetric_matrix.h:182
daal::data_management::interface1::PackedSymmetricMatrix::getPackedArray
services::Status getPackedArray(ReadWriteMode rwflag, BlockDescriptor< float > &block) DAAL_C11_OVERRIDE
Definition: symmetric_matrix.h:473
daal::data_management::interface1::PackedTriangularMatrix::PackedTriangularMatrix
PackedTriangularMatrix(const services::SharedPtr< DataType > &ptr, size_t nDim, const DataType &constValue)
Definition: symmetric_matrix.h:962
daal::data_management::interface1::BlockDescriptor
Base class that manages buffer memory for read/write operations required by numeric tables...
Definition: numeric_table.h:55
daal::algorithms::math::abs::value
Definition: abs_types.h:86
daal::data_management::interface1::NumericTableFeature::setType
void setType()
Definition: data_dictionary.h:91
daal::data_management::interface1::PackedSymmetricMatrix::create
static services::SharedPtr< PackedSymmetricMatrix > create(size_t nDim, AllocationFlag memoryAllocationFlag, services::Status *stat=NULL)
Definition: symmetric_matrix.h:281
daal::services::ErrorIncorrectNumberOfObservations
Definition: error_indexes.h:71
daal::data_management::interface1::PackedSymmetricMatrix::PackedSymmetricMatrix
PackedSymmetricMatrix(const services::SharedPtr< DataType > &ptr, size_t nDim, const DataType &constValue)
Definition: symmetric_matrix.h:215
daal::data_management::interface1::PackedArrayNumericTableIface::getPackedArray
virtual services::Status getPackedArray(ReadWriteMode rwflag, BlockDescriptor< double > &block)=0
daal::data_management::interface1::PackedTriangularMatrix::assign
services::Status assign(T value)
Definition: symmetric_matrix.h:1186
daal::data_management::interface1::PackedSymmetricMatrix::releasePackedArray
services::Status releasePackedArray(BlockDescriptor< int > &block) DAAL_C11_OVERRIDE
Definition: symmetric_matrix.h:490
daal::data_management::interface1::PackedTriangularMatrix
Class that provides methods to access a packed triangular matrix stored as a one-dimensional array...
Definition: symmetric_matrix.h:858
daal::data_management::interface1::PackedTriangularMatrix::getArraySharedPtr
services::SharedPtr< DataType > getArraySharedPtr() const
Definition: symmetric_matrix.h:1146
daal::data_management::interface1::PackedTriangularMatrix::releaseBlockOfRows
services::Status releaseBlockOfRows(BlockDescriptor< float > &block) DAAL_C11_OVERRIDE
Definition: symmetric_matrix.h:1234
daal::data_management::interface1::PackedTriangularMatrix::getBlockOfRows
services::Status getBlockOfRows(size_t vector_idx, size_t vector_num, ReadWriteMode rwflag, BlockDescriptor< double > &block) DAAL_C11_OVERRIDE
Definition: symmetric_matrix.h:1217
daal::data_management::interface1::PackedSymmetricMatrix::create
static services::SharedPtr< PackedSymmetricMatrix > create(size_t nDim, NumericTable::AllocationFlag memoryAllocationFlag, const DataType &constValue, services::Status *stat=NULL)
Definition: symmetric_matrix.h:316
daal::data_management::interface1::NumericTableFeature
Data structure describes the Numeric Table feature.
Definition: data_dictionary.h:48
daal::data_management::interface1::PackedSymmetricMatrix::releaseBlockOfRows
services::Status releaseBlockOfRows(BlockDescriptor< float > &block) DAAL_C11_OVERRIDE
Definition: symmetric_matrix.h:430
daal::data_management::interface1::PackedTriangularMatrix::releasePackedArray
services::Status releasePackedArray(BlockDescriptor< int > &block) DAAL_C11_OVERRIDE
Definition: symmetric_matrix.h:1293
daal::MemType
MemType
Definition: daal_defines.h:131
daal::data_management::interface1::PackedTriangularMatrix::releaseBlockOfColumnValues
services::Status releaseBlockOfColumnValues(BlockDescriptor< double > &block) DAAL_C11_OVERRIDE
Definition: symmetric_matrix.h:1259
daal::services::ErrorEmptyHomogenNumericTable
Definition: error_indexes.h:161
daal::data_management::interface1::PackedTriangularMatrix::PackedTriangularMatrix
PackedTriangularMatrix(size_t nDim, AllocationFlag memoryAllocationFlag)
Definition: symmetric_matrix.h:1022
daal::data_management::interface1::PackedArrayNumericTableIface::releasePackedArray
virtual services::Status releasePackedArray(BlockDescriptor< double > &block)=0
daal::data_management::interface1::PackedTriangularMatrix::releaseBlockOfRows
services::Status releaseBlockOfRows(BlockDescriptor< int > &block) DAAL_C11_OVERRIDE
Definition: symmetric_matrix.h:1238
daal::data_management::interface1::PackedTriangularMatrix::releasePackedArray
services::Status releasePackedArray(BlockDescriptor< float > &block) DAAL_C11_OVERRIDE
Definition: symmetric_matrix.h:1289
daal::data_management::interface1::PackedTriangularMatrix::PackedTriangularMatrix
PackedTriangularMatrix(size_t nDim, NumericTable::AllocationFlag memoryAllocationFlag, const DataType &constValue)
Definition: symmetric_matrix.h:1066
daal::data_management::interface1::PackedSymmetricMatrix::assign
virtual services::Status assign(float value) DAAL_C11_OVERRIDE
Definition: symmetric_matrix.h:401