/usr/include/opencascade/math_DoubleTab.gxx is in libopencascade-foundation-dev 6.5.0.dfsg-2build1.
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 | // File math_DoubleTab.gxx
// Lpa, le 7/02/92
#include <math_Memory.hxx>
#include <Standard_OutOfRange.hxx>
#include <Standard_Failure.hxx>
#include <Standard_Integer.hxx>
void math_DoubleTab::Allocate()
{
Standard_Integer RowNumber = UppR - LowR + 1;
Standard_Integer ColNumber = UppC - LowC + 1;
Item** TheAddr = (Item**) Standard::Allocate(RowNumber * sizeof(Item*));
Item* Address;
if(isAllocated)
Address = (Item*) Standard::Allocate(RowNumber * ColNumber * sizeof(Item));
else
Address = (Item*) Addr;
Address -= LowC;
for (Standard_Integer Index = 0; Index < RowNumber; Index++) {
TheAddr[Index] = Address;
Address += ColNumber;
}
TheAddr -= LowR;
Addr = (Standard_Address) TheAddr;
}
math_DoubleTab::math_DoubleTab(const Standard_Integer LowerRow,
const Standard_Integer UpperRow,
const Standard_Integer LowerCol,
const Standard_Integer UpperCol) :
isAllocated(Standard_True),
LowR(LowerRow),
UppR(UpperRow),
LowC(LowerCol),
UppC(UpperCol)
{
Allocate();
}
math_DoubleTab::math_DoubleTab(const Item& Tab,
const Standard_Integer LowerRow,
const Standard_Integer UpperRow,
const Standard_Integer LowerCol,
const Standard_Integer UpperCol) :
Addr((void *) &Tab),
isAllocated(Standard_False),
LowR(LowerRow),
UppR(UpperRow),
LowC(LowerCol),
UppC(UpperCol)
{
Allocate();
}
void math_DoubleTab::Init(const Item& InitValue)
{
for (Standard_Integer i = LowR; i <= UppR; i++) {
for (Standard_Integer j = LowC; j <= UppC; j++) {
((Item**) Addr)[i][j] = InitValue;
}
}
}
math_DoubleTab::math_DoubleTab(const math_DoubleTab& Other) :
isAllocated(Standard_True),
LowR(Other.LowR),
UppR(Other.UppR),
LowC(Other.LowC),
UppC(Other.UppC)
{
Allocate();
Standard_Address target = (Standard_Address) &Value(LowR,LowC);
Standard_Address source = (Standard_Address) &Other.Value(LowR,LowC);
memmove(target,source,
(int)((UppR - LowR + 1) * (UppC - LowC + 1) * sizeof(Item)));
}
void math_DoubleTab::Free()
{
Standard_Integer RowNumber = UppR - LowR + 1;
Standard_Integer ColNumber = UppC - LowC + 1;
// free the data
if(isAllocated) {
Standard_Address it = (Standard_Address)&Value(LowR,LowC);
Standard::Free(it);
}
// free the pointers
Standard_Address it = (Standard_Address)(((Item**)Addr) + LowR);
Standard::Free (it);
Addr = 0;
}
void math_DoubleTab::SetLowerRow(const Standard_Integer LowerRow)
{
Item** TheAddr = (Item**)Addr;
Addr = (Standard_Address) (TheAddr + LowR - LowerRow);
UppR = UppR - LowR + LowerRow;
LowR = LowerRow;
}
void math_DoubleTab::SetLowerCol(const Standard_Integer LowerCol)
{
Item** TheAddr = (Item**) Addr;
for (Standard_Integer Index = LowR; Index <= UppR; Index++) {
TheAddr[Index] = TheAddr[Index] + LowC - LowerCol;
}
UppC = UppC - LowC + LowerCol;
LowC = LowerCol;
}
|