minor changes + some extensions
This commit is contained in:
parent
63eb7d0505
commit
d3dbdbb865
4 changed files with 36 additions and 5 deletions
|
@ -42,6 +42,24 @@ namespace MultiArrayTools
|
||||||
return MultiArrayOperationRoot<T,Range>(*this, Name("master", str...));
|
return MultiArrayOperationRoot<T,Range>(*this, Name("master", str...));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename T, class Range>
|
||||||
|
template <class NameType>
|
||||||
|
MultiArrayOperationRoot<T,Range> MultiArrayBase<T,Range>::operator()(const NameType& name, bool master)
|
||||||
|
{
|
||||||
|
if(master){
|
||||||
|
return MultiArrayOperationRoot<T,Range>(*this, name);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return operator()(name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T, class Range>
|
||||||
|
bool MultiArrayBase<T,Range>::isInit() const
|
||||||
|
{
|
||||||
|
return mInit;
|
||||||
|
}
|
||||||
|
|
||||||
/*******************
|
/*******************
|
||||||
* MultiArray *
|
* MultiArray *
|
||||||
*******************/
|
*******************/
|
||||||
|
@ -49,13 +67,17 @@ namespace MultiArrayTools
|
||||||
template <typename T, class Range>
|
template <typename T, class Range>
|
||||||
MultiArray<T,Range>::MultiArray(const Range& range) :
|
MultiArray<T,Range>::MultiArray(const Range& range) :
|
||||||
MultiArrayBase<T,Range>(range),
|
MultiArrayBase<T,Range>(range),
|
||||||
mCont(MAB::mRange->size()) {}
|
mCont(MAB::mRange->size())
|
||||||
|
{
|
||||||
|
MAB::mInit = true;
|
||||||
|
}
|
||||||
|
|
||||||
template <typename T, class Range>
|
template <typename T, class Range>
|
||||||
MultiArray<T,Range>::MultiArray(const Range& range, const std::vector<T>& vec) :
|
MultiArray<T,Range>::MultiArray(const Range& range, const std::vector<T>& vec) :
|
||||||
MultiArrayBase<T,Range>(range),
|
MultiArrayBase<T,Range>(range),
|
||||||
mCont(vec)
|
mCont(vec)
|
||||||
{
|
{
|
||||||
|
MAB::mInit = true;
|
||||||
if(mCont.size() > MAB::mRange->size()){
|
if(mCont.size() > MAB::mRange->size()){
|
||||||
mCont.erase(mCont.begin() + MAB::mRange->size(), mCont.end());
|
mCont.erase(mCont.begin() + MAB::mRange->size(), mCont.end());
|
||||||
}
|
}
|
||||||
|
@ -66,6 +88,7 @@ namespace MultiArrayTools
|
||||||
MultiArrayBase<T,Range>(range),
|
MultiArrayBase<T,Range>(range),
|
||||||
mCont(vec)
|
mCont(vec)
|
||||||
{
|
{
|
||||||
|
MAB::mInit = true;
|
||||||
if(mCont.size() > MAB::mRange->size()){
|
if(mCont.size() > MAB::mRange->size()){
|
||||||
mCont.erase(mCont.begin() + MAB::mRange->size(), mCont.end());
|
mCont.erase(mCont.begin() + MAB::mRange->size(), mCont.end());
|
||||||
}
|
}
|
||||||
|
@ -77,6 +100,7 @@ namespace MultiArrayTools
|
||||||
MultiArrayBase<T,Range>(merge(in.range(), in[ in.begin() ].range()))
|
MultiArrayBase<T,Range>(merge(in.range(), in[ in.begin() ].range()))
|
||||||
// assert that Range2 has always same extension
|
// assert that Range2 has always same extension
|
||||||
{
|
{
|
||||||
|
MAB::mInit = true;
|
||||||
mCont.clear();
|
mCont.clear();
|
||||||
for(auto i = in.begin(); i != in.end(); ++i){
|
for(auto i = in.begin(); i != in.end(); ++i){
|
||||||
mCont.insert(mCont.end(), in[i].mCont.begin(), in[i].mCont.end());
|
mCont.insert(mCont.end(), in[i].mCont.begin(), in[i].mCont.end());
|
||||||
|
|
|
@ -39,7 +39,13 @@ namespace MultiArrayTools
|
||||||
template <class... NameTypes>
|
template <class... NameTypes>
|
||||||
MultiArrayOperationRoot<T,Range> operator()(const NameTypes&... str);
|
MultiArrayOperationRoot<T,Range> operator()(const NameTypes&... str);
|
||||||
|
|
||||||
|
template <class NameType>
|
||||||
|
MultiArrayOperationRoot<T,Range> operator()(const NameType& name, bool master);
|
||||||
|
|
||||||
|
virtual bool isInit() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
bool mInit = false;
|
||||||
std::shared_ptr<Range> mRange;
|
std::shared_ptr<Range> mRange;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -74,7 +74,7 @@ namespace MultiArrayTools
|
||||||
MultiArrayOperationRoot<T,Range>::operator=(MultiArrayOperationRoot<T,Range>& in)
|
MultiArrayOperationRoot<T,Range>::operator=(MultiArrayOperationRoot<T,Range>& in)
|
||||||
{
|
{
|
||||||
maketurnSlice(in);
|
maketurnSlice(in);
|
||||||
if(mArrayRef.isSlice()){
|
if(mArrayRef.isSlice() and not mArrayRef.isInit()){
|
||||||
return makeSlice(in);
|
return makeSlice(in);
|
||||||
}
|
}
|
||||||
performAssignment(in);
|
performAssignment(in);
|
||||||
|
@ -86,7 +86,7 @@ namespace MultiArrayTools
|
||||||
MultiArrayOperationRoot<T,Range>&
|
MultiArrayOperationRoot<T,Range>&
|
||||||
MultiArrayOperationRoot<T,Range>::operator=(MultiArrayOperationRoot<T,Range2>& in)
|
MultiArrayOperationRoot<T,Range>::operator=(MultiArrayOperationRoot<T,Range2>& in)
|
||||||
{
|
{
|
||||||
if(mArrayRef.isSlice()){
|
if(mArrayRef.isSlice() and not mArrayRef.isInit()){
|
||||||
return makeSlice(in);
|
return makeSlice(in);
|
||||||
}
|
}
|
||||||
performAssignment(in);
|
performAssignment(in);
|
||||||
|
@ -98,7 +98,7 @@ namespace MultiArrayTools
|
||||||
MultiArrayOperationRoot<T,Range>&
|
MultiArrayOperationRoot<T,Range>&
|
||||||
MultiArrayOperationRoot<T,Range>::operator=(const MultiArrayOperation<T,Operation,MAOps...>& in)
|
MultiArrayOperationRoot<T,Range>::operator=(const MultiArrayOperation<T,Operation,MAOps...>& in)
|
||||||
{
|
{
|
||||||
if(mArrayRef.isSlice()){
|
if(mArrayRef.isSlice() and not mArrayRef.isInit()){
|
||||||
// NO SLICE CREATION !!! (total array not initialized!!)
|
// NO SLICE CREATION !!! (total array not initialized!!)
|
||||||
// throw !
|
// throw !
|
||||||
assert(0);
|
assert(0);
|
||||||
|
|
|
@ -22,6 +22,7 @@ namespace MultiArrayTools
|
||||||
const typename MARange::IndexType& MAIdx, // for desired slice position
|
const typename MARange::IndexType& MAIdx, // for desired slice position
|
||||||
const Name& MANm) // for correct linkage)
|
const Name& MANm) // for correct linkage)
|
||||||
{
|
{
|
||||||
|
MAB::mInit = true;
|
||||||
mMultiArrayPtr = &multiArrayRef;
|
mMultiArrayPtr = &multiArrayRef;
|
||||||
mMAIdx = MAIdx;
|
mMAIdx = MAIdx;
|
||||||
mOwnIdx = MAB::mRange->begin();
|
mOwnIdx = MAB::mRange->begin();
|
||||||
|
|
Loading…
Reference in a new issue