Changes between Version 16 and Version 17 of LibrariesUnderConstruction


Ignore:
Timestamp:
Jan 3, 2009, 9:42:33 PM (14 years ago)
Author:
viboes
Comment:

Adding SpreadSheet

Legend:

Unmodified
Added
Removed
Modified
  • LibrariesUnderConstruction

    v16 v17  
    116116 * '''Last upload:'''2008 Nov 26
    117117 * '''Links:''' [http://www.boostpro.com/vault/index.php?action=downloadfile&filename=euclid.zip&directory=& Boost Vault]
    118  * '''Description:''' Euclidean vector class templates providing Orientational analysis on geoemtrical dimensions.
     118 * '''Description:''' Euclidean vector class templates providing Orientational analysis on geometrical dimensions.
    119119
    120120---------------------------------------------------------------------------------------------------
     
    144144 * '''Links:''' [http://www.boostpro.com/vault/index.php?action=downloadfile&filename=FSM.zip&directory=& Boost Vault]
    145145 * '''Description:'''The Boost.FSM library is an implementation of FSM (stands for Finite State Machine) programming concept.
    146 There are many cases when a developer would like to distinguish behaviour of a given object depending on some conditions or its internal state. For example, while developing software to control an charging turnstile a programmer would like to separate states in which the turnstile may persist: an idle state, when the device awaits for another passenger that would like to pass; a processing state, when the passenger have come and put his ticket into the device; and the passing state, when the turnstile lets the passenger pass through. In fact, each state describes a different reaction of the machine at the same events. That's why a passenger may only pass after paying for ticket. Obviously, the turnstile have to be able to change its internal state in order to function properly, this is called state switching or transitions between states (or just transitions for short).
     146There are many cases when a developer would like to distinguish behavior of a given object depending on some conditions or its internal state. For example, while developing software to control an charging turnstile a programmer would like to separate states in which the turnstile may persist: an idle state, when the device awaits for another passenger that would like to pass; a processing state, when the passenger have come and put his ticket into the device; and the passing state, when the turnstile lets the passenger pass through. In fact, each state describes a different reaction of the machine at the same events. That's why a passenger may only pass after paying for ticket. Obviously, the turnstile have to be able to change its internal state in order to function properly, this is called state switching or transitions between states (or just transitions for short).
    147147This implementation is aimed to ease the creation of such state machines in C++. It supports constructing passive automatons (which means that every action the machine performs is a response to some external event) with finite number of states and finite number of transitions (that is why they are called finite state machines). The main goals of the library are:
    148148    * Simplicity. It should be very simple to create state machines using this library.
     
    255255 * '''Links:''' [http://home.roadrunner.com/~hinnant/unique_ptr03.html Documentation & Download]
    256256 * '''Description:''' unique_ptr is a class template smart pointer currently in the [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2800.pdf C++0X CD1 draft]. It is intended to be a safer and more flexible replacement for auto_ptr. It represents sole (unique) ownership of a resource such as memory (like auto_ptr).
    257 The actual C++0X unique_ptr makes use of a new C++ langauge feature called rvalue reference which is similar to our current reference (&), but spelled &&. This emulation is intended to capture most of the behavior of the C++0X unique_ptr but work with C++03 compilers. Furthermore this emulation makes use of boost library facilities and has been placed in the boost namespace. Though at the time of this writing, this library is not part of the official boost library release.
     257The actual C++0X unique_ptr makes use of a new C++ language feature called rvalue reference which is similar to our current reference (&), but spelled &&. This emulation is intended to capture most of the behavior of the C++0X unique_ptr but work with C++03 compilers. Furthermore this emulation makes use of boost library facilities and has been placed in the boost namespace. Though at the time of this writing, this library is not part of the official boost library release.
    258258   
    259259---------------------------------------------------------------------------------------------------
     
    527527== Quartets  ==
    528528 * '''Suggested by:''' Vicente J. Botet Escriba 
    529  * '''Description:''' Quartet are half un octet, i.e. 4 bits taking values from 0..15, and usualy represented by chars '0'-'9' 'A'-'F'.
     529 * '''Description:''' Quartet are half an octet, i.e. 4 bits taking values from 0..15, and usually represented by chars '0'-'9' 'A'-'F'.
    530530 There are some container specializations as std::string, std::vector and boost::array that could be of interest to some applications.
    531  They are also used when a decimal number is encoded using the BCD format (binary coded decimal) or to encode telephon numbers.
     531 They are also used when a decimal number is encoded using the BCD format (binary coded decimal) or to encode telephone numbers.
    532532
    533533---------------------------------------------------------------------------------------------------
     
    536536 * '''Description:'''  Concurrent components may interact in different ways: they may access the same objects by, for example, executing functions of these objects; or they may communicate directly by executing functions of each other.  These library will provide the so-called rendezvous mechanism for handling direct communication between active objects.
    537537
     538---------------------------------------------------------------------------------------------------
     539== !SpreadSheet ==
     540 * '''Suggested by:''' Vicente J. Botet Escriba 
     541 * '''Description:''' Allows to manage with the underlying concepts of a Spreadsheet but without displaying them.
     542 
     543Defines '''cells''' that can be organized in a classical grid consisting of rows and columns, or any other structure as for example a tree.
     544Each cell could contains alphanumeric text or numeric values but can also contain any other value.
     545A spreadsheet cell may alternatively contain a '''formula''' that defines how the contents of that cell is to be calculated from the contents of any other cell (or combination of cells) each time any cell is updated.
     546
     547It seems natural to use Boost.Proto to define the DSL for the cell formulas.
     548
     549{{{
     550#!cpp
     551space sh;
     552space::cell<int> c1(sh), c2(sh), c3(sh);
     553c1.expr=1;
     554c2.expr=2;
     555c3.expr=c1+c2;
     556sh.refresh();
     557std::cout<< c1.value() << ", " << c2.value() << ", " << c3.value() << std::endl;
     558}}}
     559
     560{{{
     561#!cpp
     562sheet sh(2,3);
     563sheet::cell<int> c01(sh,0,1), c02(sh,0,2), c03(sh,0,3);
     564c01.expr=1;
     565c02.expr=2;
     566c03.expr=rel_cell(c03,0,1)+rel_cell(c03,0,2);
     567sh.refresh();
     568std::cout<< c01.value() << ", " << c02.value() << ", " << c03.value() << std::endl;
     569c11.expr=5;
     570c12.expr=8;
     571c13.expr=c03.copy();
     572sh.refresh();
     573std::cout<< c11 << ", " << c12 << ", " << c13 << std::endl;
     574}}}
    538575
    539576---------------------------------------------------------------------------------------------------
     
    549586    * Lock traits: very specific traits classes, some of them encapsulate a single trait for a Lockable type; for example, is a lock recursive (is_recursive), is useful in a multi threaded context (is_multi_threaded).
    550587    * Finding the best lock: Inverse traits can match a lockable type based on specific traits, for a given family of lock types.
    551     * Synchronization familly: A class that will do internal locking can be parameterized by the type of synchronization familly needed to achieve the desired level of concurrency control. This depends of the usage scope of this class, and this can be mono_threaded, multi_threaded, multi_process.
     588    * Synchronization family: A class that will do internal locking can be parameterized by the type of synchronization family needed to achieve the desired level of concurrency control. This depends of the usage scope of this class, and this can be mono_threaded, multi_threaded, multi_process.
    552589    * Strict lockers: A strict_locker is a scoped lock guard ensuring the mutex is locked on the scope of the lock, by locking the mutex on construction and unlocking it on destruction.
    553590    * External lockers: An alternative or complementary approach to internal locking is to support external locking for an object - Multiple calls may be grouped within the same externally defined critical region.
     
    667704---------------------------------------------------------------------------------------------------
    668705== Miscellaneous ==
    669  * [#!ContraintsProgramming ContraintsProgramming]
     706 * [#ContraintsProgramming ContraintsProgramming]
    670707 * [#Boost.Dataflow Dataflow]
    671708 * [#Boost.Fsm Fsm]
     
    673710 * [#Boost.Mirror Mirror]
    674711 * [#Boost.Reflection Reflection]
     712 * [#SpreadSheet SpreadSheet]
    675713 * [#STM STM]
    676714