19720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* 29720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 2005 39720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Francois Dumont 49720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 59720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * This material is provided "as is", with absolutely no warranty expressed 69720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * or implied. Any use is at your own risk. 79720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 89720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to use or copy this software for any purpose is hereby granted 99720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * without fee, provided the above notices are retained on all copies. 109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to modify the code and to distribute modified code is granted, 119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * provided the above notices are retained, and a notice that the code was 129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * modified is included with the above copyright notice. 139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */ 159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* NOTE: This is an internal header file, included by other STL headers. 179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * You should not attempt to use it directly. 189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */ 199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_CARRAY_H 219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_CARRAY_H 229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* Purpose: Mimic a pur C array with the additionnal feature of 249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * being able to be used with type not default constructible. 259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */ 269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_CONSTRUCT_H 289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_construct.h> 299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_BEGIN_NAMESPACE 329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_PRIV_NAMESPACE 349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, size_t _Nb> 369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _CArray { 379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _CArray (const _Tp& __val) { 389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for (size_t __i = 0; __i < _Nb; ++__i) { 399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Copy_Construct(__REINTERPRET_CAST(_Tp*, _M_data + __i * sizeof(_Tp)), __val); 409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ~_CArray() { 449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Destroy_Range(__REINTERPRET_CAST(_Tp*, _M_data + 0), 459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __REINTERPRET_CAST(_Tp*, _M_data + _Nb * sizeof(_Tp))); 469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Tp& operator [] (size_t __i) { 499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_ASSERT(__i < _Nb) 509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *__REINTERPRET_CAST(_Tp*, _M_data + __i * sizeof(_Tp)); 519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate: 549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block char _M_data[sizeof(_Tp) * _Nb]; 559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_STD_NAMESPACE 589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_END_NAMESPACE 609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif //_STLP_CARRAY_H 62