Skip to content

Instantly share code, notes, and snippets.

View supernlogn's full-sized avatar

Ioannis Athanasiadis supernlogn

View GitHub Profile
@trungly
trungly / simple_server.py
Last active September 18, 2024 05:20
A simple Python HTTP server that supports a GET that echoes some request data and a POST that reads a request body, parses it as JSON and responds with part of the data
from BaseHTTPServer import BaseHTTPRequestHandler
import urlparse, json
class GetHandler(BaseHTTPRequestHandler):
def do_GET(self):
parsed_path = urlparse.urlparse(self.path)
message = '\n'.join([
'CLIENT VALUES:',
'client_address=%s (%s)' % (self.client_address,
@ColinDuquesnoy
ColinDuquesnoy / html_logger.py
Last active November 18, 2024 05:15
HTML logger for python (inspired by the Horde3D logger)
"""
HTML logger inspired by the Horde3D logger.
Usage:
- call setup and specify the filename, title, version and level
- call dbg, info, warn or err to log messages.
"""
import logging
import time

Why COW was deemed ungood for std::string.

COW, short for copy on write, is a way to implement mutable strings so that creating strings and logically copying strings, is reduced to almost nothing; conceptually they become free operations like no-ops.

Basic idea: to share a data buffer among string instances, and only make a copy for a specific instance (the copy on write) when that instance's data is modified. The general cost of this is only an extra indirection for accessing the value of a string, so a COW implementation is highly desirable. And so the original C++ standard, C++98, and its correction C++03, had special support for COW implementations, and e.g. the g++ compiler's std::string implementations used COW.

So why was that support dropped in C++11?

In particular, would the same reason or reasons apply to a reference counted immutable string value class?

@HViktorTsoi
HViktorTsoi / Argsort.cpp
Created June 21, 2020 07:23
C++ STL implementation of Argsort
#include <vector>
#include <algorithm>
/**
* Argsort(currently support ascending sort)
* @tparam T array element type
* @param array input array
* @return indices w.r.t sorted array
*/
template<typename T>