LCOV - code coverage report
Current view: top level - /Users/moyix/git/vrml - file_handler.cpp (source / functions) Coverage Total Hit
Test: vrml_claude.info Lines: 88.5 % 78 69
Test Date: 2024-03-08 16:33:03 Functions: 90.0 % 10 9

            Line data    Source code
       1              : #include "file_handler.h"
       2              : 
       3              : using namespace std;
       4              : 
       5              : 
       6              : vector<string> *token_stack = NULL;
       7              : ifstream *fp = NULL;
       8              : 
       9          663 : void init_token_stack()
      10              : {
      11          663 :     if (token_stack == NULL) {
      12          663 :         token_stack = new vector<string>;
      13          663 :     }
      14          663 : }
      15              : 
      16            0 : void close_file(ifstream *fp)
      17              : {
      18              : 
      19            0 :     fp->close();
      20              : 
      21            0 : }
      22              : 
      23              : 
      24          663 : ifstream *open_file(string file_name)
      25              : {
      26              : 
      27          663 :     fp = new ifstream();
      28          663 :     fp->open(file_name.c_str());
      29              : 
      30          663 :     if (fp->is_open()) {
      31          663 :         init_token_stack();
      32          663 :         return fp;
      33              : 
      34              :     } else {
      35            0 :         cout << "Unable to open file" << endl;
      36            0 :         close_file(fp);
      37            0 :         return NULL;
      38              :     }
      39          663 : }
      40              : 
      41              : 
      42              : 
      43              : 
      44          663 : void empty_token_stack()
      45              : {
      46              :     // opote adeiazei to stack to programma paei kai tsimpaei nea grammi
      47              :     // apo to arxeio
      48          663 :     token_stack->erase(token_stack->begin(), token_stack->end());
      49          663 : }
      50              : 
      51       171376 : void trim(string *s)
      52              : {
      53       171376 :     size_t p = s->find_first_not_of(" \t");
      54       171376 :     s->erase(0, p);
      55              : 
      56       171376 :     p = s->find_last_not_of(" \t");
      57       171376 :     if (string::npos != p)
      58       170845 :     s->erase(p+1);
      59       171376 : }
      60              : 
      61       171376 : string *read_line(string *line)
      62              : {
      63              : 
      64       171376 :     if (fp->good()) {
      65              : 
      66       171376 :         getline(*fp, *line);
      67       171376 :         trim(line);
      68              : 
      69              :         //cout << "line: " << *line << endl;
      70              : 
      71       171376 :     } else {
      72            0 :         line->clear();
      73              :     }
      74       171376 :     return line;
      75              : }
      76              : 
      77          663 : void go_to_next_line()
      78              : {
      79          663 :     empty_token_stack();
      80          663 : }
      81              : 
      82              : 
      83       403863 : int is_blank(string token)
      84              : {
      85       403863 :     size_t value = 0;
      86              : 
      87       403863 :     if (token.find_first_not_of("\t\n ") == string::npos) {
      88              :         //string is blank
      89            0 :         value = 1;
      90            0 :     }
      91              : 
      92       403863 :     return value;
      93              : 
      94              : }
      95              : 
      96              : 
      97              : 
      98       170845 : void tokenize_line(string line)
      99              : {
     100              : 
     101       170845 :     size_t  next = 0;
     102       170845 :     size_t  prev = 0;
     103       170845 :     string delimiter = " ";
     104       170845 :     string substring;
     105              : 
     106       403863 :     while ((next = line.find_first_of(delimiter, prev)) != string::npos) {
     107              : 
     108       233018 :         if (next - prev != 0) {
     109              : 
     110       233018 :             substring = line.substr(prev, next - prev);
     111              : 
     112       233018 :             if (!is_blank(substring)) {
     113              : 
     114       233018 :                 token_stack->push_back(substring);
     115       233018 :             }
     116       233018 :         }
     117       233018 :         prev = next + 1;
     118              :     }
     119              : 
     120       170845 :     if (prev < line.size()) {
     121              : 
     122       170845 :         substring = line.substr(prev);
     123              : 
     124       170845 :         if (!is_blank(substring)) {
     125              : 
     126       170845 :             token_stack->push_back(substring);
     127              : 
     128       170845 :         }
     129       170845 :     }
     130       170845 : }
     131              : 
     132              : 
     133       403005 : string get_token()
     134              : {
     135              : 
     136       403005 :     string value, line;
     137              : 
     138              : 
     139       403005 :     if (!token_stack->empty()) {
     140       231629 :         value = token_stack->front();
     141       231629 :         token_stack->erase(token_stack->begin());
     142       231629 :     } else {
     143       171376 :         read_line(&line);
     144       171376 :         if (line.size() != 0) {
     145       170845 :             tokenize_line(line);
     146       170845 :             value = token_stack->front();
     147       170845 :             token_stack->erase(token_stack->begin());
     148       170845 :         }
     149              :     }
     150              : 
     151              :     //cout << "tokn: " << value << endl;
     152       403005 :     return value;
     153              : 
     154       403005 : }
        

Generated by: LCOV version 2.0-1