Skip to content

Commit

Permalink
Merge pull request #13 from openfedem/connector-cleanup
Browse files Browse the repository at this point in the history
Minor linkhandler refactoring
  • Loading branch information
kmokstad authored Oct 7, 2024
2 parents 9f9aa7e + 0bb0830 commit d1ee7ac
Show file tree
Hide file tree
Showing 5 changed files with 147 additions and 240 deletions.
89 changes: 45 additions & 44 deletions src/FFlLib/FFlConnectorItems.C
Original file line number Diff line number Diff line change
Expand Up @@ -13,78 +13,79 @@

bool operator== (const FFlConnectorItems& a, const FFlConnectorItems& b)
{
if (&a == &b) return true;
if (&a == &b)
return true;

if (a.nodes == b.nodes)
if (a.elements == b.elements)
if (a.properties == b.properties)
return true;
return true;

return false;
}


std::ostream&
operator<< (std::ostream& s, const FFlConnectorItems& connector)
std::ostream& operator<< (std::ostream& s, const FFlConnectorItems& c)
{
if (!connector.nodes.empty()) {
if (!c.nodes.empty())
{
s <<"\nNODES";
for (int n : connector.nodes) s <<' '<< n;
for (int n : c.nodes)
s <<' '<< n;
}
if (!connector.elements.empty()) {

if (!c.elements.empty())
{
s <<"\nELEMENTS";
for (int e : connector.elements) s <<' '<< e;
}
if (!connector.properties.empty()) {
s <<"\nPROPERTIES";
for (int p : connector.properties) s <<' '<< p;
for (int e : c.elements)
s <<' '<< e;
}
s << std::endl <<"END";
return s;

return s <<"\nEND";
}


std::istream&
operator>> (std::istream& s, FFlConnectorItems& connector)
std::istream& operator>> (std::istream& s, FFlConnectorItems& c)
{
connector.clear();
// Lambda function reading a vector of integers from the input stream
auto&& readStream = [&s](std::vector<int>& data)
{
while (s)
{
char c = ' ';
while (s && isspace(c))
s >> c; // read until next non-space character
if (s)
s.putback(c);
if (!s || !isdigit(c))
return; // read until next non-digit character

int i;
s >> i;
if (s)
data.push_back(i);
}
};

c.clear();
std::string keyWord;
while (s.good()) {
while (s.good())
{
s >> keyWord;
bool isAlpha = true;
for (size_t i = 0; i < keyWord.size() && isAlpha; i++)
if (!isalpha(keyWord[i]))
isAlpha = false;

if (isAlpha) {
if (isAlpha)
{
if (keyWord == "NODES")
FFlConnectorItems::readStream(s,connector.nodes);
readStream(c.nodes);
else if (keyWord == "ELEMENTS")
FFlConnectorItems::readStream(s,connector.elements);
else if (keyWord == "PROPERTIES")
FFlConnectorItems::readStream(s,connector.properties);
readStream(c.elements);
else if (keyWord == "END")
break;
break;
}
}
return s;
}


void FFlConnectorItems::readStream(std::istream& is, std::vector<int>& data)
{
while (is) {
char c = ' ';
while (isspace(c)) {
is >> c;
if (!is) return;
}
is.putback(c);
if (!isdigit(c)) return; // read until next non-digit character

int i;
is >> i;
if (is)
data.push_back(i);
}
return s;
}
44 changes: 10 additions & 34 deletions src/FFlLib/FFlConnectorItems.H
Original file line number Diff line number Diff line change
Expand Up @@ -13,54 +13,30 @@


/*!
Class FFlConnectorItems is used by FmTriad to store spider connector
properties for reading and writing.
<i>Espen Medbo 2006</i>
\brief Storage of spider connector properties for Triads.
*/

class FFlConnectorItems
{
public:
FFlConnectorItems() {}
~FFlConnectorItems() {}

friend bool operator== (const FFlConnectorItems& a,
const FFlConnectorItems& b);
friend bool operator==(const FFlConnectorItems& a, const FFlConnectorItems& b);

friend std::ostream& operator<< (std::ostream& s, const FFlConnectorItems& connector);
friend std::istream& operator>> (std::istream& s, FFlConnectorItems& connector);
friend std::ostream& operator<<(std::ostream& s, const FFlConnectorItems& c);
friend std::istream& operator>>(std::istream& s, FFlConnectorItems& c);

private:
static void readStream (std::istream& is, std::vector<int>& data);

public:
void addNode (int nodeID) { this->nodes.push_back(nodeID); }
void addElement (int elementID) { this->elements.push_back(elementID); }
void addProperty(int propertyID) { this->properties.push_back(propertyID); }
void addNode(int nID) { this->nodes.push_back(nID); }
void addElement(int eID) { this->elements.push_back(eID); }

const std::vector<int>& getNodes () const { return this->nodes; }
const std::vector<int>& getElements () const { return this->elements; }
const std::vector<int>& getProperties() const { return this->properties; }
const std::vector<int>& getNodes() const { return this->nodes; }
const std::vector<int>& getElements() const { return this->elements; }

bool empty() const
{
return this->nodes.empty()
&& this->elements.empty()
&& this->properties.empty();
}
bool empty() const { return this->nodes.empty() && this->elements.empty(); }

void clear()
{
this->nodes.clear();
this->elements.clear();
this->properties.clear();
}
void clear() { this->nodes.clear(); this->elements.clear(); }

private:
std::vector<int> nodes;
std::vector<int> elements;
std::vector<int> properties;
};

#endif
4 changes: 3 additions & 1 deletion src/FFlLib/FFlIOAdaptors/FFlAllIOAdaptors.C
Original file line number Diff line number Diff line change
Expand Up @@ -20,16 +20,18 @@ void FFl::initAllReaders()
FFlOldFLMReader::init();
FFlNastranReader::init();
FFlSesamReader::init();
#ifdef FT_HAS_VKI
FFlAbaqusReader::init();
FFlAnsysReader::init();
#endif

initialized = true;
}


void FFl::releaseAllReaders()
{
FFlReaders::removeInstance ();
FFlReaders::removeInstance();

initialized = false;
}
Loading

0 comments on commit d1ee7ac

Please sign in to comment.