Sunday, March 30, 2014

Applications through C++



Hello C++ lovers, today am going to make you all familiar with some useful trade offs / applications of C++. These applications are



You can simply implement all these functionalities through these methods:


Concurrent Waiting

Concurrent waiting can be drawn on the basis of these three mechanisms

Concurrent Waiting | .get

size_t
file_sizes( string file1, string file2 )
   {

   task<file> f1 = open(file1),
              f2 = open(file2);
   return f1.get().size() +
          f2.get().size();

}

Concurrent Waiting | .then

task<size_t>
file_sizes( string file1, string file2 )

    {
   task<file> f1 = open(file1),
              f2 = open(file2);
   return when_all(f1,f2)
      .then([=](tuple<file,file> fs)
       {
         return get<1>(fs).size() +
                get<2>(fs).size();

      });
}

Concurrent Waiting | .then + await

task<size_t>
file_sizes( string file1, string file2 ) __async
    {

   task<file> f1 = open(file1),
              f2 = open(file2);
   return (__await f1).size() +
          (__await f2).size();

}

Real Payoffs | Branches & Loops

Branches & Loops | .get

string
read( string file, string suffix )
   {

   istream fi = open(file).get();
   string ret, chunk;
   while( (chunk = fi.read().get()).size() )
      ret += chunk + suffix;
   return ret;

}

Branches & Loops | .then

task<string>
read( string file, string suffix )
  {

   return open(file)
   .then([=](istream fi)
     {
      auto ret = make_shared<string>();
      auto next =
         make_shared<function<task<string>()>>(
      [=]
     {
         fi.read()
         .then([=](string chunk)
                {
            if( chunk.size() )
                 {
               *ret += chunk + suffix;
               return (*next)();
            }
            return *ret;
         });
      });
      return (*next)();
   });

}

Branches & Loops | .then + await

task<string>
read( string file, string suffix ) __async
{

   istream fi = __await open(file);
   string ret, chunk;
   while( (chunk = __await fi.read()).size() )
      ret += chunk + suffix;
   return ret;

}

No comments:

Post a Comment