31 Ocak 2017 Salı

graph remove_vertex metodu

Giriş
Elimizde bir graph olsun
typedef boost::adjacency_list <boost::setS, boost::vecS, ...,...,...> Graph;
Bir vertex'i silmeden önce tüm egde'leri silinir. Daha sonra vertex silinir. Şöyle yaparız.
boost::clear_vertex(v, graph)
boost::remove_vertex(v, graph);

30 Ocak 2017 Pazartesi

endian

Giriş
Şu satırı dahil ederiz.
#include <boost/endian/buffers.hpp>
big_uint64_buf_t Sınıfı
Constructor
Şöyle yaparız.
big_uint64_buf_t be;
operator = metodu
Şöyle yaparız.
uint64_t v= uint64_t(0x1011121314151617);

// Set values, implicit native_to_*
be= v;
value metodu
Şöyle yaparız.
v= be.value();
little_uint64_buf_t Sınıfı
Constructor
Şöyle yaparız.
little_uint64_buf_t l;
operator = metodu
Şöyle yaparız.
uint64_t v= uint64_t(0x1011121314151617);

l= v;
value metodu
Şöyle yaparız.
v= l.value();

property_map dynamic_properties Sınıfı

Giriş
Şu satırı dahil ederiz.
#include <boost/property_map/property_map.hpp>
Tanımlama
Şöyle yaparız
typedef dynamic_properties Properties;
Constructor
Şöyle yaparız
Properties props(ignore_other_properties);
Şöyle yaparız.
boost::dynamic_properties props (boost::ignore_other_properties);
property metodu
Şöyle yaparız
props.property("url", get(&VertexProperties::url, graph));
Şöyle yaparız
map<string, string> attribute_name2name;
associative_property_map<map<string, string>> graphname_map(attribute_name2name);
props.property("title", graphname_map);

29 Ocak 2017 Pazar

graph dijkstra_shortest_paths_no_color_map metodu

Şöyle yaparız.
// Compute maxmin tree
dijkstra_shortest_paths_no_color_map(
    graph, // Graph
    root_vertex, // Start vertex
    weight_map(...). // Link property map
    distance_compare(...). // Compare maxmin path lengths (if maxmin > maxmin)
    distance_combine(...). // Get min weight of the path
    predecessor_map(...). // Result tree
    distance_map(...) // Result distances
);

28 Ocak 2017 Cumartesi

asio async_read_until metodu

Giriş
Bu metodun tam 4 tane overload edilmiş hali mevcut. Alltaki soketin async_read_some metodunu kullanır. İşlem sonunda delimeter da okunan buffer'a dahildir.

asyn_read_until - socket + streambuf + delimeter + handler
İmzası şöyle
void-or-deduced async_read_until(
    AsyncReadStream & s,
    boost::asio::basic_streambuf< Allocator > & b,
    char delim,
    ReadHandler handler);
Şöyle yaparız.
boost::asio::async_read_until(socket, streamBuf, "\r\n\r\n", read_handler);
read_handler şöyledir
void read_handler (boost::system::error_code ec, std::size_t nr)
{
  ...
  if (ec) {
    ...   
  } else {
    ...
  }
}
read_handler için lambda kullanmak istersek şöyle yaparız.
async_read_until(socket,streamBuf,delim,
  [](const system::e_code& ec, std::size_t bytes_transferred){
    ...
    if (ec != 0) {
      std::cout << ec.message() << " (" << ec.value() << ") " << std::endl;
      return;
    }

    ...
});
async_read_until - socket + streambuf + delimeter + yield
Elimizde bir streambuf  olsun.
boost::asio::streambuf streamBuf;
Şöyle yaparız. Burada yield ne işe yarıyor bilmiyorum
size_t bytes = 0;
bool eof = false;
try {
  bytes = boost::asio::async_read_until(as_stdin, streamBuf, '\n', yield);
} catch(std::exception const& e) {
  std::cerr << "Exception: " << e.what() << "\n";
  bytes = 0;
  eof = true;
}

if (eof) break;
async_read_until - socket + streambuf + delimeter + error_code
Şöyle yaparız.
boost::system::error_code ec;
auto bytes = boost::asio::async_read_until(as_stdin, streamBuf, '\n', yield[ec]);

if (ec) {
  ...
}



regex sregex_token_iterator Sınıfı

Giriş
Şu satırı dahil ederiz.
#include <boost/regex.hpp>
Constructor - iter + iter + regex
Şöyle yaparız.
std::string text("abc abd");
boost::regex regex("ab.");

boost::sregex_token_iterator iter(text.begin(), text.end(), regex, 0);
operator * metodu
Şöyle yaparız.
std::string text("abc abd");
boost::regex regex("ab.");

boost::sregex_token_iterator iter(text.begin(), text.end(), regex, 0);
boost::sregex_token_iterator end;

for( ; iter != end; ++iter ) {
  std::cout<<*iter<<'\n';
}
Çıktı olarak şunu alırız.
abc
abd

27 Ocak 2017 Cuma

flyweight

Giriş
Açıklaması şöyle
Boost.Flyweight makes it easy to use this common programming idiom by providing the class template flyweight<T>, which acts as a drop-in replacement for const T.
Tanımlama 
Şöyle yaparız
boost::flyweights::flyweight<Foo>;
Şöyle yaparız
typedef flyweight<character_data> character; 
std::vector<character> scanned_html;


26 Ocak 2017 Perşembe

iostreams basic_array_source Sınıfı

Giriş
Readonly okuma aracıdır. Kolay kullanım için şu satırı dahil ederiz.
using namespace boost::iostreams;
Tanımlama
Şöyle yaparız.
boost::iostreams::basic_array_source< uint8_t > source
Eğer istersek char ile de tanımlayabiliriz.
boost::iostreams::basic_array_source<char> source;
constructor - pointer + size
string
Şöyle yaparız
typedef boost::iostreams::basic_array_source<char> source;
const std::string str = ...;
source bs (str.data(), str.size());
vector
Şöyle yaparız
typedef std::vector< char > Buffer;
Buffer buffer = //Fill vector

typedef boost::iostreams::basic_array_source< uint8_t > source;
source bs (buffer.data(), buffer.size());
Şöyle yaparız.
std::vector<char> Buffer = ...;
basic_array_source<char> source (&Buffer[0], Buffer.size());
Diğer
stream ile okuma
stream_buffer Sınıfı ile bu sınıf stream haline getirilebilir.