Private data

Any variables declared in the implementation source file will, by virtue of Babel's encapsulation, be private. The data can be global to the class -- as in static variables declared within the _includes splicer block at the top of the class's _Impl.cxx file -- or ``local'' to an instance. In the former case, special initialization procedures can be added to the built-in _load() method that is guaranteed to be called exactly once per class -- before any user-defined methods can even be invoked. The latter case relies on the class-specific name space automatically generated in the implementation's header file. As illustrated in the foo.bar example below, the implementor is free to define suitable contents.


namespace foo {

  /**
   * Symbol "foo.bar" (version 0.1)
   */
  class bar_impl : public virtual ::foo::bar
  // DO-NOT-DELETE splicer.begin(foo.bar._inherits)
  // Put additional inheritance here...
  // DO-NOT-DELETE splicer.end(foo.bar._inherits)
  {

  // All data marked protected will be accessable by
  // descendant Impl classes
  protected:
    bool _wrapped;

    // DO-NOT-DELETE splicer.begin(foo.bar._implementation) 
    char*  d_timestamp;
    // DO-NOT-DELETE splicer.end(foo.bar._implementation) 

  public:
    /* ...lines deleted... */
  }
}

If the object has no state, these functions are typically empty. The built-in _ctor() method is invoked upon instantiation. Hence, private data should be initialized in the method. For example$:$


void foo::bar_impl::_ctor() {
  // DO-NOT-DELETE splicer.begin(foo.bar._ctor)
  time_t currTime = time(NULL);
  sidl_String_strdup(d_timestamp, ctime(&currTime));
  // DO-NOT-DELETE splicer.end(foo.bar._ctor)
}

To avoid leaking memory, private data must be released during instance destruction. This is accomplished through the built-in _dtor() method. The memory is then freed as follows$:$


void foo::bar_impl::_dtor() {
  // DO-NOT-DELETE splicer.begin(foo.bar._dtor) 
  sidl_String_free(d_timestamp);
  // DO-NOT-DELETE splicer.end(foo.bar._dtor) 
}

Hence, Babel supports the declaration and maintenance of private data on class and instance basis.



babel-1.4.0
users_guide Last Modified 2008-10-16

http://www.llnl.gov/CASC/components
components@llnl.gov