⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 propertylistimpl.h

📁 cint...昨天看到有个c++解释器,叫CINT,down下来一用,很爽,推荐大家也去看一看。 相信不少朋友们早就知道这个东西了
💻 H
字号:
// @(#)root/reflex:$Name:  $:$Id: PropertyListImpl.h,v 1.3 2006/09/14 13:38:25 roiser Exp $// Author: Stefan Roiser 2004// Copyright CERN, CH-1211 Geneva 23, 2004-2006, All rights reserved.//// Permission to use, copy, modify, and distribute this software for any// purpose is hereby granted without fee, provided that this copyright and// permissions notice appear in all copies and derivatives.//// This software is provided "as is" without express or implied warranty.#ifndef ROOT_Reflex_PropertyListImpl#define ROOT_Reflex_PropertyListImpl// Include files#include "Reflex/Kernel.h"#include "Reflex/Any.h"#include <map>#include <iostream>namespace ROOT {   namespace Reflex {      /**       * @class PropertyList PropertyList.h Reflex/PropertyList.h       * @author Stefan Roiser       * @date 24/11/2003       * @ingroup Ref       */      class RFLX_API PropertyListImpl {         friend std::ostream & operator << ( std::ostream & s,                                             const PropertyListImpl & p );      public:         /** default constructor */         PropertyListImpl();         /** copy constructor */         PropertyListImpl( const PropertyListImpl & pl);         /** destructor */         virtual ~PropertyListImpl();         /**          * AddProperty will add a key value pair to the PropertyNth lsit          * @param key the key of the PropertyNth          * @param value the value of the PropertyNth (as any object)          * @return the property key of this property          */         size_t AddProperty( const std::string & key,                             const Any & value );         /**          * AddProperty will add a property value pair to the property list          * @param key the key of the property          * @param value the value of the property (as any object)          */         void AddProperty( size_t key,                           const Any & value );         /**          * AddProperty will add a key value pair to the PropertyNth lsit          * @param key the key of the PropertyNth          * @param value the value of the PropertyNth (as any object)          * @return the property key of this property          */         size_t AddProperty( const std::string & key,                             const char * value );               /**          * AddProperty will add a key value pair to the property list          * @param key the key of the property          * @param value the value of the property (as any object)          */         void AddProperty( size_t key,                           const char * value );          /**          * ClearProperties will remove all properties from the list          */         void ClearProperties();               /**          * HasProperty will return true if the property list contains a key "key" and           * the property for this key is valid          * @param  key to look for           * @return true if a valid property for key exists          */         bool HasProperty( const std::string & key ) const;         /**          * Key_Begin will return the begin iterator of the key container          * @return begin iterator of key container          */         static StdString_Iterator Key_Begin();                   /**          * Key_End will return the end iterator of the key container          * @return end iterator of key container          */         static StdString_Iterator Key_End();                   /**          * Key_RBegin will return the rbegin iterator of the key container          * @return rbegin iterator of key container          */         static Reverse_StdString_Iterator Key_RBegin();                   /**          * Key_REnd will return the rend iterator of the key container          * @return rend iterator of key container          */         static Reverse_StdString_Iterator Key_REnd();          /**          * KeysAsString will return a space separated list of all keys          * @return a list of all currently allocated keys          */         static std::string KeysAsString();         /**          * KeyAt will return the nth key allocated          * @param nth key currently allocated          * @return key as a string          */         static const std::string & KeyAt( size_t nth );         /**          * Key is the static getter function to return the index of a key. If allocateNew is           * set to true a new key will be allocated if it doesn't exist and it's index returned.          * Otherwise if the key exists the function returns it's index or 0 if no key exists.          * @param key the key to look for           * @param allocateNew allocate a new key if the key doesn't exist          * @return key index or 0 if no key exists and allocateNew is set to false          */         static size_t KeyByName( const std::string & key,                                  bool allocateNew = false );         /**          * KeySize will return the number of currently allocated keys          * @return number of allocated keys          */         static size_t KeySize();         /**          * propertyNumString will return the nth PropertyNth as a string if printable          * @param  key the PropertyNth key          * @return nth PropertyNth value as string          */         std::string PropertyAsString(const std::string & key) const;         /**          * PropertyAsString will return the property value as a string if it exists          * The parameter is a property key which can be aquired with the PropertyKey method.          * @param key property key to look for          * @return string representation of the property          */         std::string PropertyAsString( size_t key ) const;                 /**          * PropertyKey will return the the key value corresponding to the parameter given          * @param key the string denoting the key value to lookup          * @param allocateNew if set to true a new key will be allocated if it doesn't exist          if set to false and the key doesn't exist the function returns 0          * @return the key value corresponding to the key param          */         size_t PropertyKey( const std::string & key,                             bool allocateNew = false ) const;         /**          * PropertyKeys will return all keys of this PropertyNth list          * @return all PropertyNth keys          */         std::string PropertyKeys() const;         /**          * PropertyCount will return the number of properties attached          * to this item          * @return number of properties          */         size_t PropertyCount() const;         /**          * propertyNumValue will return the nth PropertyNth value           * @param  key the PropertyNth key          * @return nth PropertyNth value          */         Any & PropertyValue(const std::string & key) const;         /**          * PropertyAsString will return the property value as an Any object if it exists          * The parameter is a property key which can be aquired with the PropertyKey method.          * @param key property key to look for          * @return Any representation of the property          */         Any & PropertyValue( size_t key ) const;                  /**          * RemoveProperty will remove a key value pair to the PropertyNth lsit          * @param key the key of the PropertyNth          */         void RemoveProperty( const std::string & key );         /**          * RemoveProperty will remove a property value from the property list           * @param key of the property identified by the property key number          */         void RemoveProperty( size_t key );      private:         /**           * the Property container           */         typedef std::vector< Any > Properties;         /** the properties of the item           * @label properties          * @link aggregationByValue          * @clientCardinality 1          * @supplierCardinality 0..1          */         std::vector< Any > * fProperties;      }; // class PropertyListImpl      /**        * will put the PropertyNth (key and value) on the ostream if printable       * @param s the reference to the stream       * @return the stream       */      std::ostream & operator << ( std::ostream & s,                                   const PropertyListImpl & p );   } //namespace Reflex} //namespace ROOT//-------------------------------------------------------------------------------inline ROOT::Reflex::PropertyListImpl::PropertyListImpl() //-------------------------------------------------------------------------------   : fProperties( 0 ) {}//-------------------------------------------------------------------------------inline ROOT::Reflex::PropertyListImpl::PropertyListImpl( const PropertyListImpl & pl ) //-------------------------------------------------------------------------------   : fProperties( pl.fProperties ) {}  //-------------------------------------------------------------------------------inline ROOT::Reflex::PropertyListImpl::~PropertyListImpl() {//-------------------------------------------------------------------------------   if ( fProperties ) delete fProperties;}//-------------------------------------------------------------------------------inline size_t ROOT::Reflex::PropertyListImpl::AddProperty( const std::string & key,                                                           const Any & value ) {//-------------------------------------------------------------------------------   size_t k = PropertyKey( key, true );   AddProperty( k, value);   return k;}//-------------------------------------------------------------------------------inline void ROOT::Reflex::PropertyListImpl::AddProperty( size_t key,                                                         const Any & value ) {//-------------------------------------------------------------------------------   if ( ! fProperties ) fProperties = new Properties();   if ( key >= fProperties->size() ) fProperties->resize( key+1, Dummy::Any());   (*fProperties)[key] = value;}//-------------------------------------------------------------------------------inline size_t ROOT::Reflex::PropertyListImpl::AddProperty( const std::string & key,                                                           const char* value ) {//-------------------------------------------------------------------------------   return AddProperty( key, Any(value) );}//-------------------------------------------------------------------------------inline void ROOT::Reflex::PropertyListImpl::AddProperty( size_t key,                                                         const char * value ) {//-------------------------------------------------------------------------------   AddProperty( key, Any(value));}//-------------------------------------------------------------------------------inline void ROOT::Reflex::PropertyListImpl::RemoveProperty( const std::string & key ) {//-------------------------------------------------------------------------------   RemoveProperty( PropertyKey( key ));}//-------------------------------------------------------------------------------inline void ROOT::Reflex::PropertyListImpl::RemoveProperty( size_t key ) {//-------------------------------------------------------------------------------   if ( fProperties ) fProperties->at(key).Swap(Dummy::Any());}#endif // ROOT_Reflex_PropertyListImpl

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -