mxmPerlStyleHash.h

00001 //           ///          //                                  C++ Cross Platform
00002 //          /////        ////
00003 //         /// XXX     XXX ///            ///////////   /////////     ///   ///
00004 //        ///    XXX XXX    ///         ///             ///    ///   ///  ///
00005 //       ///       XXX       ///         /////////     ///      //  //////
00006 //      ///      XXX XXX      ///               ///   ///    ///   ///  ///
00007 //     ////    XXX     XXX    ////    ////////////  //////////    ///   ///
00008 //    ////                     ////
00009 //   ////  M  O  B  O  T  I  X  ////////////////////////////////////////////////
00010 //  //// Security Vision Systems //////////////////////////////////////////////
00011 //
00012 //  $Author: khe_admin $
00013 //  $LastChangedBy: khe_admin $
00014 //  $LastChangedDate: 2007-06-29 15:34:53 +0200 (Fri, 29 Jun 2007) $
00015 //  $HeadURL: http://svn.mobotix.net/svn/mxsdk/src/mxm/trunk/include/mxm/core/mxmPerlStyleHash.h $
00016 //
00018      //
00019      //  MOBOTIX MxPEG SDK
00020      //
00021      //  This file belongs to the C++ library released as part of the MxPEG SDK.
00022      //
00023      //  This software is licenced under the BSD licence,
00024      //  http://www.opensource.org/licenses/bsd-license.php
00025      //
00026      //  Copyright (c) 2005 - 2007, MOBOTIX AG
00027      //  All rights reserved.
00028      //
00029      //  Redistribution and use in source and binary forms, with or without
00030      //  modification, are permitted provided that the following conditions are
00031      //  met:
00032      //
00033      //  - Redistributions of source code must retain the above copyright
00034      //    notice, this list of conditions and the following disclaimer.
00035      //
00036      //  - Redistributions in binary form must reproduce the above copyright
00037      //    notice, this list of conditions and the following disclaimer in the
00038      //    documentation and/or other materials provided with the distribution.
00039      //
00040      //  - Neither the name of MOBOTIX AG nor the names of its contributors may
00041      //    be used to endorse or promote products derived from this software
00042      //    without specific prior written permission.
00043      //
00044      //  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00045      //  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00046      //  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
00047      //  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
00048      //  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
00049      //  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
00050      //  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
00051      //  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
00052      //  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
00053      //  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
00054      //  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00055      //
00057 
00058 
00059 
00060 #ifndef __MXM_PERLSTYLEHASH_H__
00061 #define __MXM_PERLSTYLEHASH_H__
00062 
00063 
00064 
00065 #include <mxm/core/mxmList.h>
00066 #include <mxm/core/mxmTypeDecider.h>
00067 #include <mxm/core/mxmString.h>
00068 
00069 
00070 
00071 class mxmStringList;
00072 
00073 
00074 
00077 
00120 class MXM_CORE_API mxmPerlStyleHash : public mxmList {
00121   
00122  public:
00124   class MXM_CORE_API Iterator : public mxmList::Iterator {
00125    public:
00126     Iterator(const mxmPerlStyleHash *hash);
00127     Iterator();
00128    public:
00130     mxmObject *nextItem(void);
00131   };
00133   class MXM_CORE_API KeyValuePair : public mxmObject {
00134    private:
00135     mxmString *Key;
00136     mxmString *Value;
00137    public:
00138     KeyValuePair(mxmString *key, mxmString *value);
00139     ~KeyValuePair();
00140    public:
00141     mxmString *key(void);
00142     mxmString *value(void);
00143   };
00145   class KeyValuePairDecider : public mxmTypeDecider {
00146    public:
00147     bool isOfProperType(const mxmObject *object);
00148   };
00149   
00150  private:
00151   bool CaseInsensitiveKeys;
00152   void *StableABIDataExtension;
00153   
00154  public:
00156   static mxmPerlStyleHash emptyHash(void); 
00158   static mxmPerlStyleHash fromCommandLineArg(const mxmString &arg);
00159   
00160  public:
00161   mxmPerlStyleHash();
00162   mxmPerlStyleHash(const mxmPerlStyleHash &other_hash);
00163  private:
00164   void init_mxmPerlStyleHash(void);
00165   
00166  public:
00167   mxmPerlStyleHash &operator=(const mxmPerlStyleHash &other_hash);
00168   
00169  public:
00171   mxmString &operator[](const mxmString &key);
00174   mxmString value(const mxmString &key) const;
00177   void deleteKey(const mxmString &key);
00179   void setCaseInsensitiveKeysMode(bool enabled);
00182   void mergeKeys(const mxmPerlStyleHash &other_hash,
00183                  const mxmStringList &allowed_key_mask,
00184                  bool treat_mask_as_prefixes = false,
00185                  const mxmString &target_key_prefix = "");
00187   void mergeKeysFromString(const mxmString &hash_string,
00188                            const mxmString &pair_delimiters,
00189                            const mxmString &key_value_separators,
00190                            const mxmString &trim_chars);
00192   mxm::smart<mxmStringList> enumerateKeys(void) const;
00195   void purgeValueCharacters(const mxmString &key,
00196                             const mxmString &characters_to_purge);
00198   mxmString concatenate(const mxmString &pair_separator = ",",
00199                         const mxmString &key_value_separator = "=") const;
00200   
00202   int size(void) const;
00203   
00205   mxmPerlStyleHash::Iterator iterator(void) const;
00207   void appendItemToTail(mxmObject *item);
00208 };
00209 
00210 
00211 
00212 #endif   //  __MXM_PERLSTYLEHASH_H__
00213 

Generated on Fri Jun 29 17:21:04 2007 for MxPEG SDK by  doxygen 1.4.6