|
AndroMeta
2.0.0
|
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
1.7.6.1