obliqrt/derived/ObValueCB.m3


********************************************************************
 * ObValueCB.m3
 * DO NOT EDIT --> generated by /home/m3/work/cm3-inst/birch.elegosoft.com/current/bin/shobjcodegen
 *                 Sun Aug 26 05:25:33 CEST 2012
 ********************************************************************

MODULE ObValueCB EXPORTS ObValueCB, ObValueCBProxy;
IMPORT WeakerRef, WeakRefListFuncs, SharedObjRep, WeakRefList, ObValueRep,
       ObValue, SharedObjStubLib, WeakRef;

REVEAL
  ReplObjStd = PublicReplObjStd BRANDED OBJECT
    obj: ObValue.ReplObjStd;
    wref: WeakerRef.T;
  OVERRIDES
    init := Init_ReplObjStd;
    cancel := Cancel_ReplObjStd;
    pre_anyChange := Pre_anyChange_ReplObjStd;
    post_anyChange := Post_anyChange_ReplObjStd;
    pre_InvokeUpdate := Pre_InvokeUpdate_ReplObjStd;
    post_InvokeUpdate := Post_InvokeUpdate_ReplObjStd;
    pre_init := Pre_init_ReplObjStd;
    post_init := Post_init_ReplObjStd;
    pre_Update := Pre_Update_ReplObjStd;
    post_Update := Post_Update_ReplObjStd;
  END;

PROCEDURE Init_ReplObjStd (self: ReplObjStd;
                           obj: ObValue.ReplObjStd): ReplObjStd =
  VAR
    wref := NEW(WeakerRef.T,
                weakRef := WeakRef.FromRef(self, Cleanup_ReplObjStd_CB),
                ready := TRUE);
  BEGIN
    self.obj := obj;
    self.wref := wref;
    IF MkProxyReplObjStdCB # NIL AND self.proxy = NIL THEN
      MkProxyReplObjStdCB (self);
    END;
    SharedObjStubLib.AcquireWriteLock(obj);
    TRY
      obj.callbacks := WeakRefList.Cons(wref, obj.callbacks);
    FINALLY
      SharedObjStubLib.ReleaseWriteLock(obj);
    END;
    RETURN self;
  END Init_ReplObjStd;

PROCEDURE Cancel_ReplObjStd (self: ReplObjStd) =
  BEGIN
    SharedObjStubLib.AcquireWriteLock(self.obj);
    TRY
      EVAL WeakRefListFuncs.DeleteD(self.obj.callbacks, self.wref);
    FINALLY
      SharedObjStubLib.ReleaseWriteLock(self.obj);
    END;
  END Cancel_ReplObjStd;

PROCEDURE Cleanup_ReplObjStd_CB (READONLY wref: WeakRef.T; ref: REFANY) =
  VAR
    cb := NARROW(ref, ReplObjStd);
    weakerRef := NEW(WeakerRef.T, weakRef := wref);
  BEGIN
    SharedObjStubLib.AcquireWriteLock(cb.obj);
    TRY
      (* Callback is gone, so delete it *)
      EVAL WeakRefListFuncs.DeleteD(cb.obj.callbacks, weakerRef);
    FINALLY
      SharedObjStubLib.ReleaseWriteLock(cb.obj);
    END;
  END Cleanup_ReplObjStd_CB;

PROCEDURE Pre_anyChange_ReplObjStd (self: ReplObjStd; READONLY obj: ObValue.ReplObjStd) =
  BEGIN
    (* Default calls proxy or does nothing. *)
    IF self.proxy # NIL THEN
      NARROW (self.proxy, CBProxyReplObjStd).pre_anyChange (obj);
    END;
  END Pre_anyChange_ReplObjStd;

PROCEDURE Post_anyChange_ReplObjStd (self: ReplObjStd; READONLY obj: ObValue.ReplObjStd) =
  BEGIN
    (* Default calls proxy or does nothing. *)
    IF self.proxy # NIL THEN
      NARROW (self.proxy, CBProxyReplObjStd).post_anyChange (obj);
    END;
  END Post_anyChange_ReplObjStd;

