AndroMeta  2.0.0
AndroMeta/include/AndroMeta/MObject.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 
00019 #ifndef ANDROMETA_M_OBJECT_H
00020 #define ANDROMETA_M_OBJECT_H
00021 
00022 #include <AndroMeta/MObjectBase.h>
00023 #include <AndroMeta/MNode.h>
00024 #include <AndroMeta/MVar.h>
00025 #include <AndroMeta/MProcessor.h>
00026 
00027 namespace Meta{
00028   
00029   class MBrokerBase;
00030   class MTime;
00031   
00053   class MObject : public MProcessor, public MObjectBase{
00054   public:
00055 
00056     static const ClassIdType ClassId;
00057     
00061     MObject();
00062     
00066     MObject(MBrokerBase* broker);
00067     
00071     MObject(const MObject& object);
00072     
00076     MObject(const mvar& v, RestoreOpt opt);
00077     
00081     virtual ~MObject();
00082     
00086     virtual void store(mvar& v) const;
00087     
00091     virtual void autostore(mvar& v) const;
00092     
00096     virtual MObjectBase* clone() const;
00097     
00098     MObject& operator=(const MObject& object);
00099     
00105     virtual bool instanceOf(ClassIdType classId) const;
00106     
00110     virtual mnode process(mnode n, uint32_t flags=0);
00111     
00119     virtual mnode autoprocess(mnode n, uint32_t flags=0);
00120     
00125     mvar eval(const mvar& code);
00126     
00131     mnode method(const mstr& name, size_t inputs);
00132     
00136     mnode method(size_t i);
00137     
00141     size_t methodCount() const;
00142     
00150     void setMethod(mnode sig, mnode body);
00151     
00170     enum AttributeMode{
00171       Raw,
00172       Exists,
00173       TryProtected,
00174       TryProtectedExists,
00175       Protected
00176     };
00177     
00181     void setAttribute(const mstr& name,
00182                       mnode n,
00183                       AttributeMode mode=Raw);
00184     
00190     mnode attribute(const mstr& name,
00191                     AttributeMode mode=Raw);
00192     
00198     mnode attribute(size_t i);
00199     
00203     size_t attributeCount() const;
00204     
00210     mstr attributeName(size_t i) const;
00211     
00215     void clearAttribute(const mstr& name);
00216     
00227     mnode remoteProcess(mnode f, bool block=true, mnode fail=0);
00228     
00232     bool isRemote() const;
00233     
00237     bool isDistributed() const;
00238     
00242     bool isLocal() const;
00243     
00247     MBrokerBase* broker();
00248     
00254     mvar& session();
00255     
00262     const mvar& session() const;
00263     
00270     virtual void onClientClosed(const mvar& session);
00271     
00276     virtual void onServerClosed();
00277     
00284     bool isConnected() const;
00285     
00289     bool release();
00290     
00295     void setSharedScope(MObject* object);
00296     
00300     void setSharedScope();
00301     
00306     static bool isStandardType(const mstr& type);
00307     
00313     void enableInterrupts(bool flag);
00314 
00318     bool inVirtual();
00319     
00327     void setStrict(bool flag);
00328     
00332     bool isStrict() const;
00333     
00341     void setExact(bool flag);
00342     
00346     bool isExact() const;
00347     
00348     virtual void enableRestricted();
00349     
00350     bool isRestricted() const;
00351     
00352     void ref();
00353     
00354     size_t deref();
00355     
00360     void setOutputStream(std::ostream& ostr);
00361     
00365     std::ostream& outputStream() const;
00366     
00370     mnode Ctor_(mnode n1, mnode n2, mnode n3, mnode n4);
00371     
00375     mnode Ret_(mnode n);
00376     
00383     mnode Def_(mnode s, mnode v);
00384     
00390     mnode Def_(mnode scope, mnode s, mnode v);
00391     
00396     mnode Param_(mnode n);
00397     
00401     mnode Len_(mnode n);
00402     
00406     mnode Undef_(mnode n);
00407     
00411     mnode For_(mnode n1, mnode n2, mnode n3, mnode n4);
00412     
00416     mnode ForEach_(mnode item, mnode sequence, mnode block);
00417     
00421     mnode ForVec_(mnode n1, mnode n2, mnode n3);
00422 
00426     mnode ForList_(mnode n1, mnode n2, mnode n3);
00427 
00431     mnode ForVec_(mnode n1, mnode n2, mnode n3, mnode n4);
00432     
00436     mnode ForList_(mnode n1, mnode n2, mnode n3, mnode n4);
00437     
00442     mnode Throw_(mnode n, mnode msg);
00443     
00448     mnode Throw_(mnode n, mnode msg, mnode type);
00449     
00453     mnode Get_(mnode n);
00454     
00458     mnode Get_(mnode n, mnode nk);
00459     
00463     mnode Set_(mnode n, mnode v);
00464     
00468     mnode Idx_(mnode n, mnode nk);
00469     
00474     mnode IdxR_(mnode n, mnode nk);
00475 
00479     mnode Symbols_();
00480     
00484     mnode Attrs_();
00485     
00489     mnode Functions_();
00490     
00494     mnode Methods_();
00495     
00500     mnode LRec_(mnode n);
00501     
00505     mnode LRec_(mnode n, mnode k, mnode all);
00506     
00511     mnode RRec_(mnode n);
00512     
00516     mnode RRec_(mnode n, mnode k, mnode all);
00517     
00521     mnode Flatten_(mnode n1);
00522     
00526     mnode GetI_(mnode s);
00527     
00531     mnode MGet_(mnode s);
00532     
00536     mnode PushScope_(mnode s);
00537     
00541     mnode PushScope_(mnode o, mnode s);
00542     
00546     mnode SetSharedScope_(mnode o, mnode s);
00547     
00551     mnode Reset_();
00552     
00556     mnode ResetGlobal_();
00557     
00562     mnode ReDef_(mnode s, mnode v);
00563     
00567     mnode PopScope_();
00568     
00572     mnode Scope_();
00573     
00577     mnode Scope_(mnode s);
00578     
00582     mnode TopScope_(mnode i);
00583     
00587     mnode Scope_(mnode s, mnode f);
00588     
00592     mnode Class_(mnode n1, mnode n2);
00593     
00597     mnode MergeScope_(mnode s1, mnode s2);
00598     
00602     mnode OuterMergeScope_(mnode s1, mnode s2);
00603     
00607     mnode Ex_(mnode n);
00608     
00612     mnode Eval_(mnode n);
00613     
00617     mnode PreEval_(mnode n1, mnode n2);
00618     
00622     mnode CEval_(mnode n);
00623     
00627     mnode CEval_(mnode n1, mnode n2);
00628     
00632     mnode Lambda_(mnode n1, mnode n2, mnode n3);
00633     
00637     mnode Scoped_(mnode f);
00638     
00642     mnode Neg_(mnode v);
00643     
00647     mnode Add_(mnode v1, mnode v2);
00648     
00652     mnode Sub_(mnode v1, mnode v2);
00653     
00657     mnode Mul_(mnode v1, mnode v2);
00658     
00662     mnode Div_(mnode v1, mnode v2);
00663     
00667     mnode Inv_(mnode v);
00668     
00672     mnode Pow_(mnode v1, mnode v2);
00673     
00677     mnode Mod_(mnode v1, mnode v2);
00678     
00682     mnode Inc_(mnode v);
00683     
00687     mnode IncP_(mnode v);
00688     
00692     mnode Dec_(mnode v);
00693     
00697     mnode DecP_(mnode v);
00698     
00702     mnode AddA_(mnode v1, mnode v2);
00703     
00707     mnode SubA_(mnode v1, mnode v2);
00708     
00712     mnode MulA_(mnode v1, mnode v2);
00713     
00717     mnode DivA_(mnode v1, mnode v2);
00718     
00722     mnode ModA_(mnode v1, mnode v2);
00723     
00727     mnode Pi_();
00728     
00732     mnode Euler_();
00733     
00737     mnode Catalan_();
00738     
00742     mnode Sqrt_(mnode v);
00743     
00747     mnode Abs_(mnode v);
00748     
00752     mnode Log10_(mnode v);
00753     
00757     mnode Ln_(mnode v);
00758     
00762     mnode Cos_(mnode v);
00763     
00767     mnode ACos_(mnode v);
00768     
00772     mnode CosH_(mnode v);
00773     
00777     mnode Sin_(mnode v);
00778     
00782     mnode ASin_(mnode v);
00783     
00787     mnode SinH_(mnode v);
00788     
00792     mnode Tan_(mnode v);
00793 
00797     mnode Cot_(mnode v);
00798 
00802     mnode ACot_(mnode v);
00803     
00807     mnode ATan_(mnode v);
00808     
00812     mnode ATan2_(mnode y, mnode x);
00813 
00817     mnode TanH_(mnode v);
00818     
00822     mnode Sec_(mnode v);
00823 
00827     mnode Csc_(mnode v);
00828     
00832     mnode SecH_(mnode v);
00833     
00837     mnode CscH_(mnode v);
00838     
00842     mnode ASec_(mnode v);
00843     
00847     mnode ACsc_(mnode v);
00848     
00852     mnode ASecH_(mnode v);
00853     
00857     mnode ACscH_(mnode v);
00858     
00862     mnode CotH_(mnode v);
00863     
00867     mnode ACotH_(mnode v);
00868     
00872     mnode ATanH_(mnode v);
00873     
00877     mnode ASinH_(mnode v);
00878     
00882     mnode ACosH_(mnode v);
00883     
00887     mnode Floor_(mnode v);
00888     
00892     mnode Ceil_(mnode v);
00893     
00897     mnode Exp_(mnode v);
00898     
00902     mnode Round_(mnode v);
00903     
00907     mnode Round_(mnode v, mnode precision);
00908     
00912     mnode If_(mnode n1, mnode n2);
00913     
00917     mnode If_(mnode n1, mnode n2, mnode n3);
00918     
00922     mnode Not_(mnode n);
00923     
00927     mnode And_(mnode n1, mnode n2);
00928     
00932     mnode Or_(mnode n1, mnode n2);
00933     
00937     mnode XOr_(mnode n1, mnode n2);
00938         
00942     mnode LT_(mnode v1, mnode v2);
00943     
00947     mnode GT_(mnode v1, mnode v2);
00948     
00952     mnode LE_(mnode v1, mnode v2);
00953     
00957     mnode GE_(mnode v1, mnode v2);
00958     
00962     mnode Eq_(mnode v1, mnode v2);
00963     
00967     mnode NE_(mnode v1, mnode v2);
00968     
00972     mnode Max_(mnode v1, mnode v2);
00973     
00977     mnode Min_(mnode v1, mnode v2);
00978     
00982     mnode While_(mnode n1, mnode n2);
00983     
00987     mnode Print_(mnode n);
00988     
00992     mnode Log_(mnode n);
00993     
00997     mnode Head_(mnode n);
00998     
01002     mnode Back_(mnode n);
01003     
01007     mnode Elem_(mnode n, mnode ni);
01008     
01012     mnode Itp_(mnode s, mnode si);
01013     
01017     mnode New_(mnode n);
01018     
01022     mnode Create_(mnode n);
01023     
01027     mnode Delete_(mnode n);
01028     
01032     mnode Clone_(mnode n);
01033     
01037     mnode Copy_(mnode n);
01038     
01042     mnode Call_(mnode f);
01043     
01047     mnode Args_(mnode f);
01048     
01052     mnode Params_(mnode f);
01053     
01057     mnode NamedArg_(mnode s, mnode v);
01058     
01063     mnode Once_(mnode f);
01064     
01068     mnode GetF_(mnode f, mnode s, mnode p);
01069     
01073     mnode Attr_(mnode s);
01074     
01078     mnode Attr_(mnode s, mnode v);
01079     
01083     mnode Var_(mnode n1);
01084     
01088     mnode Var_(mnode n1, mnode n2);
01089     
01094     mnode VSet_(mnode n1, mnode n2);
01095     
01099     mnode Type_(mnode n1, mnode n2, mnode n3);
01100     
01104     mnode Type_(mnode n1, mnode n2, mnode n3, mnode n4);
01105     
01109     mnode Method_(mnode n1, mnode n2, mnode n3);
01110     
01114     mnode Value_(mnode n1, mnode n2, mnode n3);
01115     
01119     mnode Expand_(mnode n);
01120     
01124     mnode Import_(mnode n);
01125     
01129     mnode MCode_(mnode n);
01130     
01135     mnode CodeData_(mnode n); 
01136     
01140     mnode Show_(mnode s);
01141     
01145     mnode IsFunction_(mnode n);
01146     
01150     mnode IsSymbol_(mnode n);
01151     
01155     mnode IsNumeric_(mnode n);
01156     
01160     mnode IsString_(mnode n);
01161     
01165     mnode IsConstant_(mnode n);
01166     
01170     mnode IsTrue_(mnode n);
01171     
01175     mnode IsFalse_(mnode n);
01176     
01180     mnode Real_(mnode r);
01181     
01185     mnode Cls_(mnode n);
01186     
01190     mnode PushBack_(mnode v, mnode x);
01191     
01195     mnode PushFront_(mnode v, mnode x);
01196     
01200     mnode Push_(mnode v, mnode x);
01201     
01205     mnode PopBack_(mnode v);
01206     
01210     mnode PopFront_(mnode v);
01211     
01215     mnode Pop_(mnode v);
01216     
01220     mnode HasKey_(mnode v, mnode k);
01221     
01225     mnode Keys_(mnode v);
01226     
01230     mnode IsDefined_(mnode v);
01231     
01235     mnode IsEmpty_(mnode v);
01236     
01240     mnode Index_(mnode v, mnode x);
01241     
01245     mnode Index_(mnode v, mnode x, mnode start);
01246     
01250     mnode Index_(mnode v, mnode x, mnode start, mnode end);
01251     
01255     mnode Erase_(mnode v, mnode k);
01256     
01260     mnode Split_(mnode v, mnode delimiter, mnode maxTokens);
01261     
01265     mnode Split_(mnode v, mnode delimiter);
01266     
01270     mnode Join_(mnode v, mnode delimiter);
01271     
01275     mnode IndexMap_(mnode v, mnode flag);
01276     
01280     mnode ClearSeq_(mnode v);
01281     
01285     mnode ClearMap_(mnode v);
01286     
01290     mnode Clear_(mnode v);
01291     
01295     mnode Size_(mnode v);
01296     
01300     mnode Merge_(mnode v1, mnode v2);
01301     
01305     mnode ReplaceSymbols_(mnode f, mnode m);
01306     
01310     mnode Pass_();
01311     
01315     mnode NoOp_();
01316     
01321     mnode Info_(mnode n);
01322     
01326     mnode Break_();
01327     
01331     mnode Continue_();
01332     
01336     mnode Super_(mnode n1, mnode n2);
01337     
01341     mnode Unite_(mnode v);
01342     
01346     mnode Unite_(mnode v1, mnode v2);
01347     
01351     mnode Unite_(mnode v1, mnode v2, mnode outer);
01352     
01356     mnode Union_(mnode v1, mnode v2);
01357     
01361     mnode Intersect_(mnode v1, mnode v2);
01362     
01366     mnode Intersect_(mnode v1, mnode v2, mnode outer);
01367     
01371     mnode Intersection_(mnode v1, mnode v2);
01372     
01376     mnode ComplementA_(mnode v1, mnode v2);
01377     
01381     mnode Complement_(mnode v1, mnode v2);
01382     
01386     mnode SubsumesData_(mnode v1, mnode v2);
01387     
01391     mnode Range_(mnode end);
01392     
01396     mnode Range_(mnode start, mnode end);
01397     
01401     mnode Range_(mnode start, mnode end, mnode increment);
01402     
01406     mnode ListRange_(mnode end);
01407     
01411     mnode ListRange_(mnode start, mnode end);
01412     
01416     mnode ListRange_(mnode start, mnode end, mnode increment);
01417     
01421     mnode Finish_();
01422     
01426     mnode Finish_(mnode value);
01427     
01431     mnode SymToStr_(mnode sym);
01432     
01436     mnode StrToSym_(mnode str);
01437     
01438     friend class MObject_;
01439     
01440   private:
01441     class MObject_* x_;
01442   };
01443     
01444 } // end namespace Meta
01445 
01446 #endif // ANDROMETA_M_OBJECT_H