
PreventInsert()
***************


FUNKTION
========

   int PreventInsert(object ob);


DEFINIERT IN
============

   /std/container/restrictions.c


ARGUMENTE
=========

   ob
      Das Objekt, das in den Behaelter eingefuegt werden soll.


BESCHREIBUNG
============

   Mit dieser Funktion kann ein Behaelter pruefen, ob er das Objekt ob
   aufnehmen moechte oder nicht.

   Man beachte bitte, dass nach dieser Funktion *nicht* garantiert
   ist, dass das Objekt wirklich bewegt wird, es handelt sich
   lediglich um die Abfrage der Erlaubnis! Die Bewegung kann aus einer
   Vielzahl an Gruenden noch abgebrochen werden.

   Wenn ob mit dem Flag M_NOCHECK bewegt wird, wird PreventInsert()
   zwar aufgerufen, aber das Ergebnis ignoriert, d.h. die Aufnahme
   kann in dem Fall nicht verhindert werden.


RUeCKGABEWERT
=============

   0
      wenn das Objekt aufgenommen werden kann;

   > 0
      ein Wert groesser als 0 zeigt an, dass das Objekt nicht
      aufgenommen werden soll.


BEISPIELE
=========

   Um zu verhindern, dass man Geld in einen Behaelter stecken kann,
   sollte man wie folgt vorgehen:

      public int PreventInsert(object ob)
      {
        // Wenn es Geld ist, erheben wir sofort Einspruch
        if (ob->id("geld"))
          return 1;
        // Ansonsten koennte ein ererbtes Objekt noch Einspruch erheben!
        else
          return ::PreventInsert(ob);
      }


SIEHE AUCH
==========

   PreventLeave(), NotifyInsert(), NotifyLeave(), MayAddObject(),
   MayAddWeight(), PreventInsertLiving(), PreventLeaveLiving(),
   NotifyMove(), PreventMove(), move(), /std/container/restrictions.c

Last modified: 30.01.2020, Zesstra
