/usr/include/CLAM/SDIFMatrix.hxx is in libclam-dev 1.4.0-6.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 | /*
* Copyright (c) 2004 MUSIC TECHNOLOGY GROUP (MTG)
* UNIVERSITAT POMPEU FABRA
*
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
#ifndef _SdifMatrix_hxx_
#define _SdifMatrix_hxx_
#include "SDIFHeader.hxx"
#undef CLAM_USE_XML
#include "Array.hxx"
#include "SDIFType.hxx"
namespace SDIF
{
/**
* Contains frame data for an SDIF frame.
* The data in a Frames are stored in 2D matrices.
* Each column corresponds to a parameter like frequency or amplitude and
* each row represents an object like a filter, sinusoid, or noise band.
* Each Matrix starts with a MatrixHeader, that contains a
* type id, and the dimensions of the matrix.
*
* As Matrixes are stored in a linked list in the Frames,
* each Matrix has a pointer to the next matrix inside the
* frame.
*/
class Matrix
{
friend class File;
protected:
MatrixHeader mHeader;
Matrix(const MatrixHeader& header)
:mHeader(header)
{
}
Matrix(
const TypeId& type = TypeId::sDefault,DataType dataType = eUnknown,
CLAM::TInt32 nRows = 0, CLAM::TInt32 nColumns = 0);
virtual char* GetPtr(void) = 0;
virtual void Resize(int nElems) = 0;
virtual void SetSize(int nElems) = 0;
public:
virtual ~Matrix() { }
TypeId Type(void) {return mHeader.mType;}
CLAM::TInt32 Rows(void) { return mHeader.mnRows; }
CLAM::TInt32 Columns(void) { return mHeader.mnColumns; }
CLAM::TInt32 SizeInFile(void)
{
CLAM::TUInt32 nElems = mHeader.mnColumns*mHeader.mnRows;
CLAM::TUInt32 elemSize = mHeader.mDataType&0xFF;
CLAM::TUInt32 size = nElems*elemSize;
CLAM::TUInt32 padding = 8-size&7;
return mHeader.SizeInFile()+size+padding;
}
};
template <class T=CLAM::TFloat32> class ConcreteMatrix:public Matrix
{
friend class File;
private:
CLAM::Array<T> mpData;
public:
/** Create a new Matrix.
* @param type Identifier specifying the matrix type
* @param dataType Identifier specifying the type of data type in the matrix
* @param nRows Number of rows in the matrix
* @param nColumns Number of rows in the matrix
*/
ConcreteMatrix(
const TypeId& type = TypeId::sDefault,
CLAM::TInt32 nRows = 0, CLAM::TInt32 nColumns = 0)
: Matrix(type,GetType<T>::Get(),nRows,nColumns)
{
CLAM::TInt32 nElems = Rows()*Columns();
Resize(nElems);
SetSize(nElems);
}
ConcreteMatrix(const MatrixHeader& header)
:Matrix(header)
{
CLAM::TInt32 nElems = Rows()*Columns();
Resize(nElems);
SetSize(nElems);
}
char* GetPtr(void) { return (char*)mpData.GetPtr(); }
void Resize(int nElems) { mpData.Resize(nElems); }
void SetSize(int nElems) { mpData.SetSize(nElems); }
/** Lookup a value in the matrix
* @param row,col coordinates of the value
* @return The indicated value
*/
T GetValue(CLAM::TInt32 row,CLAM::TInt32 col)
{
return mpData[row*mHeader.mnColumns + col];
}
/** Set a value in the matrix
* @param row,col coordinates of the value
* @param val The new value
*/
void SetValue(CLAM::TInt32 row,CLAM::TInt32 col,const T& val)
{
mpData[row*mHeader.mnColumns + col] = val;
}
};
}
#endif//_SdifMatrix_hxx_
|