Skip to content
Snippets Groups Projects
Select Git revision
  • 04670dbf9177590b28f4c7d2443932cc1f7c0b2b
  • master default
  • 1.1
  • 1.0
4 results

model.cpp

Blame
  • 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);