Boost logo

Boost :

From: Jan Langer (jan_at_[hidden])
Date: 2002-02-26 16:00:28

On Tue, 26 Feb 2002, Jan Langer wrote:
>On Tue, 26 Feb 2002, dylan_nicholson wrote:
>>We need something better than require() for setting multiple
>>properties: Let's say I wanted to set the owner and group at the
>>same time, and doing both together at the OS level would take half as
>>long as doing one then the other.
>>The best I can think of is:
>> attribute_set a(my_file_name);
>> a.defer();
>> a.set<owner>("dylan");
>> a.set<group>("users");
>> a.commit();
>>defer() and commit() again are completely optional. If you only need
>>one attribute, or don't care about the potential performance hit,
>>then leave them out. I would probably go further and say an
>>implementation is allowed to ignore them too, so that failing to call
>>commit() after defer() has an implementation-defined outcome.
>why not drop the defer() and say that calls to set can always be
>buffered. you can also commit (or flush) them be hand or at least on
>destruction of the attribute_set.
>i'll try to write an implementation of an (at least two) example

i updated the posix-version again.
i added a hierarchy_iterator which can be used like this:

  std::vector <std::string> v (hierarchy_iterator::begin (),
hierarchy_iterator::end ());

it returns always "/" on dereferenciation and has only two states: begin
and end.

i added the attributes user and group for testing purposes.
and implemented the commit mechanism for buffered attribute setting
proposed by dylan (see above) . this is illustrated in the example
owner_test.cpp which compares the time used on changing the attributes.
it works like this:

        attribute_set a (file);

        set <group <char> > (a, "users");
        commit <group <char> > (a); // write group

        set <user <char> > (a, "jan");
      } // write user
        attribute_set a (file);

        set <group <char> > (a, "users");
        set <user <char> > (a, "jan");
      } // write user and group
        set <group <char> > (file, "users"); // write group
        set <user <char> > (file, "jan"); // write user

jan langer ... jan_at_[hidden]
"pi ist genau drei"

Boost list run by bdawes at, gregod at, cpdaniel at, john at