diff --git a/FunctionSpace/HexReferenceSpace.cpp b/FunctionSpace/HexReferenceSpace.cpp index ce427cdd6076b7e3e05a1039e4a79528104e22c9..cc6806496a5605c0e9609007088153ca61d44da1 100644 --- a/FunctionSpace/HexReferenceSpace.cpp +++ b/FunctionSpace/HexReferenceSpace.cpp @@ -1,10 +1,26 @@ #include <sstream> + #include "HexReferenceSpace.h" #include "MHexahedron.h" using namespace std; HexReferenceSpace::HexReferenceSpace(void){ + // Look if a serialized HexReferenceSpace is present in root // + // If it does, load it // + // If not, create it and serialize it for an other time // + + try{ + init(string("hex.refSpace")); + } + + catch(std::exception& exception){ + initHex(); + serialize("hex.refSpace"); + } +} + +void HexReferenceSpace::initHex(void){ // Vertex Definition // nVertex = 8; diff --git a/FunctionSpace/HexReferenceSpace.h b/FunctionSpace/HexReferenceSpace.h index bd03576f047eaa6c3092806564c7fd424cc7c406..28a0cccc1e5a9318958f20ed0a1a442bfeeee81c 100644 --- a/FunctionSpace/HexReferenceSpace.h +++ b/FunctionSpace/HexReferenceSpace.h @@ -17,6 +17,9 @@ class HexReferenceSpace: public ReferenceSpace{ virtual ~HexReferenceSpace(void); virtual std::string toLatex(void) const; + + private: + void initHex(void); }; /** diff --git a/FunctionSpace/ReferenceSpace.cpp b/FunctionSpace/ReferenceSpace.cpp index 1eeb3dec43983e65c2aebebef639742911aa6840..49a5669a496361621b7dea15212aa2c66f91cfa6 100644 --- a/FunctionSpace/ReferenceSpace.cpp +++ b/FunctionSpace/ReferenceSpace.cpp @@ -16,28 +16,7 @@ ReferenceSpace::ReferenceSpace(void){ } ReferenceSpace::ReferenceSpace(const std::string& path){ - // Read file // - // Open Stream - ifstream input; - input.exceptions(std::ifstream::failbit | std::ifstream::badbit); - input.open(path.c_str(), std::ifstream::binary); - - // Get size of stream (go to stream end) - input.seekg(0, std::ifstream::end); - const size_t size = input.tellg(); - - // Reset stream possition - input.seekg(0, std::ifstream::beg); - - // Alloc byte stream & Read file - char* stream = new char[size]; - input.read(stream, size); - - // Init from stream - init(stream); - - // Free stream - delete[] stream; + init(path); } ReferenceSpace::~ReferenceSpace(void){ @@ -113,6 +92,7 @@ void ReferenceSpace::init(const char* stream){ offset += sizeof(size_t); pTree = new PermutationTree(stream + offset); + cout << pTree->toString() << endl; offset += tSize; // RefSpace Node Id @@ -125,8 +105,31 @@ void ReferenceSpace::init(const char* stream){ // Oredered {Edge, Face} Node Idx offset += unserialize(stream + offset, orderedEdgeNodeIdx); offset += unserialize(stream + offset, orderedFaceNodeIdx); +} - cout << offset << endl; +void ReferenceSpace::init(const std::string& path){ + // Read file // + // Open Stream + ifstream input; + input.exceptions(std::ifstream::failbit | std::ifstream::badbit); + input.open(path.c_str(), std::ifstream::binary); + + // Get size of stream (go to stream end) + input.seekg(0, std::ifstream::end); + const size_t size = input.tellg(); + + // Reset stream possition + input.seekg(0, std::ifstream::beg); + + // Alloc byte stream & Read file + char* stream = new char[size]; + input.read(stream, size); + + // Init from stream + init(stream); + + // Free stream + delete[] stream; } void ReferenceSpace:: diff --git a/FunctionSpace/ReferenceSpace.h b/FunctionSpace/ReferenceSpace.h index 68c26a3717b9b974afb52450b3ba1ba8b3354dee..ac6600bcdcdf740f14b57ed3bf3ed5dfa5e20918 100644 --- a/FunctionSpace/ReferenceSpace.h +++ b/FunctionSpace/ReferenceSpace.h @@ -104,6 +104,7 @@ class ReferenceSpace{ void init(void); void init(const char* stream); + void init(const std::string& path); private: void getOrderedEdge(void); diff --git a/FunctionSpace/TriReferenceSpace.cpp b/FunctionSpace/TriReferenceSpace.cpp index e7b9399f6233fca7e7fe6fd624c97650226e5414..449502e939f6151c430107db219082deb0f32f7d 100644 --- a/FunctionSpace/TriReferenceSpace.cpp +++ b/FunctionSpace/TriReferenceSpace.cpp @@ -1,10 +1,26 @@ #include <sstream> + #include "TriReferenceSpace.h" #include "MTriangle.h" using namespace std; TriReferenceSpace::TriReferenceSpace(void){ + // Look if a serialized TriReferenceSpace is present in root // + // If it does, load it // + // If not, create it and serialize it for an other time // + + try{ + init(string("tri.refSpace")); + } + + catch(std::exception& exception){ + initTri(); + serialize("tri.refSpace"); + } +} + +void TriReferenceSpace::initTri(void){ // Vertex Definition // nVertex = 3; diff --git a/FunctionSpace/TriReferenceSpace.h b/FunctionSpace/TriReferenceSpace.h index 9f52b5d64eb9fe56dd5fff7e840c95d15bc77b25..86dafed6560caffb4e591e3e13827c64e1f771e7 100644 --- a/FunctionSpace/TriReferenceSpace.h +++ b/FunctionSpace/TriReferenceSpace.h @@ -17,6 +17,9 @@ class TriReferenceSpace: public ReferenceSpace{ virtual ~TriReferenceSpace(void); virtual std::string toLatex(void) const; + + private: + void initTri(void); }; /**