//# AipsrcVector.h: Read multiple values from the Aipsrc resource files //# Copyright (C) 1995,1996,1997,1999,2002 //# Associated Universities, Inc. Washington DC, USA. //# //# This library is free software; you can redistribute it and/or modify it //# under the terms of the GNU Library General Public License as published by //# the Free Software Foundation; either version 2 of the License, or (at your //# option) any later version. //# //# This library is distributed in the hope that it will be useful, but WITHOUT //# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or //# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public //# License for more details. //# //# You should have received a copy of the GNU Library General Public License //# along with this library; if not, write to the Free Software Foundation, //# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA. //# //# Correspondence concerning AIPS++ should be addressed as follows: //# Internet email: aips2-request@nrao.edu. //# Postal address: AIPS++ Project Office //# National Radio Astronomy Observatory //# 520 Edgemont Road //# Charlottesville, VA 22903-2475 USA //# //# $Id$ #ifndef CASA_AIPSRCVECTOR_H #define CASA_AIPSRCVECTOR_H #include #include #include #include #include namespace casacore { //# NAMESPACE CASACORE - BEGIN //# Forward declarations class Unit; // Read multiple values from the Aipsrc resource files // // // // //
  • AipsrcValue // // // // A class for getting multiple values from the Aipsrc files // // // // The available functions (and notes) are the same as in // AipsrcValue, but with a Vector result. // // // //
  • All types with a >> defined. // // Since interpretation of the keyword value string is done with the standard // input right-shift operator, specialisations are necessary for non-standard // cases like Bool and String. They are provided. // // // // // // // // Programs need a way to get multi-valued keywords from the Aipsrc files. // // // //
  • AipsError if the environment variables HOME and/or AIPSPATH not set. // // // // template class AipsrcVector : public Aipsrc { public: //# Constructors // Default constructor // See a note in AipsrcValue. AipsrcVector(); //# Destructor ~AipsrcVector(); //# Member functions // The find() functions will, given a keyword, return the value // of a matched keyword found in the files. If no match found the // function will be False, and the default returned if specified. // static Bool find(Vector &value, const String &keyword); static Bool find(Vector &value, const String &keyword, const Vector &deflt); // // These find() functions will, given a keyword, read the values // of a matched keyword as a Quantity. If no unit has been given in the // keyword value, the defun Unit will be assumed. The value returned // will be converted to the resun Unit. If no match found, the default // value is returned (see example above). // static Bool find(Vector &value, const String &keyword, const Unit &defun, const Unit &resun); static Bool find(Vector &value, const String &keyword, const Unit &defun, const Unit &resun, const Vector &deflt); // // Functions to register keywords for later use in get() and set(). The // returned value is the index for get() and set(). // static uInt registerRC(const String &keyword, const Vector &deflt); static uInt registerRC(const String &keyword, const Unit &defun, const Unit &resun, const Vector &deflt); // // Gets are like find, but using registered integers rather than names. // static const Vector &get(uInt keyword); // // Sets allow registered values to be set // static void set(uInt keyword, const Vector &deflt); // // Save registered value to $HOME/.aipsrc static void save(uInt keyword); private: //# Data static AipsrcVector myp_p; static std::mutex theirMutex; // register list // Block > tlst; Block ntlst; // //# Constructors // Copy constructor (not implemented) AipsrcVector &operator=(const AipsrcVector &other); //# Copy assignment (not implemented) AipsrcVector(const AipsrcVector &other); //# General member functions }; #define AipsrcVector_String AipsrcVector // Specialization of AipsrcVector for String // // // The name AipsrcVector_String is only for cxx2html // documentation problems. Use AipsrcVector in your code. // template <> class AipsrcVector_String : public Aipsrc { public: AipsrcVector_String(); ~AipsrcVector_String(); static Bool find(Vector &value, const String &keyword); static Bool find(Vector &value, const String &keyword, const Vector &deflt); static uInt registerRC(const String &keyword, const Vector &deflt); static const Vector &get(uInt keyword); static void set(uInt keyword, const Vector &deflt); static void save(uInt keyword); private: static AipsrcVector_String myp_p; static std::mutex theirMutex; Block > tlst; Block ntlst; AipsrcVector_String &operator=(const AipsrcVector_String &other); AipsrcVector_String(const AipsrcVector_String &other); }; #undef AipsrcVector_String #define AipsrcVector_Bool AipsrcVector // Specialization of AipsrcVector for Bool // // // The name AipsrcVector_Bool is only for cxx2html // documentation problems. Use AipsrcVector in your code. // template <> class AipsrcVector_Bool : public Aipsrc { public: AipsrcVector_Bool(); ~AipsrcVector_Bool(); static Bool find(Vector &value, const String &keyword); static Bool find(Vector &value, const String &keyword, const Vector &deflt); static uInt registerRC(const String &keyword, const Vector &deflt); static const Vector &get(uInt keyword); static void set(uInt keyword, const Vector &deflt); static void save(uInt keyword); private: static AipsrcVector_Bool myp_p; static std::mutex theirMutex; Block > tlst; Block ntlst; AipsrcVector_Bool &operator=(const AipsrcVector_Bool &other); AipsrcVector_Bool(const AipsrcVector_Bool &other); }; #undef AipsrcVector_Bool } //# NAMESPACE CASACORE - END #ifndef CASACORE_NO_AUTO_TEMPLATES #include #endif //# CASACORE_NO_AUTO_TEMPLATES #endif