Loading...
Searching...
No Matches
Casarc.h
Go to the documentation of this file.
//# Casarc.h: Class to read the casa general resource files
//# Copyright (C) 2009
//# 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: casa-feedback@nrao.edu.
//# Postal address: AIPS++ Project Office
//# National Radio Astronomy Observatory
//# 520 Edgemont Road
//# Charlottesville, VA 22903-2475 USA
#ifndef CASA_CASARC_H
#define CASA_CASARC_H
#include <casacore/casa/aips.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string>
#include <list>
#include <map>
namespace casacore { //# NAMESPACE CASACORE - BEGIN
class Casarc {
friend class CasarcCleanup;
public:
typedef std::map<std::string,std::string>::const_iterator iterator;
// return default casarc file, e.g. ~/.casarc
static Casarc &instance( );
// set and clear the default casarc path (to something other than ~/.casarc)
static void setDefaultPath( const std::string &path );
static void clearDefaultPath( );
// return a casarc object attached to a particular file
static Casarc &instance( const std::string &path );
// return the list of rcfiles that have been loaded
static const std::list<Casarc*> & list( );
// adds the keyword->value mapping
void put( const std::string &keyword, const std::string &value );
// retrieves the mapping for keyword (or "" if the mapping is not defined)
std::string get( const std::string &keyword );
// retrieves the mapping for keyword in value (and returns true if the
// mapping is defined or false otherwise)
bool get( const std::string &keyword, std::string &value );
size_t size( ) const;
// path to the file that this Casarc mirrors...
const std::string &path( ) const { return filename; }
iterator begin( );
iterator end( );
private:
class meta_entry_ {
public:
meta_entry_( off_t keys_, int keyl_, off_t vals_, int vall_, off_t times_, int timel_ ) :
key_offset_(keys_), key_len_(keyl_),
val_offset_(vals_), val_len_(vall_),
time_offset_(times_), time_len_(timel_) { }
off_t key_offset( ) const { return key_offset_; }
int key_length( ) const { return key_len_; }
off_t value_offset( ) const { return val_offset_; }
int value_length( ) const { return val_len_; }
off_t time_offset( ) const { return time_offset_; }
int time_length( ) const { return time_len_; }
private:
off_t key_offset_;
int key_len_;
off_t val_offset_;
int val_len_;
off_t time_offset_;
int time_len_;
};
char *mapped_file;
off_t mapped_file_size;
std::list<int> stale_fds;
void close( int );
std::list<pid_t> have_lock;
enum lock_mode { READ, READ_WRITE, WRITE, APPEND };
// returns a file descriptor or -1 on error...
int lock( lock_mode mode );
void unlock( int fd );
void sync( );
double current_modification_time( struct stat &buf );
std::string filename;
double timestamp;
std::map<std::string,std::string> rcmap;
// this is broken off separate from the rcmap to allow the
// rcmap to be used for iteration by users of this class...
std::map<std::string,meta_entry_> rcmetamap;
void read_file( );
ino_t inode;
// singleton Casarcs, (inode->casarc)
static std::map<ino_t,Casarc*> *rcfiles;
static std::map<std::string,Casarc*> *filenames;
static std::list<Casarc*> *rclist;
static std::string *default_path;
// path is the path to the .casarc (or .aipsrc file)
Casarc( const std::string &path );
static bool initialized;
static void startup( );
static void shutdown( );
~Casarc( ) { }
};
static class CasarcCleanup {
public:
CasarcCleanup( ) { creation_count += 1; }
~CasarcCleanup( ) { if ( --creation_count == 0 ) { Casarc::shutdown( ); } }
private:
static unsigned int creation_count;
} local_cleanup_object;
} //# NAMESPACE CASACORE - END
#endif
casacore::CasarcCleanup::CasarcCleanup
CasarcCleanup()
Definition Casarc.h:147
casacore::CasarcCleanup::creation_count
static unsigned int creation_count
Definition Casarc.h:150
casacore::CasarcCleanup::~CasarcCleanup
~CasarcCleanup()
Definition Casarc.h:148
casacore::Casarc::meta_entry_::time_length
int time_length() const
Definition Casarc.h:93
casacore::Casarc::meta_entry_::meta_entry_
meta_entry_(off_t keys_, int keyl_, off_t vals_, int vall_, off_t times_, int timel_)
Definition Casarc.h:81
casacore::Casarc::meta_entry_::key_len_
int key_len_
Definition Casarc.h:97
casacore::Casarc::meta_entry_::val_len_
int val_len_
Definition Casarc.h:99
casacore::Casarc::meta_entry_::key_offset_
off_t key_offset_
Definition Casarc.h:96
casacore::Casarc::meta_entry_::time_offset
off_t time_offset() const
Definition Casarc.h:92
casacore::Casarc::meta_entry_::value_offset
off_t value_offset() const
Definition Casarc.h:89
casacore::Casarc::meta_entry_::time_offset_
off_t time_offset_
Definition Casarc.h:100
casacore::Casarc::meta_entry_::val_offset_
off_t val_offset_
Definition Casarc.h:98
casacore::Casarc::meta_entry_::value_length
int value_length() const
Definition Casarc.h:90
casacore::Casarc::meta_entry_::key_offset
off_t key_offset() const
Definition Casarc.h:86
casacore::Casarc::meta_entry_::time_len_
int time_len_
Definition Casarc.h:101
casacore::Casarc::meta_entry_::key_length
int key_length() const
Definition Casarc.h:87
casacore::Casarc::Casarc
Casarc(const std::string &path)
path is the path to the.casarc (or.aipsrc file)
casacore::Casarc::~Casarc
~Casarc()
Definition Casarc.h:142
casacore::Casarc::get
bool get(const std::string &keyword, std::string &value)
retrieves the mapping for keyword in value (and returns true if the mapping is defined or false other...
casacore::Casarc::instance
static Casarc & instance()
return default casarc file, e.g.
casacore::Casarc::mapped_file_size
off_t mapped_file_size
Definition Casarc.h:105
casacore::Casarc::begin
iterator begin()
casacore::Casarc::rcmetamap
std::map< std::string, meta_entry_ > rcmetamap
this is broken off separate from the rcmap to allow the rcmap to be used for iteration by users of th...
Definition Casarc.h:126
casacore::Casarc::put
void put(const std::string &keyword, const std::string &value)
adds the keyword->value mapping
casacore::Casarc::startup
static void startup()
casacore::Casarc::list
static const std::list< Casarc * > & list()
return the list of rcfiles that have been loaded
casacore::Casarc::size
size_t size() const
casacore::Casarc::iterator
std::map< std::string, std::string >::const_iterator iterator
Definition Casarc.h:44
casacore::Casarc::default_path
static std::string * default_path
Definition Casarc.h:136
casacore::Casarc::rcfiles
static std::map< ino_t, Casarc * > * rcfiles
singleton Casarcs, (inode->casarc)
Definition Casarc.h:133
casacore::Casarc::shutdown
static void shutdown()
casacore::Casarc::setDefaultPath
static void setDefaultPath(const std::string &path)
set and clear the default casarc path (to something other than ~/.casarc)
casacore::Casarc::read_file
void read_file()
casacore::Casarc::lock
int lock(lock_mode mode)
returns a file descriptor or -1 on error...
casacore::Casarc::stale_fds
std::list< int > stale_fds
Definition Casarc.h:107
casacore::Casarc::get
std::string get(const std::string &keyword)
retrieves the mapping for keyword (or "" if the mapping is not defined)
casacore::Casarc::clearDefaultPath
static void clearDefaultPath()
casacore::Casarc::rcmap
std::map< std::string, std::string > rcmap
Definition Casarc.h:123
casacore::Casarc::end
iterator end()
casacore::Casarc::rclist
static std::list< Casarc * > * rclist
Definition Casarc.h:135
casacore::Casarc::unlock
void unlock(int fd)
casacore::Casarc::CasarcCleanup
friend class CasarcCleanup
Definition Casarc.h:40
casacore::Casarc::filenames
static std::map< std::string, Casarc * > * filenames
Definition Casarc.h:134
casacore::Casarc::instance
static Casarc & instance(const std::string &path)
return a casarc object attached to a particular file
casacore::Casarc::lock_mode
lock_mode
Definition Casarc.h:112
casacore::Casarc::WRITE
@ WRITE
Definition Casarc.h:112
casacore::Casarc::READ
@ READ
Definition Casarc.h:112
casacore::Casarc::APPEND
@ APPEND
Definition Casarc.h:112
casacore::Casarc::READ_WRITE
@ READ_WRITE
Definition Casarc.h:112
casacore::Casarc::filename
std::string filename
Definition Casarc.h:120
casacore::Casarc::initialized
static bool initialized
Definition Casarc.h:139
casacore::Casarc::mapped_file
char * mapped_file
Definition Casarc.h:104
casacore::Casarc::inode
ino_t inode
Definition Casarc.h:130
casacore::Casarc::sync
void sync()
casacore::Casarc::current_modification_time
double current_modification_time(struct stat &buf)
casacore::Casarc::have_lock
std::list< pid_t > have_lock
Definition Casarc.h:110
casacore::Casarc::timestamp
double timestamp
Definition Casarc.h:121
casacore::Casarc::path
const std::string & path() const
path to the file that this Casarc mirrors...
Definition Casarc.h:72
casacore::Casarc::close
void close(int)
casacore
this file contains all the compiler specific defines
Definition mainpage.dox:28
casacore::local_cleanup_object
static class casacore::CasarcCleanup local_cleanup_object
casacore::value
NewDelAllocator< T > NewDelAllocator< T >::value
Definition Allocator.h:369