/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You 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. */ #include "Level.h" #include #include #include #include using namespace decaf; using namespace decaf::lang; using namespace decaf::lang::exceptions; using namespace decaf::util; using namespace decaf::util::concurrent; using namespace decaf::util::logging; //////////////////////////////////////////////////////////////////////////////// namespace { std::vector levels; } //////////////////////////////////////////////////////////////////////////////// const Level Level::INHERIT( "INHERIT", 0 ); const Level Level::OFF( "OFF", Integer::MAX_VALUE ); const Level Level::SEVERE( "SEVERE", 1000 ); const Level Level::WARNING( "WARNING", 900 ); const Level Level::INFO( "INFO", 800 ); const Level Level::DEBUG( "DEBUG", 700 ); const Level Level::CONFIG( "CONFIG", 600 ); const Level Level::FINE( "FINE", 500 ); const Level Level::FINER( "FINER", 400 ); const Level Level::FINEST( "FINEST", 300 ); const Level Level::ALL( "ALL", Integer::MIN_VALUE ); //////////////////////////////////////////////////////////////////////////////// Level::Level( const std::string& name, int value ) : name( name ), value( value ) { levels.push_back( *this ); } //////////////////////////////////////////////////////////////////////////////// Level::~Level() { } //////////////////////////////////////////////////////////////////////////////// int Level::compareTo( const Level& value ) const { return this->value < value.value ? -1 : this->value > value.value ? 1 : 0; } //////////////////////////////////////////////////////////////////////////////// bool Level::equals( const Level& value ) const { return this->value == value.value; } //////////////////////////////////////////////////////////////////////////////// bool Level::operator==( const Level& value ) const { return this->value == value.value; } //////////////////////////////////////////////////////////////////////////////// bool Level::operator<( const Level& value ) const { return this->value < value.value; } //////////////////////////////////////////////////////////////////////////////// Level Level::parse( const std::string& name ) { bool isNameAnInt; int nameAsInt; try { nameAsInt = Integer::parseInt( name ); isNameAnInt = true; } catch( NumberFormatException& e ) { nameAsInt = 0; isNameAnInt = false; } // synchronized( &levelsLock ) { // // std::vector::const_iterator level = levels.begin(); // // for( ; level != levels.end(); ++level ) { // if( name == level->getName() ) { // return *level; // } // } // // // If the name was an int then we loop again to check the int value // // against each level's value. // if( isNameAnInt ) { // // for( level = levels.begin(); level != levels.end(); ++ level ) { // if( nameAsInt == level->intValue()) { // return *level; // } // } // } // } if( !isNameAnInt ) { throw IllegalArgumentException( __FILE__, __LINE__, "Could not find match for Level Name: %s", name.c_str() ); } return Level( name, nameAsInt ); }