PROCEDURE Pre_InvokeUpdate_ReplObjStd (self: ReplObjStd; READONLY obj: ObValue.ReplObjStd;
                                       label: TEXT;
                                       argNo: INTEGER;
                                       READONLY args: ObValue.Vals;
                                       VAR hint: INTEGER): BOOLEAN =
  BEGIN
    (* Default calls proxy or does nothing. *)
    IF self.proxy # NIL THEN
      RETURN NARROW (self.proxy, CBProxyReplObjStd).pre_InvokeUpdate (obj,
                                                                      label,
                                                                      argNo,
                                                                      args,
                                                                      hint);
      END;
    RETURN FALSE;
  END Pre_InvokeUpdate_ReplObjStd;

PROCEDURE Post_InvokeUpdate_ReplObjStd (self: ReplObjStd; READONLY obj: ObValue.ReplObjStd;
                                        label: TEXT;
                                        argNo: INTEGER;
                                        READONLY args: ObValue.Vals;
                                        VAR hint: INTEGER): BOOLEAN =
  BEGIN
    (* Default calls proxy or does nothing. *)
    IF self.proxy # NIL THEN
      RETURN NARROW (self.proxy, CBProxyReplObjStd).post_InvokeUpdate (obj,
                                                                       label,
                                                                       argNo,
                                                                       args,
                                                                       hint);
      END;
    RETURN FALSE;
  END Post_InvokeUpdate_ReplObjStd;

PROCEDURE Pre_init_ReplObjStd (self: ReplObjStd; READONLY obj: ObValue.ReplObjStd): BOOLEAN =
  BEGIN
    (* Default calls proxy or does nothing. *)
    IF self.proxy # NIL THEN
      RETURN NARROW (self.proxy, CBProxyReplObjStd).pre_init (obj);
      END;
    RETURN FALSE;
  END Pre_init_ReplObjStd;

PROCEDURE Post_init_ReplObjStd (self: ReplObjStd; READONLY obj: ObValue.ReplObjStd): BOOLEAN =
  BEGIN
    (* Default calls proxy or does nothing. *)
    IF self.proxy # NIL THEN
      RETURN NARROW (self.proxy, CBProxyReplObjStd).post_init (obj);
      END;
    RETURN FALSE;
  END Post_init_ReplObjStd;

PROCEDURE Pre_Update_ReplObjStd (self: ReplObjStd; READONLY obj: ObValue.ReplObjStd;
                                 label: TEXT;
                                 val: ObValue.Val;
                                 internal: BOOLEAN;
                                 VAR hint: INTEGER): BOOLEAN =
  BEGIN
    (* Default calls proxy or does nothing. *)
    IF self.proxy # NIL THEN
      RETURN NARROW (self.proxy, CBProxyReplObjStd).pre_Update (obj, label,
                                                                val,
                                                                internal,
                                                                hint);
      END;
    RETURN FALSE;
  END Pre_Update_ReplObjStd;

PROCEDURE Post_Update_ReplObjStd (self: ReplObjStd; READONLY obj: ObValue.ReplObjStd;
                                  label: TEXT;
                                  val: ObValue.Val;
                                  internal: BOOLEAN;
                                  VAR hint: INTEGER): BOOLEAN =
  BEGIN
    (* Default calls proxy or does nothing. *)
    IF self.proxy # NIL THEN
      RETURN NARROW (self.proxy, CBProxyReplObjStd).post_Update (obj,
                                                                 label,
                                                                 val,
                                                                 internal,
                                                                 hint);
      END;
    RETURN FALSE;
  END Post_Update_ReplObjStd;

BEGIN
SharedObjStubLib.InhibitTransmission(TYPECODE(ReplObjStd), "default ReplObjStd callback cannot be transmitted/duplicated");
END ObValueCB.