home *** CD-ROM | disk | FTP | other *** search
/ Hackers Magazine 57 / CdHackersMagazineNr57.iso / Software / Multimedia / k3d-setup-0.7.11.0.exe / include / k3d / k3dsdk / ipersistent.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-11-07  |  2.9 KB  |  109 lines

  1. #ifndef K3DSDK_IPERSISTENT_H
  2. #define K3DSDK_IPERSISTENT_H
  3.  
  4. // K-3D
  5. // Copyright (c) 1995-2004, Timothy M. Shead
  6. //
  7. // Contact: tshead@k-3d.com
  8. //
  9. // This program is free software; you can redistribute it and/or
  10. // modify it under the terms of the GNU General Public
  11. // License as published by the Free Software Foundation; either
  12. // version 2 of the License, or (at your option) any later version.
  13. //
  14. // This program is distributed in the hope that it will be useful,
  15. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  17. // General Public License for more details.
  18. //
  19. // You should have received a copy of the GNU General Public
  20. // License along with this program; if not, write to the Free Software
  21. // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  22.  
  23. /** \file
  24.         \brief Declares ipersistent, an abstract interface implemented by all objects that can be serialized to/from a K-3D document
  25.         \author Tim Shead (tshead@k-3d.com)
  26. */
  27.  
  28. #include "iunknown.h"
  29. #include "path.h"
  30.  
  31. /**
  32.  
  33. The methods in ipersistent will be called in a specific order at various stages of an object's lifetime:
  34.  
  35. When the object is saved as part of a document:
  36.  
  37. 1. save()
  38.  
  39. When the object is reloaded from a document:
  40.  
  41. 1. load() - called only after all objects have been instantiated
  42.  
  43. Important note:
  44.  
  45. Although all document objects exist before load() is called, their load() methods are not called in any
  46. particular order.  Thus, you should not access any member methods of an external object in your load()
  47. implementation.
  48.  
  49. */
  50.  
  51. namespace k3d
  52. {
  53.  
  54. class idependencies;
  55. class ipersistent_lookup;
  56.  
  57. namespace xml { class element; }
  58.  
  59. /// Abstract interface implemented by objects that can be serialized to/from a K-3D document
  60. class ipersistent :
  61.     public virtual iunknown
  62. {
  63. public:
  64.     /// Placeholder for arguments passed at save time
  65.     class save_context
  66.     {
  67.     public:
  68.         save_context(const filesystem::path& RootPath, idependencies& Dependencies, ipersistent_lookup& Lookup) :
  69.             root_path(RootPath),
  70.             dependencies(Dependencies),
  71.             lookup(Lookup)
  72.         {
  73.         }
  74.  
  75.         const filesystem::path& root_path;
  76.         idependencies& dependencies;
  77.         ipersistent_lookup& lookup;
  78.     };
  79.     /// Called once during document save
  80.     virtual void save(xml::element& Element, const save_context& Context) = 0;
  81.  
  82.     /// Placeholder for arguments passed at load time
  83.     class load_context
  84.     {
  85.     public:
  86.         load_context(const filesystem::path& RootPath, ipersistent_lookup& Lookup) :
  87.             root_path(RootPath),
  88.             lookup(Lookup)
  89.         {
  90.         }
  91.  
  92.         const filesystem::path& root_path;
  93.         ipersistent_lookup& lookup;
  94.     };
  95.     /// Called once during document loading
  96.     virtual void load(xml::element& Element, const load_context& Context) = 0;
  97.  
  98. protected:
  99.     ipersistent() {}
  100.     ipersistent(const ipersistent&) {}
  101.     ipersistent& operator=(const ipersistent&) { return *this; }
  102.     virtual ~ipersistent() {}
  103. };
  104.  
  105. } // namespace k3d
  106.  
  107. #endif // !K3DSDK_IPERSISTENT_H
  108.  
  109.