/* Starts timer for given tag. If it does not exist yet, it is added. Note: 1. The tag may not be nested with the same name 2. The tag may not equal "" */ void ProfileStart (char* str_tag) { entry_t* p_entry ; /* One the first call, we must initialize the profiler. */ if (!g_init) { Init () ; } /* Test for "" */ if (*str_tag == '\0') { fprintf (stdout, "ERROR in ProfileStart: a tag may not be \"\". Call is denied.") ; return ; } /* Search the entry with the given name */ p_entry = LookupTag (str_tag) ; if (!p_entry) { /* New tag, add it*/ p_entry = AddTag (str_tag) ; if (!p_entry) { fprintf (stdout, "WARNING in ProfileStart: no more space to store the tag (\"%s\"). Increase NUM_TAGS in \"profile.h\". Call is denied.\n", str_tag) ; return ; } } /* Check for nesting of equal tag.*/ if (Nested (str_tag)) { fprintf (stdout, "ERROR in ProfileStart: nesting of equal tags not allowed (\"%s\"). Call is denied.\n", str_tag) ; return ; } /* Increase the number of hits */ ++p_entry->i_calls ; /* Set the start time */ p_entry->start_time = clock () ; p_entry->i_stopped = 0 ; }
TToken ASNLexer::LookupToken(void) { char c = Char(); switch ( c ) { case ':': if ( Char(1) == ':' && Char(2) == '=' ) { StartToken(); AddChars(3); return T_DEFINE; } return T_SYMBOL; case '-': case '+': if ( IsDigit(Char(1)) ) { StartToken(); AddChar(); return LookupNumber(); } return T_SYMBOL; case '\"': StartToken(); AddChar(); StartString(); LookupString(); return T_STRING; case '\'': StartToken(); AddChar(); return LookupBinHexString(); case '[': StartToken(); AddChar(); LookupTag(); return T_TAG; default: if ( IsDigit(c) ) { StartToken(); AddChar(); return LookupNumber(); } else if ( c >= 'a' && c <= 'z' ) { StartToken(); AddChar(); LookupIdentifier(); return T_IDENTIFIER; } else if ( c >= 'A' && c <= 'Z' ) { StartToken(); AddChar(); LookupIdentifier(); return LookupKeyword(); } return T_SYMBOL; } }
/* Stops timer for given tag. Checks for existence. Adds the time between now and the Start call to the total time.*/ void ProfileStop (char* str_tag) { clock_t end_time ; entry_t* p_entry ; /* Test for "" */ if (*str_tag == '\0') { fprintf (stdout, "ERROR in ProfileStop: a tag may not be \"\". Call is denied.") ; return ; } /* Check for a existing name */ p_entry = LookupTag (str_tag) ; if (!p_entry) { fprintf (stdout, "WARNING in ProfileStop: tag \"%s\" was never started. Call is denied.\n", str_tag) ; return ; } /* Get the time */ end_time = clock () ; p_entry->l_total_ms += end_time - p_entry->start_time ; /* Reset */ p_entry->start_time = -1 ; p_entry->i_stopped = 1 ; }