Logo Search packages:      
Sourcecode: condor version File versions  Download package

attrrefs.h

/***************************************************************
 *
 * Copyright (C) 1990-2007, Condor Team, Computer Sciences Department,
 * University of Wisconsin-Madison, WI.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you
 * may not use this file except in compliance with the License.  You may
 * obtain a copy of the License at
 * 
 *    http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 ***************************************************************/


#ifndef __ATTRREFS_H__
#define __ATTRREFS_H__

BEGIN_NAMESPACE( classad )

/// Represents a attribute reference node (like .b) in the expression tree
00027 class AttributeReference : public ExprTree 
{
      public:

        /// Copy Constructor
        AttributeReference(const AttributeReference &ref);

            ///  Destructor
      virtual ~AttributeReference ();

        /// Assignment operator
        AttributeReference &operator=(const AttributeReference &ref);

            /** Factory method to create attribute reference nodes.
                  @param expr The expression part of the reference (i.e., in
                        case of expr.attr).  This parameter is NULL if the reference
                        is absolute (i.e., .attr) or simple (i.e., attr).
                  @param attrName The name of the reference.  This string is
                        duplicated internally.
                  @param absolute True if the reference is an absolute reference
                        (i.e., in case of .attr).  This parameter cannot be true if
                        expr is not NULL
            */
      static AttributeReference *MakeAttributeReference(ExprTree *expr, 
                              const std::string &attrName, bool absolute=false);

            /** Deconstructor to get the components of an attribute reference
             *    @param expr The expression part of the reference (NULL for
             *          absolute or simple references)
             *    @param attr The name of the attribute being referred to
             *    @param abs  true iff the reference is absolute (i.e., .attr)
             */
            void GetComponents( ExprTree *&expr,std::string &attr, bool &abs ) const;

        /** Return a copy of this attribute reference.
         */
            virtual ExprTree* Copy( ) const;

        /** Copy from the given reference into this reference.
         *  @param ref The reference to copy from.
         *  @return true if the copy succeeded, false otherwise.
         */
        bool CopyFrom(const AttributeReference &ref);

        /** Is this attribute reference the same as another?
         *  @param tree The reference to compare with
         *  @return true if they are the same, false otherwise.
         */
        virtual bool SameAs(const ExprTree *tree) const;

        /** Are the two attribute references the same?
         *  @param ref1 An attribute reference
         *  @param ref2 Another attribute reference
         *  @return true if they are the same, false otherwise.
         */
        friend bool operator==(const AttributeReference &ref1, const AttributeReference &ref2);

      protected:
            /// Constructor
      AttributeReference ();

      private:
            // private ctor for internal use
            AttributeReference( ExprTree*, const std::string &, bool );
            virtual void _SetParentScope( const ClassAd* p );
      virtual bool _Evaluate( EvalState & , Value & ) const;
      virtual bool _Evaluate( EvalState & , Value &, ExprTree*& ) const;
      virtual bool _Flatten( EvalState&, Value&, ExprTree*&, int* ) const;
            int   FindExpr( EvalState&, ExprTree*&, ExprTree*&, bool ) const;

            ExprTree    *expr;
            bool        absolute;
      std::string attributeStr;
};

END_NAMESPACE // classad

#endif//__ATTRREFS_H__

Generated by  Doxygen 1.6.0   Back to index