// Filename: interrogateDatabase.I
// Created by:  drose (01Aug00)
//
////////////////////////////////////////////////////////////////////
//
// PANDA 3D SOFTWARE
// Copyright (c) 2001 - 2004, Disney Enterprises, Inc.  All rights reserved
//
// All use of this software is subject to the terms of the Panda 3d
// Software license.  You should have received a copy of this license
// along with this source code; you will also find a current copy of
// the license at http://etc.cmu.edu/panda3d/docs/license/ .
//
// To contact the maintainers of this program write to
// panda3d-general@lists.sourceforge.net .
//
////////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////////
//     Function: InterrogateDatabase::check_latest
//       Access: Public
//  Description: Checks that all the latest data for all the libraries
//               have been loaded.  Loads them if not.
////////////////////////////////////////////////////////////////////
INLINE void InterrogateDatabase::
check_latest() {
  if (!_requests.empty()) {
    load_latest();
  }
}

////////////////////////////////////////////////////////////////////
//     Function: InterrogateDatabase::lookup_type_by_name
//       Access: Public
//  Description: Returns the TypeIndex associated with the first type
//               found with the given name, or 0 if no type has this
//               name.
////////////////////////////////////////////////////////////////////
INLINE TypeIndex InterrogateDatabase::
lookup_type_by_name(const string &name) {
  check_latest();
  return lookup(name, _types_by_name, LT_type_name,
                &InterrogateDatabase::freshen_types_by_name);
}

////////////////////////////////////////////////////////////////////
//     Function: InterrogateDatabase::lookup_type_by_scoped_name
//       Access: Public
//  Description: Returns the TypeIndex associated with the first type
//               found with the given scoped name, or 0 if no type has
//               this name.
////////////////////////////////////////////////////////////////////
INLINE TypeIndex InterrogateDatabase::
lookup_type_by_scoped_name(const string &name) {
  check_latest();
  return lookup(name, _types_by_scoped_name, LT_type_scoped_name,
                &InterrogateDatabase::freshen_types_by_scoped_name);
}

////////////////////////////////////////////////////////////////////
//     Function: InterrogateDatabase::lookup_type_by_true_name
//       Access: Public
//  Description: Returns the TypeIndex associated with the first type
//               found with the given true name, or 0 if no type has
//               this name.
////////////////////////////////////////////////////////////////////
INLINE TypeIndex InterrogateDatabase::
lookup_type_by_true_name(const string &name) {
  check_latest();
  return lookup(name, _types_by_true_name, LT_type_true_name,
                &InterrogateDatabase::freshen_types_by_true_name);
}

////////////////////////////////////////////////////////////////////
//     Function: InterrogateDatabase::lookup_manifest_by_name
//       Access: Public
//  Description: Returns the ManifestIndex associated with the first
//               manifest found with the given name, or 0 if no
//               manifest has this name.
////////////////////////////////////////////////////////////////////
INLINE ManifestIndex InterrogateDatabase::
lookup_manifest_by_name(const string &name) {
  check_latest();
  return lookup(name, _manifests_by_name, LT_manifest_name,
                &InterrogateDatabase::freshen_manifests_by_name);
}

////////////////////////////////////////////////////////////////////
//     Function: InterrogateDatabase::lookup_element_by_name
//       Access: Public
//  Description: Returns the ElementIndex associated with the first
//               element found with the given name, or 0 if no element
//               has this name.
////////////////////////////////////////////////////////////////////
INLINE ElementIndex InterrogateDatabase::
lookup_element_by_name(const string &name) {
  check_latest();
  return lookup(name, _elements_by_name, LT_element_name,
                &InterrogateDatabase::freshen_elements_by_name);
}

////////////////////////////////////////////////////////////////////
//     Function: InterrogateDatabase::lookup_element_by_scoped_name
//       Access: Public
//  Description: Returns the ElementIndex associated with the first
//               element found with the given scoped name, or 0 if no
//               element has this name.
////////////////////////////////////////////////////////////////////
INLINE ElementIndex InterrogateDatabase::
lookup_element_by_scoped_name(const string &name) {
  check_latest();
  return lookup(name, _elements_by_scoped_name, LT_element_scoped_name,
                &InterrogateDatabase::freshen_elements_by_scoped_name);
}
