//===========================================================================
//  $Name: arts++-1-1-a12 $
//  $Id: ArtsDoc.hh,v 1.2 2004/04/21 23:51:26 kkeys Exp $
//===========================================================================
//  Copyright Notice
//
//  By accessing this software, arts++, you are duly informed
//  of and agree to be bound by the conditions described below in this
//  notice:
//
//  This software product, arts++, is developed by Daniel W. McRobb, and
//  copyrighted(C) 1998 by the University of California, San Diego
//  (UCSD), with all rights reserved.  UCSD administers the CAIDA grant,
//  NCR-9711092, under which part of this code was developed.
//
//  There is no charge for arts++ software.  You can redistribute it
//  and/or modify it under the terms of the GNU Lesser General Public
//  License, Version 2.1, February 1999, which is incorporated by
//  reference herein.
//
//  arts++ is distributed WITHOUT ANY WARRANTY, IMPLIED OR EXPRESS, OF
//  MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE or that the use
//  of it will not infringe on any third party's intellectual
//  property rights.
//
//  You should have received a copy of the GNU Lesser General Public
//  License along with arts++.  Copies can also be obtained from:
//
//    http://www.gnu.org/copyleft/lesser.html
//
//  or by writing to:
//
//  Free Software Foundation, Inc.
//  59 Temple Place, Suite 330
//  Boston, MA 02111-1307
//  USA
//
//  Or contact:
//
//    info@caida.org
//===========================================================================

/*! \mainpage arts++ Class Library
 *
 * This is the C++ class library for ARTS objects.  It handles the following
 * objects:
 *
 *  - IP path
 *  
 *  - AS matrix
 *  
 *  - net matrix
 *  
 *  - port table
 *
 *  - selected port table
 * 
 *  - port matrix
 *  
 *  - protocol table
 *
 *  - interface matrix
 *
 *  - IP nexthop table
 *
 *  - RTT time series
 *
 *  - BGP4 route table
 *
 * \section classRequirements Class Requirements
 *
 *   Adding to the Arts class heirarchy involves adding a new
 *   type of data object.  Inside the Arts class, the _data struct
 *   contains pointers to the different types of data objects that may
 *   be contained.  An Arts object contains only one of these, so
 *   _data is actually used as a discriminate union, where the
 *   discriminator is Arts.Header().Identifier() (the type of the
 *   data).  You need to add a pointer to your new data type in the
 *   _data struct in the Arts class, and add a new unique data
 *   identifier in ArtsHeader.hh (for example, artsC_OBJECT_PORT_MATRIX).
 *
 *   Your data class (which we'll refer to as YourDataType) is required
 *   to implement the following members:
 *
 *     uint32_t Length(uint8_t version) const;
 *     
 *     std::istream & read(std::istream& is, uint8_t version);
 *     
 *     int read(int fd, uint8_t version);
 *     
 *     std::ostream & write(std::ostream& os, uint8_t version);
 *     
 *     int write(int fd, uint8_t version);
 *     
 *     friend std::ostream & operator << (std::ostream & os,
 *                                   const YourDataType & yourData);
 *
 *   After doing this, you need to modify Arts.cc to handle your
 *   new data.  This generally involves adding a new case to various
 *   switch statements.  You should also add an entry to ArtsObjectNames[]
 *   in classes/src/ArtsHeader.cc
 *
 *   You may also provide convenience classes that inherit from
 *   the Arts class but have a data-specific constructor and some
 *   convenient members for accessing the data.  Examples of these
 *   are ArtsAsMatrix, ArtsNetMatrix, et. al.
 */

