/*
 Copyright 2019 Alain Dargelas

 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
 You may obtain a copy of the License at

 http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
 */

/*
 * File:   TimeInfo.cpp
 * Author: alain
 *
 * Created on June 8, 2017, 8:27 PM
 */
#include <string>
#include "../SourceCompile/SymbolTable.h"
#include "TimeInfo.h"

using namespace SURELOG;

TimeInfo::~TimeInfo() {}

TimeInfo::Unit TimeInfo::unitFromString(std::string s) {
  if (s == "s")
    return Second;
  else if (s == "ms")
    return Millisecond;
  else if (s == "us")
    return Microsecond;
  else if (s == "ns")
    return Nanosecond;
  else if (s == "ps")
    return Picosecond;
  else if (s == "fs")
    return Femtosecond;
  return Picosecond;
}
