SimpleTempData DataBegin and const DataBegin
This commit is contained in:
parent
bf6c48f9be
commit
3bfe5793f6
|
|
@ -2207,7 +2207,7 @@ public:
|
||||||
pa._padding = 0;
|
pa._padding = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class ATTR_TYPE>
|
template <class ATTR_TYPE>
|
||||||
static void FixPaddedPerTetraAttribute(MeshType &m, PointerToAttribute &pa)
|
static void FixPaddedPerTetraAttribute(MeshType &m, PointerToAttribute &pa)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
@ -2245,7 +2245,7 @@ public:
|
||||||
|
|
||||||
// copy the padded container in the new one
|
// copy the padded container in the new one
|
||||||
char * ptr = (char*)( ((Attribute<ATTR_TYPE> *)pa._handle)->DataBegin());
|
char * ptr = (char*)( ((Attribute<ATTR_TYPE> *)pa._handle)->DataBegin());
|
||||||
memcpy((void*)_handle->attribute ,(void*) &(ptr[0]) ,sizeof(ATTR_TYPE));
|
memcpy((void*)_handle->DataBegin() ,(void*) &(ptr[0]) ,sizeof(ATTR_TYPE));
|
||||||
|
|
||||||
// remove the padded container
|
// remove the padded container
|
||||||
delete ( (Attribute<ATTR_TYPE> *) pa._handle);
|
delete ( (Attribute<ATTR_TYPE> *) pa._handle);
|
||||||
|
|
|
||||||
|
|
@ -340,7 +340,7 @@ public:
|
||||||
|
|
||||||
Attribute<ATTR_TYPE> * _handle;
|
Attribute<ATTR_TYPE> * _handle;
|
||||||
int n_attr;
|
int n_attr;
|
||||||
ATTR_TYPE & operator ()(){ return *((Attribute<ATTR_TYPE> *)_handle)->attribute;}
|
ATTR_TYPE & operator ()(){ return *((ATTR_TYPE*)((Attribute<ATTR_TYPE> *)_handle)->DataBegin());}
|
||||||
};
|
};
|
||||||
|
|
||||||
// Some common Handle typedefs to simplify use
|
// Some common Handle typedefs to simplify use
|
||||||
|
|
|
||||||
|
|
@ -41,6 +41,7 @@ public:
|
||||||
virtual void Reorder(std::vector<size_t> &newVertIndex) = 0;
|
virtual void Reorder(std::vector<size_t> &newVertIndex) = 0;
|
||||||
virtual size_t SizeOf() const = 0;
|
virtual size_t SizeOf() const = 0;
|
||||||
virtual void *DataBegin() = 0;
|
virtual void *DataBegin() = 0;
|
||||||
|
virtual const void* DataBegin() const = 0;
|
||||||
|
|
||||||
virtual void *At(size_t i) = 0;
|
virtual void *At(size_t i) = 0;
|
||||||
virtual const void *At(size_t i) const = 0;
|
virtual const void *At(size_t i) const = 0;
|
||||||
|
|
@ -56,12 +57,12 @@ template <class ...p>
|
||||||
class VectorNBW<bool, p...>
|
class VectorNBW<bool, p...>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
VectorNBW() : data(nullptr), datasize(0), datareserve(0) {}
|
VectorNBW() : booldata(nullptr), datasize(0), datareserve(0) {}
|
||||||
|
|
||||||
~VectorNBW()
|
~VectorNBW()
|
||||||
{
|
{
|
||||||
if (data)
|
if (booldata)
|
||||||
delete[] data;
|
delete[] booldata;
|
||||||
}
|
}
|
||||||
|
|
||||||
void reserve(size_t sz)
|
void reserve(size_t sz)
|
||||||
|
|
@ -70,8 +71,8 @@ public:
|
||||||
return;
|
return;
|
||||||
bool *newdataLoc = new bool[sz];
|
bool *newdataLoc = new bool[sz];
|
||||||
if (datasize != 0)
|
if (datasize != 0)
|
||||||
memcpy(newdataLoc, data, sizeof(bool) * sizeof(datasize));
|
memcpy(newdataLoc, booldata, sizeof(bool) * sizeof(datasize));
|
||||||
std::swap(data, newdataLoc);
|
std::swap(booldata, newdataLoc);
|
||||||
if (newdataLoc != 0)
|
if (newdataLoc != 0)
|
||||||
delete[] newdataLoc;
|
delete[] newdataLoc;
|
||||||
datareserve = sz;
|
datareserve = sz;
|
||||||
|
|
@ -85,12 +86,12 @@ public:
|
||||||
if (sz > datareserve)
|
if (sz > datareserve)
|
||||||
reserve(sz);
|
reserve(sz);
|
||||||
datasize = sz;
|
datasize = sz;
|
||||||
memset(&data[oldDatasize], 0, datasize - oldDatasize);
|
memset(&booldata[oldDatasize], 0, datasize - oldDatasize);
|
||||||
}
|
}
|
||||||
void push_back(const bool &v)
|
void push_back(const bool &v)
|
||||||
{
|
{
|
||||||
resize(datasize + 1);
|
resize(datasize + 1);
|
||||||
data[datasize] = v;
|
booldata[datasize] = v;
|
||||||
}
|
}
|
||||||
|
|
||||||
void clear() { datasize = 0; }
|
void clear() { datasize = 0; }
|
||||||
|
|
@ -99,14 +100,14 @@ public:
|
||||||
|
|
||||||
bool empty() const { return datasize == 0; }
|
bool empty() const { return datasize == 0; }
|
||||||
|
|
||||||
bool* begin() {return data;}
|
bool* data() {return booldata;}
|
||||||
const bool *begin() const { return data; }
|
const bool *data() const { return booldata; }
|
||||||
|
|
||||||
bool &operator[](size_t i) { return data[i]; }
|
bool &operator[](size_t i) { return booldata[i]; }
|
||||||
const bool &operator[](size_t i) const { return data[i]; }
|
const bool &operator[](size_t i) const { return booldata[i]; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool *data;
|
bool *booldata;
|
||||||
size_t datasize;
|
size_t datasize;
|
||||||
size_t datareserve;
|
size_t datareserve;
|
||||||
};
|
};
|
||||||
|
|
@ -184,7 +185,7 @@ public:
|
||||||
|
|
||||||
void Reorder(std::vector<size_t> &newVertIndex)
|
void Reorder(std::vector<size_t> &newVertIndex)
|
||||||
{
|
{
|
||||||
for (unsigned int i = 0; i < data.size(); ++i)
|
for (size_t i = 0; i < data.size(); ++i)
|
||||||
{
|
{
|
||||||
if (newVertIndex[i] != (std::numeric_limits<size_t>::max)())
|
if (newVertIndex[i] != (std::numeric_limits<size_t>::max)())
|
||||||
data[newVertIndex[i]] = data[i];
|
data[newVertIndex[i]] = data[i];
|
||||||
|
|
@ -192,7 +193,8 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t SizeOf() const { return sizeof(ATTR_TYPE); }
|
size_t SizeOf() const { return sizeof(ATTR_TYPE); }
|
||||||
void *DataBegin() { return data.empty() ? NULL : &(*data.begin()); }
|
void *DataBegin() { return data.empty() ? nullptr : data.data(); }
|
||||||
|
const void *DataBegin() const { return data.empty() ? nullptr : data.data(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
template <class ATTR_TYPE>
|
template <class ATTR_TYPE>
|
||||||
|
|
@ -200,11 +202,11 @@ class Attribute : public SimpleTempDataBase
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
typedef ATTR_TYPE AttrType;
|
typedef ATTR_TYPE AttrType;
|
||||||
AttrType *attribute;
|
|
||||||
Attribute() { attribute = new ATTR_TYPE(); }
|
Attribute() { attribute = new ATTR_TYPE(); }
|
||||||
~Attribute() { delete attribute; }
|
~Attribute() { delete attribute; }
|
||||||
size_t SizeOf() const { return sizeof(ATTR_TYPE); }
|
size_t SizeOf() const { return sizeof(ATTR_TYPE); }
|
||||||
void *DataBegin() { return attribute; }
|
void *DataBegin() { return attribute; }
|
||||||
|
const void* DataBegin() const {return attribute;}
|
||||||
|
|
||||||
void Resize(size_t) { assert(0); }
|
void Resize(size_t) { assert(0); }
|
||||||
void Reorder(std::vector<size_t> &) { assert(0); }
|
void Reorder(std::vector<size_t> &) { assert(0); }
|
||||||
|
|
@ -220,6 +222,8 @@ public:
|
||||||
return (void *)0;
|
return (void *)0;
|
||||||
}
|
}
|
||||||
void CopyValue(const size_t, const size_t, const SimpleTempDataBase *) { assert(0); }
|
void CopyValue(const size_t, const size_t, const SimpleTempDataBase *) { assert(0); }
|
||||||
|
private:
|
||||||
|
AttrType *attribute;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end namespace vcg
|
} // end namespace vcg
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue