Skip to content
Snippets Groups Projects
Select Git revision
  • gmsh_4_13_0
  • master default protected
  • hierarchical-basis
  • alphashapes
  • bl
  • relaying
  • new_export_boris
  • oras_vs_osm
  • reassign_partitions
  • distributed_fwi
  • rename-classes
  • fix/fortran-api-example-t4
  • robust_partitions
  • reducing_files
  • fix_overlaps
  • 3115-issue-fix
  • 3023-Fillet2D-Update
  • convert_fdivs
  • tmp_jcjc24
  • fixedMeshIF
  • save_edges
  • gmsh_4_14_0
  • gmsh_4_13_1
  • gmsh_4_12_2
  • gmsh_4_12_1
  • gmsh_4_12_0
  • gmsh_4_11_1
  • gmsh_4_11_0
  • gmsh_4_10_5
  • gmsh_4_10_4
  • gmsh_4_10_3
  • gmsh_4_10_2
  • gmsh_4_10_1
  • gmsh_4_10_0
  • gmsh_4_9_5
  • gmsh_4_9_4
  • gmsh_4_9_3
  • gmsh_4_9_2
  • gmsh_4_9_1
  • gmsh_4_9_0
40 results

naca_boundary_layer_3d.py

Blame
  • MacroManager.cpp 2.63 KiB
    // GetDP - Copyright (C) 1997-2015 P. Dular, C. Geuzaine
    //
    // See the LICENSE.txt file for license information. Please report all
    // bugs and problems to the public mailing list <getdp@onelab.info>.
    
    #include <stdio.h>
    #include <map>
    #include <stack>
    #include <string>
    #include "MacroManager.h"
    
    extern std::string getdp_yystring;
    
    class File_Position
    {
     public:
      long int lineno;
      fpos_t position;
      FILE *file;
      std::string filename;
    };
    
    class mystack
    {
     public:
      std::stack<File_Position> s;
    };
    
    class mymap
    {
     public:
      std::map<std::string, File_Position> inFile;
      std::map<std::string, std::string> inString;
    };
    
    MacroManager *MacroManager::_instance = 0;
    
    MacroManager::MacroManager()
    {
      _macros = new mymap;
      _calls = new mystack;
    }
    
    MacroManager *MacroManager::Instance()
    {
      if(!_instance) {
        _instance = new MacroManager;
      }
      return _instance;
    }
    
    void MacroManager::clear()
    {
      _macros->inFile.clear();
      _macros->inString.clear();
    }
    
    int MacroManager::enterMacro(const std::string &name, FILE **f,
                                 std::string &filename, long int &lno) const
    {
      if(_macros->inFile.find(name) == _macros->inFile.end())
        return 0;
      File_Position fpold;
      fpold.lineno = lno;
      fpold.filename = filename;
      fpold.file = *f;
      fgetpos(fpold.file, &fpold.position);
      _calls->s.push(fpold);
      File_Position fp = (_macros->inFile)[name];
      fsetpos(fp.file, &fp.position);
      *f = fp.file;
      filename = fp.filename;
      lno = fp.lineno;
      return 1;
    }
    
    int MacroManager::leaveMacro(FILE **f, std::string &filename, long int &lno)
    {
      if(!_calls->s.size())
        return 0;
      File_Position fp;
      fp = _calls->s.top();
      _calls->s.pop();
      fsetpos(fp.file, &fp.position);
      *f = fp.file;
      filename = fp.filename;
      //  lno = fp.lineno;
      // To fix: bad line number after leaving macro if not -1
      lno = fp.lineno - 1;
      return 1;
    }
    
    int MacroManager::createMacro(const std::string &name, FILE *f,
                                  const std::string &filename, long int lno)
    {
      if(_macros->inFile.find(name) != _macros->inFile.end())
        return 0;
      File_Position fp;
      fp.file = f;
      fp.filename = filename;
      fp.lineno = lno;
      fgetpos(fp.file, &fp.position);
      (_macros->inFile)[name] = fp;
      return 1;
    }
    
    int MacroManager::createStringMacro(const std::string &name,
                                        const std::string &value)
    {
      if(_macros->inString.find(name) != _macros->inString.end())
        return 0;
      (_macros->inString)[name] = value;
      return 1;
    }
    
    int MacroManager::enterStringMacro(const std::string &name) const
    {
      if(_macros->inString.find(name) == _macros->inString.end())
        return 0;
      getdp_yystring = (_macros->inString)[name];
      return 1;
    }