31 Mayıs 2017 Çarşamba

range mutating algorithms

Giriş
Topluca kullanmak için şu satırı dahil ederiz.
#include <boost/range/algorithm.hpp>
copy metodu
Şu satırı dahil ederiz.
#include <boost/range/algorithm/copy.hpp>
Bir range nesnesini bir başka veri yapısına kopyalar. Şöyle yaparız.
std::map<std::string, std::string> m;

std::vector<std::string> v;
boost::copy(m | boost::adaptors::map_keys, std::back_inserter (v));
copy_backward metodu
Örnek ver

fill metodu
Örnek ver

fill_n metodu
Örnek ver

generate metodu
Örnek ver

inplace_merge metodu
Örnek ver

merge metodu
Örnek ver

nth_element metodu
Örnek ver

partial_sort metodu
Örnek ver

partition metodu
Örnek ver

random_shuffle metodu
Örnek ver

remove metodu
Örnek ver

remove_copy metodu
Örnek ver

remove_copy_if metodu
Örnek ver

remove_if metodu
Örnek ver

replace metodu
Örnek ver

replace_copy metodu
Örnek ver

replace_copy_if metodu
Örnek ver

replace_if metodu
Örnek ver

reverse metodu
Örnek ver

reverse_copy metodu
Örnek ver

rotate metodu
Örnek ver

rotate_copy metodu
Örnek ver

sort metodu
İmzası şöyle
template<class RandomAccessRange>
RandomAccessRange& sort(RandomAccessRange& rng);

template<class RandomAccessRange>
const RandomAccessRange& sort(const RandomAccessRange& rng);

template<class RandomAccessRange, class BinaryPredicate>
RandomAccessRange& sort(RandomAccessRange& rng, BinaryPredicate pred);

template<class RandomAccessRange, class BinaryPredicate>
const RandomAccessRange& sort(const RandomAccessRange& rng, BinaryPredicate pred);

stable_partition metodu
Örnek ver

stable_sort metodu
Örnek ver

swap_ranges metodu
Örnek ver

transform metodu
Örnek ver

unique metodu
Örnek ver

unique_copy metodu
Örnek ver

30 Mayıs 2017 Salı

process

Giriş
Şu satırı dahil ederiz.
#include <boost/process.hpp>
aysnc_pipe Sınıfı
Constructor
Şöyle yaparız.
std::shared_ptr<boost::process::async_pipe> stdin_pipe = 
  std::make_shared<boost::process::async_pipe>(*io_service);
child Sınıfı
Constructor
Şöyle yaparız.
boost::iostreams::file_descriptor_sink sinkstdin = ...;
boost::iostreams::file_descriptor_source sourcestdin = ...;

std::unique_ptr<boost::process::child> p = 
std::unique_ptr<boost::process::child>(new boost::process::child(
  boost::process::execute(
    boost::process::initializers::set_args(args),
    boost::process::initializers::throw_on_error(),
    boost::process::initializers::bind_stdout(sinkstdout),
    boost::process::initializers::bind_stderr(sinkstderr),
    boost::process::initializers::bind_stdin(sourcestdin)
)));
wait metodu
Şöyle yaparız.
child.wait();
Free Style metodlar
create_pipe metodu
Şöyle yaparız.
// Create pipes for stdout, stderr
boost::process::pipe pstdout = boost::process::create_pipe();
boost::process::pipe pstderr = boost::process::create_pipe();
wait_for_exit
Şöyle yaparız.
std::unique_ptr<boost::process::child> p = ...;
if (boost::process::wait_for_exit(*p))
{...}





thread scoped_thread Sınıfı

Giriş
Şu satırı dahil ederiz.
#include <boost/thread.hpp>
#include <boost/thread/scoped_thread.hpp>
Constructor
Şöyle yaparız.
void MyThread()
{
  ...
}

int main(int argc, char* argv[])
{

  boost::scoped_thread<> st {boost::thread(MyThread)};
  ...
}

29 Mayıs 2017 Pazartesi

program_options

Giriş
Şu satırı dahil ederiz.
#include <boost/program_options.hpp>
Daha kolay kullanmak için şöyle yaparız. Bu kütüphane ile json parse etmek mümkün değil
namespace po = boost::program_options;
Kullanım
1. options_description nesnesi ile seçenekler doldurulur
2. command_line_parser nesnesi çalıştırılır ve parsed_options nesnesi elde edilir.
3. Anlaşılmayan seçenekler collect_unrecognized() çağrısı ile elde edilir.
4. Seçenekerl store() ve notify() çağrıları ile variables_map nesnesine doldurulur
5. variables_map nesnesine kullanılarak seçeneklere erişilir.

Örnek
Şöyle yaparız
#include <boost/program_options.hpp>
namespace po = boost::program_options;

int main(int argc, char **argv) {
  // Declare the supported options.
  po::options_description desc("Allowed options");
  desc.add_options()
    ("help,h",                       "produce help message")
    ("parents,p", po::bool_switch(), "make parent directories as needed")
    ("verbose,v", po::bool_switch(), "print a message for each created directory");

  const po::parsed_options parsed = po::command_line_parser(argc, argv)
    .options(desc).allow_unregistered().run();
  const std::vector<std::string> unrecognized =
          collect_unrecognized(parsed.options, po::include_positional);
  po::variables_map vm;
  po::store(parsed, vm);
  po::notify(vm);
  
  if (vm.count("help") || argc <= 1) {
    std::cout << desc;
    return 1;
  }

  for (const auto &opt : unrecognized) {
    ...
  }
options_description Sınıfı
options_description Sınıfı yazısına taşıdım.

Custom Validator
Custom Validator yazısına taşıdım.

positional_options_description Sınıfı
positional_options_description Sınıfı yazısına taşıdım.

variables_map Sınıfı
variables_map Sınıfı yazısına taşıdım.

command_line_parser Sınıfı
command_line_parser Sınıfı yazısına taşıdım.

parsed_options Sınıfı
Bu sınıf parse işleminin sonucunu saklar.
Constructor
Şöyle yaparız.
po::parsed_options parsed =
  po::command_line_parser(argc, argv).options(desc).allow_unregistered().run();
store metodu
Bu metod ile verilen komut satırı parse edilerek variables_map sınıfına doldurulur.  Şöyle yaparız.
po::variables_map vm;
po::parsed_options parsed = ...;
po::store (parsed, vm);
Genellikle parsed_options nesnesi es geçilerek direkt parse_command_line çağrısının sonucu kullanılır. Şöyle yaparız.
//command line arguments
variables_map vm;

options_description desc = ...;
...
store (parse_command_line (argc, argv, desc), vm);
notify(vm);
config_file_iterator Sınıfı
config_file_iterator Sınıfı yazısına taşıdım.

notify metodu
notify metodu yazısına taşıdım.

collect_unrecognized metodu
Şöyle yaparız.
po::parsed_options parsed = ...;
auto command = po::collect_unrecognized(parsed.options, po::include_positional);
  std::cout << "bar: " << bar << ", command:";
for (const auto& c : command) std::cout << " " << c;
  std::cout << " " << c