Select Git revision
-
Carl Philipp Klemm authoredCarl Philipp Klemm authored
model.cpp 12.47 KiB
#include <cstddef>
#include <model.h>
#include <iostream>
#include <assert.h>
#include <vector>
#include "strops.h"
#include "cap.h"
#include "resistor.h"
#include "inductor.h"
#include "constantphase.h"
#include "finitetr.h"
#include "warburg.h"
#include "paralellseriel.h"
#include "log.h"
using namespace eis;
size_t Model::opposingBraket(const std::string& str, size_t index, char bracketChar)
{
for(size_t i = index; i < str.size(); ++i)
{
if(str[i] == bracketChar)
return i;
}
return std::string::npos;
}
size_t Model::deepestBraket(const std::string& str)
{
size_t deepestPos = std::string::npos;
size_t deepestLevel = 0;
size_t level = 0;
for(size_t i = 0; i < str.size(); ++i)
{
if(str[i] == '(')
{
++level;
if(level > deepestLevel)
{
deepestLevel = level;
deepestPos = i;
}
}
}
return deepestPos;
}
Componant *Model::processBrackets(std::string& str, size_t& bracketCounter)
{
size_t bracketStart = deepestBraket(str);
Log(Log::DEBUG)<<str<<" bracket start "<<(bracketStart == std::string::npos ? std::string("npos") : std::to_string(bracketStart));
if(bracketStart == std::string::npos)
{
Componant* componant = processBracket(str);
if(!componant)
Log(Log::DEBUG)<<"Warning: can not create componant type B for "<<str;
return componant;
}
size_t bracketEnd = opposingBraket(str, bracketStart);
if(bracketEnd == std::string::npos)
{
return nullptr;
}
std::string bracket = str.substr(bracketStart+1, bracketEnd-1-bracketStart);
Componant* componant = processBracket(bracket);