AndroMeta  2.0.0
AndroMeta/include/AndroMeta/MPLObject.h
Go to the documentation of this file.
00001 /*
00002  * Copyright 2009-2012 AndroMeta LLC. All rights reserved.
00003  *
00004  * AndroMeta LLC retains all intellectual property and proprietary 
00005  * rights to this software and related documentation and any modifications 
00006  * thereto.  Any use, reproduction, disclosure, or distribution of this 
00007  * software and related documentation without an express license agreement 
00008  * from AndroMeta LLC is strictly prohibited.
00009  * 
00010  */
00011 
00021 #ifndef ANDROMETA_MPL_OBJECT_H
00022 #define ANDROMETA_MPL_OBJECT_H
00023 
00024 #include <AndroMeta/MNode.h>
00025 
00026 namespace Meta{
00027 
00028   class MPLNode;
00029 
00030   typedef std::pair<class MPLObject*, class MPLObject*> MPLPair;
00031 
00038   class MPLObject{
00039   public:
00046     MPLNode* compile(mnode& n);
00047 
00054     static MPLNode* compile(const MPLPair& pair, mnode& n); 
00055 
00063     static MPLNode* compile(MPLObject* o1, MPLObject* o2, mnode& n){
00064       return compile(std::make_pair(o1, o2), n);
00065     }
00066 
00071     static void release(mnode& n);
00072     
00076     virtual uint64_t getAttribute(const mstr& attr) const = 0;
00077 
00081     virtual size_t getSize() const = 0;
00082   };
00083 
00084   typedef MVector<MPLPair> MPLPairVec;
00085 
00086 } // end namespace Meta
00087 
00088 #endif // ANDROMETA_MPL_OBJECT_H