提交 83b68099 编写于 作者: W wangguibao

serving

Change-Id: I596305cef46e179cff606fa1f62a0997c543727b
上级 fd85cb93
...@@ -61,6 +61,7 @@ if (NOT DEFINED WITH_MKLDNN) ...@@ -61,6 +61,7 @@ if (NOT DEFINED WITH_MKLDNN)
endif() endif()
endif() endif()
include(external/mklml)
include(external/zlib) include(external/zlib)
include(external/gflags) include(external/gflags)
include(external/glog) include(external/glog)
...@@ -102,3 +103,4 @@ add_subdirectory(configure) ...@@ -102,3 +103,4 @@ add_subdirectory(configure)
add_subdirectory(mempool) add_subdirectory(mempool)
add_subdirectory(predictor) add_subdirectory(predictor)
add_subdirectory(inferencer-fluid-cpu) add_subdirectory(inferencer-fluid-cpu)
add_subdirectory(serving)
K 25
svn:wc:ra_dav:version-url
V 54
/libsrc/!svn/ver/22056/tags/bsl/bsl_1-1-42-22055_PD_BL
END
pool.h
K 25
svn:wc:ra_dav:version-url
V 61
/libsrc/!svn/ver/22056/tags/bsl/bsl_1-1-42-22055_PD_BL/pool.h
END
list.h
K 25
svn:wc:ra_dav:version-url
V 61
/libsrc/!svn/ver/22056/tags/bsl/bsl_1-1-42-22055_PD_BL/list.h
END
set.h
K 25
svn:wc:ra_dav:version-url
V 60
/libsrc/!svn/ver/22056/tags/bsl/bsl_1-1-42-22055_PD_BL/set.h
END
map.h
K 25
svn:wc:ra_dav:version-url
V 60
/libsrc/!svn/ver/22056/tags/bsl/bsl_1-1-42-22055_PD_BL/map.h
END
exception.h
K 25
svn:wc:ra_dav:version-url
V 66
/libsrc/!svn/ver/22056/tags/bsl/bsl_1-1-42-22055_PD_BL/exception.h
END
BCLOUD.lib2-64
K 25
svn:wc:ra_dav:version-url
V 69
/libsrc/!svn/ver/22056/tags/bsl/bsl_1-1-42-22055_PD_BL/BCLOUD.lib2-64
END
btree.h
K 25
svn:wc:ra_dav:version-url
V 62
/libsrc/!svn/ver/22056/tags/bsl/bsl_1-1-42-22055_PD_BL/btree.h
END
release.bcloud
K 25
svn:wc:ra_dav:version-url
V 69
/libsrc/!svn/ver/22056/tags/bsl/bsl_1-1-42-22055_PD_BL/release.bcloud
END
BCLOUD
K 25
svn:wc:ra_dav:version-url
V 61
/libsrc/!svn/ver/22056/tags/bsl/bsl_1-1-42-22055_PD_BL/BCLOUD
END
BinBuffer.h
K 25
svn:wc:ra_dav:version-url
V 66
/libsrc/!svn/ver/22056/tags/bsl/bsl_1-1-42-22055_PD_BL/BinBuffer.h
END
AutoBuffer.h
K 25
svn:wc:ra_dav:version-url
V 67
/libsrc/!svn/ver/22056/tags/bsl/bsl_1-1-42-22055_PD_BL/AutoBuffer.h
END
deque.h
K 25
svn:wc:ra_dav:version-url
V 62
/libsrc/!svn/ver/22056/tags/bsl/bsl_1-1-42-22055_PD_BL/deque.h
END
string.h
K 25
svn:wc:ra_dav:version-url
V 63
/libsrc/!svn/ver/22056/tags/bsl/bsl_1-1-42-22055_PD_BL/string.h
END
README
K 25
svn:wc:ra_dav:version-url
V 61
/libsrc/!svn/ver/22056/tags/bsl/bsl_1-1-42-22055_PD_BL/README
END
K 13
svn:mergeinfo
V 2205
/branches/bsl/libsrc_1-0-100_BRANCH:4469-4491
/branches/bsl/libsrc_1-0-103_BRANCH:5392-5393
/branches/bsl/libsrc_1-0-106_BRANCH:6096-6342
/branches/bsl/libsrc_1-0-108_BRANCH:6434-6556
/branches/bsl/libsrc_1-0-109_BRANCH:6782-6785
/branches/bsl/libsrc_1-0-110_BRANCH:7316-7352
/branches/bsl/libsrc_1-0-88_BRANCH:2098-3065
/branches/bsl/libsrc_4-0-63_BRANCH:9631-9656
/branches/bsl/libsrc_4-0-79-1_BRANCH:11639
/branches/bsl/libsrc_4-0-79_BRANCH:11413-11439
/branches/bsl/libsrc_5-0-26-1_BRANCH:14909-14923
/branches/bsl/libsrc_5-0-26-2_BRANCH:16597-16820
/branches/bsl/libsrc_5-0-26-3_BRANCH:16827-16828
/branches/bsl/libsrc_5-0-26_BRANCH:14840-14841
/branches/bsl/libsrc_5-0-44_BRANCH:16578-16581
/branches/bsl/libsrc_5-0-5_BRANCH:11733-11758
/branches/bsl/public_3-6-298_BRANCH:19711-19743
/tags/bsl/bsl_1-1-11-2_PD_BL:6557-6655
/tags/bsl/bsl_1-1-11-2_PD_BL_MAIN:6657-6781
/tags/bsl/bsl_1-1-12-0_PD_BL:6786-7221
/tags/bsl/bsl_1-1-12-0_PD_BL_MAIN:7223-7315
/tags/bsl/bsl_1-1-13-1_PD_BL:7353-7366
/tags/bsl/bsl_1-1-13-1_PD_BL_MAIN:7368-9630
/tags/bsl/bsl_1-1-14-0_PD_BL:9657-9666
/tags/bsl/bsl_1-1-14-0_PD_BL_MAIN:9668-11412
/tags/bsl/bsl_1-1-16-1_PD_BL:11440-11552
/tags/bsl/bsl_1-1-16-1_PD_BL_MAIN:11554-11638
/tags/bsl/bsl_1-1-17-0_PD_BL:11640-11642
/tags/bsl/bsl_1-1-17-0_PD_BL_MAIN:11644-11732
/tags/bsl/bsl_1-1-18-0_PD_BL:11759-11777
/tags/bsl/bsl_1-1-18-0_PD_BL_MAIN:11779-14839
/tags/bsl/bsl_1-1-19-0_PD_BL:14842-14884
/tags/bsl/bsl_1-1-19-0_PD_BL_MAIN:14886-14908
/tags/bsl/bsl_1-1-2-2_PD_BL_MAIN:2078-2097
/tags/bsl/bsl_1-1-20-1_PD_BL:14924-14928
/tags/bsl/bsl_1-1-20-1_PD_BL_MAIN:14930-16577
/tags/bsl/bsl_1-1-22-0_PD_BL:16582-16583
/tags/bsl/bsl_1-1-23-0_PD_BL:16587-16596
/tags/bsl/bsl_1-1-24-2_PD_BL:16821
/tags/bsl/bsl_1-1-24-2_PD_BL_MAIN:16823-16826
/tags/bsl/bsl_1-1-25-0_PD_BL:16829
/tags/bsl/bsl_1-1-25-0_PD_BL_MAIN:16831-19710
/tags/bsl/bsl_1-1-3-2_PD_BL:3066-3138
/tags/bsl/bsl_1-1-31-0_PD_BL:19744-19746
/tags/bsl/bsl_1-1-6-0_PD_BL_MAIN:4253-4468
/tags/bsl/bsl_1-1-7-0_PD_BL:4492-4690
/tags/bsl/bsl_1-1-7-0_PD_BL_MAIN:4692-5391
/tags/bsl/bsl_1-1-8-0_PD_BL:5394-6251
/tags/bsl/bsl_1-1-8-0_PD_BL_MAIN:5488-6095
/tags/bsl/bsl_1-1-9-3_PD_BL:6343-6431
/tags/bsl/bsl_1-1-9-3_PD_BL_MAIN:6433
END
10
dir
22176
https://svn.baidu.com/libsrc/tags/bsl/bsl_1-1-42-22055_PD_BL
https://svn.baidu.com/libsrc
2017-08-08T11:52:56.433210Z
22056
agile-ci
has-props
2ffda72e-4745-41d5-91b2-c6caaab82b42
test
dir
unittest
dir
archive
dir
ResourcePool
dir
set.h
file
2019-02-11T09:22:29.993635Z
37cd7ca70b6605eac54829a3b8717bef
2010-05-21T14:38:11.412168Z
114
svn
655
exception.h
file
2019-02-11T09:22:29.993635Z
5a7c47f789fa04a647a2043ae30f3b5d
2010-05-21T14:39:54.976906Z
142
svn
590
yperfbench
dir
BCLOUD.lib2-64
file
2019-02-11T09:22:29.994637Z
6c4e03738400b83dbd387a2ded67849c
2015-05-22T02:54:17.260835Z
21144
bcloud
596
check_cast
dir
btree.h
file
2019-02-11T09:22:29.994637Z
ae94019304cabfbb5ddc578436b6c506
2010-07-27T01:50:44.310693Z
2077
scmpf
165
release.bcloud
file
2019-02-11T09:22:29.994637Z
c62321a2fe9ad0ddaaf1af969eace55a
2015-06-05T02:38:08.325382Z
21271
bcloud
363
var
dir
BinBuffer.h
file
2019-02-11T09:22:29.994637Z
fc8882b806ca7f9570dc2091a4873a54
2011-01-20T12:15:06.825612Z
3791
scmpf
17096
AutoBuffer.h
file
2019-02-11T09:22:29.994637Z
d649afc0f57f3d48055fdf131d29ced0
2011-09-29T09:38:30.336867Z
6656
scmpf
27912
deque.h
file
2019-02-11T09:22:29.992635Z
63d7122d32d6071a453e07033ab104d1
2010-05-21T14:38:11.412168Z
114
svn
637
alloc
dir
string.h
file
2019-02-11T09:22:29.992635Z
46355160d344f73d0570cbed04c7bd66
2010-05-21T14:39:54.976906Z
142
svn
579
README
file
2019-02-11T09:22:29.992635Z
621eba6d29134529781bc6f94c8c4666
2010-05-21T14:36:29.299775Z
82
svn
189
exception
dir
pool.h
file
2019-02-11T09:22:29.993635Z
b78e73905656736fff92d22c2a671b81
2010-05-21T14:38:11.412168Z
114
svn
723
utils
dir
list.h
file
2019-02-11T09:22:29.993635Z
c17f5efdf3b9e5c87e5cb63e8b48be90
2010-05-21T14:38:11.412168Z
114
svn
628
cxxtest
dir
proctest
dir
map.h
file
2019-02-11T09:22:29.993635Z
af53c68eb17d88714cf3774486930be6
2010-05-21T14:38:11.412168Z
114
svn
662
containers
dir
BCLOUD
file
2019-02-11T09:22:29.993635Z
9c27f5bdadde5763da345fc9df173a96
2016-08-03T02:18:17.114676Z
21786
xingyongxu
1590
buffer
dir
pool
dir
此差异已折叠。
#edit-mode: -*- python -*-
#coding:gbk
#·.
WORKROOT('../../')
HEADERS('include/*', '$INC')
StaticLibrary('bsl', PreBuilt(True))
StaticLibrary('bsl_archive', PreBuilt(True))
StaticLibrary('bsl_buffer', PreBuilt(True))
StaticLibrary('bsl_check_cast', PreBuilt(True))
StaticLibrary('bsl_exception', PreBuilt(True))
StaticLibrary('bsl_pool', PreBuilt(True))
StaticLibrary('bsl_ResourcePool', PreBuilt(True))
StaticLibrary('bsl_utils', PreBuilt(True))
StaticLibrary('bsl_var', PreBuilt(True))
StaticLibrary('bsl_var_implement', PreBuilt(True))
StaticLibrary('bsl_var_utils', PreBuilt(True))
#edit-mode: -*- python -*-
#coding:gbk
WORKROOT('../../')
#platform, if not write PLATFORM('xxx') in BCLOUD file, default is 'redhat4u3'
#PLATFORM('centos4u3')
#gcc version, default 'gcc'
COMPILER('gcc482')
#Preprocessor flags.
#CPPFLAGS(r'-D_GNU_SOURCE -D__STDC_LIMIT_MACROS')
#CPPFLAGS(r'-DVERSION=\"%s\"' % SVN_LAST_CHANGED_REV())
#C flags.
#CFLAGS('-g -pipe -W -Wall -fPIC')
#C++ flags.
#CXXFLAGS(' -g -pipe -W -Wall -fPIC')
#IDL flags.
#IDLFLAGS('--compack')
#UBRPC flags.
#UBRPCFLAGS('--compack')
#-I path
#INCPATHS('. ./include $OUT/include')
#INCPATHS('../../')
#libs which need to link with
#LIBS('$OUT/lib/libbsl.a')
#LIBS('$OUT/so/libbsl.so')
#link flags
#LDFLAGS('-lpthread -lcrypto -lrt')
#CONFIGS("lib2-64/ullib@base")
#user_sources=GLOB("*.c *.cpp *.cc *.idl")
#release headers
HEADERS('*.h', '$INC/bsl')
#HEADERS('*.hpp', '$INC')
#HEADERS('include/*.h', '$INC')
#HEADERS('include/*.hpp', '$INC')
#release files except headers
OUTPUT('BCLOUD.lib2-64', '$OUT/')
#bin
#Application('bsl', Sources(user_sources))
#UT
#UTApplication('bsl', Sources(user_sources), UTArgs(''), UTOnServer(False))
#.a
#StaticLibrary('bsl', Sources(user_sources))
#StaticLibrary('bsl', PreBuilt(True))
#.so
#SharedLibrary('bsl', Sources(user_sources))
#SharedLibrary('bsl', PreBuilt(True))
#sub directory
Directory('utils')
Directory('alloc')
Directory('archive')
Directory('containers')
Directory('pool')
Directory('buffer')
Directory('exception')
Directory('check_cast')
Directory('ResourcePool')
Directory('var/interface')
Directory('var/utils')
Directory('var/implement')
/***************************************************************************
*
* Copyright (c) 2008 Baidu.com, Inc. All Rights Reserved
* $Id: bsl_bin_buffer.h,v 1.0 2009/10/14 08:24:58 chenxm Exp $
*
**************************************************************************/
/**
* @file bsl_bin_buffer.h
* @author liaoshangbin(liaoshangbin@baidu.com)
* @date 2010/07/31 13:46:02 / 2010/10/15 modified by zhujianwei
* @version $Revision: 1.0 $
* @brief
*
**/
#ifndef __BSL_BIN_BUFFER_H_
#define __BSL_BIN_BUFFER_H_
#include <cstring>
#include <cstdarg>
#include <cstdlib>
#include <cstdio>
#include <algorithm>
#include "bsl/utils/bsl_memcpy.h"
#include "bsl/pool/bsl_pool.h"
namespace bsl{
/**
* @brief 读入数据,并按二进制进行存储
*
* 该类的一大特点是不会抛出异常。在内存不足的时候,该类会截断字符串并置"被截断位"。
* BinBuffer对象通过字节对齐方式自行管理一片用于表示字符串的缓冲区,并提供方法追加各种类型对象。
* 若内存不足时,内存容量将翻倍,若申请新内存失败,将填满旧内存,
* 而且使truncated()方法返回true,ever_truncated()返回true。
*/
class BinBuffer{
public:
/**
* @brief 构造函数
*
* 可传入capacity参数指定预分配的内存空间。如capacity==0没有动态内存分配。
* 可传入pack参数指定默认字节对齐值,pack要求为2的整数幂并且<=MAX_PACK
* 否则_pack=DEFAULT_PACK
*
* 注:如内存分配失败不会抛出异常。其结果相当于以0为参数构造。
*
* @param [in] capacity : size_t
* @param [in] pack : size_t
* @see
* @author liaoshangbin
* @date 2010/7/29 12:05:10
**/
explicit BinBuffer( size_t cap = DEFAULT_CAPACITY, size_t pack = DEFAULT_PACK)
:_size(0), _capacity(cap), _pack(pack),
_truncated(false), _ever_truncated(false), _str(NULL), _mempool(NULL) {
if ( _capacity != 0 ) {
_str = static_cast<char *>(_mempool == NULL ?
malloc(_capacity) : _mempool->malloc(_capacity));
if ( _str ){
_str[0] = '\0';
}else{
_capacity = 0;
}
}
if(!(pack > 0 && pack <= DEFAULT_MAX_PACK && is_power_two(pack))){
_pack = DEFAULT_PACK;
}
}
/**
* @brief 使用allocator的构造函数
*
* 可传入capacity参数指定预分配的内存空间。如capacity==0没有动态内存分配。
* 可传入pool参数指定使用的内存池
* 可传入pack参数指定默认字节对齐值,pack要求为2的整数幂并且<=MAX_PACK
* 否则_pack=DEFAULT_PACK
*
* 注:如内存分配失败不会抛出异常。其结果相当于以0为参数构造。
*
* @param [in] pool : mempool&
* @param [in] capacity : size_t
* @param [in] pack : size_t
* @see
* @author
* @date 2010/7/29 12:06:16
**/
explicit BinBuffer(
mempool& pool,
size_t cap = DEFAULT_CAPACITY,
size_t pack = DEFAULT_PACK
)
:_size(0), _capacity(cap), _pack(pack),
_truncated(false), _ever_truncated(false), _str(NULL), _mempool(&pool) {
if ( _capacity != 0 ) {
_str = static_cast<char *>(_mempool == NULL ?
malloc(_capacity) : _mempool->malloc(_capacity));
if ( _str ){
_str[0] = '\0';
}else{
_capacity = 0;
}
}
if(!(pack > 0 && pack <= DEFAULT_MAX_PACK && is_power_two(pack))) {
_pack = DEFAULT_PACK;
}
}
/**
* @brief 把另一BinBuffer的内存转移到本BinBuffer(另一BinBuffer会被清空),O(1)复杂度
* 因为不同BinBuffer使用的内存池会有不同
* 先释放自身_str的内存,然后_str指向other._str浅复制字符串,
* 自身的_mempool指向other._mempool,这样_mempool还是处理_str这块内存
* 最后清空other._str,other成为空的BinBuffer还可以继续使用
*
* @param [in] other : BinBuffer&
* @return BinBuffer&
* @retval
* @see
* @author chenxm
* @date 2009/02/04 17:45:30
**/
BinBuffer& transfer_from ( BinBuffer& other ){
if ( &other != this ){
if ( _str ){
_mempool == NULL ? free( _str ) : _mempool->free( _str, _capacity);
}
_size = other._size;
_capacity = other._capacity;
_pack = other._pack;
_truncated = other._truncated;
_ever_truncated = other._ever_truncated;
_str = other._str;
_mempool = other._mempool;
other._size = 0;
other._capacity = 0;
other._pack = DEFAULT_PACK;
other._truncated= false;
other._ever_truncated = false;
other._str = NULL;
}
return *this;
}
/**
* @brief 交换两BinBuffer内容,O(1)复杂度
*
* @param [in] other : BinBuffer&
* @return void
* @retval
* @see
* @author chenxm
* @date 2009/02/04 18:14:15
**/
void swap( BinBuffer& other ){
std::swap( _str, other._str );
std::swap( _size, other._size );
std::swap( _capacity, other._capacity );
std::swap( _pack, other._pack );
std::swap( _truncated, other._truncated );
std::swap( _ever_truncated, other._ever_truncated );
std::swap( _mempool, other._mempool );
}
/**
* @brief 析构函数
*
* @see
* @author chenxm
* @date 2009/02/04 18:14:47
**/
~BinBuffer(){
if ( _str ){
_mempool == NULL ? free( _str ) : _mempool->free( _str, _capacity);
}
}
/**
* @brief BinBuffer长度
*
* @return size_t
* @retval
* @see
* @author chenxm
* @date 2009/02/04 18:14:56
**/
size_t size() const{
return _size;
}
/**
* @brief BinBuffer当前容量。保证容量>=长度。当容量不足时,容量会自动增长。
*
* @return size_t
* @retval
* @see
* @author chenxm
* @date 2009/02/04 18:15:23
**/
size_t capacity() const {
return _capacity;
}
/**
* @brief 返回BinBuffer是否为空
*
* @return bool
* @retval
* @see
* @author chenxm
* @date 2009/02/04 18:16:26
**/
bool empty() const {
return _size == 0;
}
/**
* @brief 返回BinBuffer是否为满
*
* @return bool
* @retval
* @see
* @author
* @date
**/
bool full() const {
return _size == _capacity;
}
/**
* @brief 返回BinBuffer最近一次操作是否发生了截断
*
* @return bool
* @retval
* @see
* @author chenxm
* @date 2009/02/04 18:16:58
**/
bool truncated() const {
return _truncated;
}
/**
* @brief 返回BinBuffer到目前为止是否发生了截断
*
* @return bool
* @retval
* @see
* @author liaoshangbin
* @date 2010/07/31 14:49:24
**/
bool ever_truncated() const {
return _ever_truncated;
}
/**
* @brief 返回BinBuffer内容的C风格字符串表示。O(1)复杂度
*
* @return const char*
* @retval
* @see
* @author chenxm
* @date 2009/02/04 18:17:26
**/
const char * data() const {
if ( _str ){
return _str;
}else{
return "";
}
}
/**
* @brief 清空内容
*
* @return void
* @retval
* @see
* @author liaoshangbin
* @date
**/
void clear() {
if ( _size ){
_str[0] = '\0';
}
_size = 0;
}
/**
* @brief 手动扩大内存容量
*
* @param [in] __capacity : size_t
* @return bool
* @retval
* @see
* @author chenxm
* @date 2009/02/04 18:18:34
**/
bool reserve( size_t cap ) {
if ( cap > _capacity ){
if ( cap < _capacity * 2 ){
cap = _capacity * 2;
}
char * _new = static_cast<char*>(_mempool == NULL ?
malloc(cap) :_mempool->malloc(cap));
if ( !_new ){
return false;
}
if ( _str ){
xmemcpy( _new, _str, _size );
_mempool == NULL ? free( _str ) : _mempool->free( _str, _capacity);
}
_str = _new;
_capacity = cap;
}
return true;
}
/**
* @brief 追加另一个BinBuffer,other按照min(other.get_pack(), this->_pack)字节对齐
*
* @param [in] other : const BinBuffer&
* @return BinBuffer& operator
* @retval
* @see
* @author chenxm
* @date 2009/09/27 16:49:30
**/
BinBuffer& operator << (const BinBuffer& other){
size_t pack = other.get_pack();
pack = pack < _pack ? pack : _pack;
_size = (_size + pack - 1) & (~(pack-1));
return push( other.data(), other.size() );
}
/**
* @brief 处理数值类型
* bool,signed char,unsigned char,short,unsigned short,int
* unsigned int,long int,unsigned long int,long long
* unsigned long lont,double,long double
*
* wchar_t:可输入任意的宽字符,包括'\0'
* char:可输入任意的字符,包括'\0'
*
* @param [in] value : _Tp
* @return BinBuffer& operator
* @retval
* @see
* @author liaoshangbin
* @data 2010/08/20 12:23:07
**/
template<typename _Tp>
BinBuffer& operator << ( _Tp value ) {
return push_bin_data( &value, sizeof(value) );
}
/**
* @brief 追加另一个BinBuffer,新的BinBuffer按照min(other.get_pack(), this->_pack)字节对齐
*
* @param [in] other : const BinBuffer&
* @return BinBuffer&
* @retval
* @see
* @author chenxm
* @date 2009/09/27 16:54:00
**/
BinBuffer& push(const BinBuffer& other){
size_t pack = other.get_pack();
pack = pack > _pack ? pack : _pack;
_size = (_size + pack - 1) & (~(pack-1));
return push( other.data(), other._size );
}
/**
* @brief 处理数值类型
* bool,signed char,unsigned char,short,unsigned short,int
* unsigned int,long int,unsigned long int,long long
* unsigned long lont,double,long double
*
* wchar_t:可输入任意的宽字符,包括'\0'
* char:可输入任意的字符,包括'\0'
*
* @param [in] value : _Tp
* @return BinBuffer& operator
* @retval
* @see
* @author liaoshangbin
* @data 2010/08/20 12:23:07
**/
template<typename _Tp>
BinBuffer& push( _Tp value ) {
return push_bin_data( &value, sizeof(value) );
}
/**
* @brief 追加多个任意字符
*
* @param [in] count : int
* @param [in] c : char
* @return BinBuffer&
* @retval
* @see
* @author chenxm / zhujianwei
* @date 2009/02/04 18:40:04 / mod. by zhjw at 2010/09/21
**/
BinBuffer& push( size_t count, char c){
if ( count > _capacity - _size ){ //full
count = (count <= size_t(-1) - _size) ? count : (size_t(-1) - _size); //limit the size
if( !reserve( _size + count ) ){
//reserve fail
count = _capacity - _size;
_truncated = true;
_ever_truncated = true;
}else{
_truncated = false;
}
}
if ( count ){
//str != NULL
memset( _str + _size, c, count );
_size += count;
}
return *this;
}
/**
* @brief 追加len长度的数据
*
* 调用者必须保证data指向的数据长度不大于len,否则行为未定义
*
* @param [in] data_ : const void*
* @param [in] len : size_t
* @return BinBuffer&
* @retval
* @see
* @author chenxm
* @date 2009/02/04 18:42:28
**/
BinBuffer& push(const void* data_, size_t len );
/**
* @brief 自定义字节对齐值
* 返回值为true表示设置成功,false表示设置失败
*
* @param [in] pack : size_t
* @return bool
* @retval
* @see
* @author liaoshangbin
* @data 2010/07/31 17:46:41
**/
bool set_pack( size_t pack ) {
if ( pack > 0 && pack <= DEFAULT_MAX_PACK && is_power_two( pack ) ) {
_pack = pack;
return true;
}
return false;
}
/**
* @brief 返回自定义字节对齐值
*
* @param
* @return size_t
* @retval
* @see
* @author liaoshangbin
* @data 2010/08/03 10:48:18
**/
size_t get_pack() const {
return _pack;
}
public:
/**
* @brief 默认容量大小
*/
static const size_t DEFAULT_CAPACITY = 64;
/**
* @brief 默认字节对齐值
*/
static const size_t DEFAULT_PACK = 4;
/**
* @brief 默认最大字节对齐值
*/
static const size_t DEFAULT_MAX_PACK = 64;
private:
/**
* @brief 复制构造函数
*/
BinBuffer( const BinBuffer& other );
/**
* @brief 复制赋值运算符
*/
BinBuffer& operator = ( const BinBuffer& );
/**
* @brief 判断一个整数是否为2的整数幂
*
* @param [in] n : int
* @return bool
* @retval
* @see
* @author liaoshangbin
* @data 2010/07/31 15:55:57
**/
inline bool is_power_two(size_t n) {
return (((n)&(n-1))==0);
}
/**
* @brief 数值型数据通过此函数插入到buffer中
*
* @param [in] data : const void*
* @param [in] len : size_t
* @return BinBuffer&
* @retval
* @see
* @author liaoshangbin
* @data 2010/07/31 17:50:09
**/
BinBuffer& push_bin_data( const void* data_, size_t len ) {
// 根据_pack计算_size的起始位置
size_t len_ = (len < _pack) ? len : _pack;
_size = (_size + len_ - 1) & (~(len_ - 1));
// push函数注意如果内存无法分配时调整_size大小
return push( data_, len );
}
/**
* @brief BinBuffer的长度
*/
size_t _size;
/**
* @brief BinBuffer的容量
*/
size_t _capacity;
/**
* @brief 自定义字节对齐值
*/
size_t _pack;
/**
* @brief 最近一次操作是否发生截断
*/
bool _truncated;
/**
* @brief 到目前为止是否发现截断
*/
bool _ever_truncated;
/**
* @brief BinBuffer的内部字符串缓冲区
*/
char * _str;
/**
* @brief 当前使用的内存池的指针
*
**/
mempool* _mempool;
};
} //namespace bsl;
#endif //__BSL_AUTO_BUFFER_H_
/* vim: set ts=4 sw=4 sts=4 tw=100 */
32位编译比如加入如下参数: -D_XOPEN_SOURE=500 -D_GNU_SOURCE -ftemplate-depth-128
参考wiki
http://com.baidu.com/twiki/bin/view/Main/ComBSLIntroduct
demo 路径
cvspath: opencode/bsl_demo/
/* -*- c++ -*-
copy[write] by dirlt(dirtysalt1987@gmail.com) */
#ifndef _BSL_BTREE_H_
#define _BSL_BTREE_H_
#include "containers/btree/bsl_kv_btree.h"
#endif
/***************************************************************************
*
* Copyright (c) 2009 Baidu.com, Inc. All Rights Reserved
* $Id: deque.h,v 1.2 2009/03/09 04:56:41 xiaowei Exp $
*
**************************************************************************/
/**
* @file bsldeque.h
* @author xiaowei(com@baidu.com)
* @date 2009/01/13 11:38:21
* @version $Revision: 1.2 $
* @brief
*
**/
#ifndef __BSLDEQUE_H_
#define __BSLDEQUE_H_
#include "containers/deque/bsl_deque.h"
#include "containers/deque/bsl_rwseque.h"
#endif //__BSLDEQUE_H_
/* vim: set ts=4 sw=4 sts=4 tw=100 noet: */
/***************************************************************************
*
* Copyright (c) 2009 Baidu.com, Inc. All Rights Reserved
* $Id: exception.h,v 1.2 2009/06/26 05:23:25 xiaowei Exp $
*
**************************************************************************/
/**
* @file exception.h
* @author chenxm(chenxiaoming@baidu.com)
* @date 2009/06/25 12:18:01
* @version $Revision: 1.2 $
* @brief
*
**/
#ifndef _BSL_EXCEPTION_H_
#define _BSL_EXCEPTION_H_
#include "exception/bsl_exception.h"
#endif //__EXCEPTION_H_
/* vim: set ts=4 sw=4 sts=4 tw=100 */
/***************************************************************************
*
* Copyright (c) 2009 Baidu.com, Inc. All Rights Reserved
* $Id: list.h,v 1.2 2009/03/09 04:56:41 xiaowei Exp $
*
**************************************************************************/
/**
* @file bsllist.h
* @author xiaowei(com@baidu.com)
* @date 2009/01/13 11:37:07
* @version $Revision: 1.2 $
* @brief
*
**/
#ifndef __BSLLIST_H_
#define __BSLLIST_H_
#include "containers/list/bsl_list.h"
#include "containers/slist/bsl_slist.h"
#endif //__BSLLIST_H_
/* vim: set ts=4 sw=4 sts=4 tw=100 noet: */
/***************************************************************************
*
* Copyright (c) 2009 Baidu.com, Inc. All Rights Reserved
* $Id: map.h,v 1.2 2009/03/09 04:56:41 xiaowei Exp $
*
**************************************************************************/
/**
* @file bslmap.h
* @author xiaowei(com@baidu.com)
* @date 2009/01/13 11:33:28
* @version $Revision: 1.2 $
* @brief
*
**/
#ifndef __BSLMAP_H_
#define __BSLMAP_H_
#include "containers/hash/bsl_hashmap.h"
#include "bsl/containers/hash/bsl_phashmap.h"
#include "bsl/containers/hash/bsl_readmap.h"
#endif //__BSLMAP_H_
/* vim: set ts=4 sw=4 sts=4 tw=100 noet: */
/***************************************************************************
*
* Copyright (c) 2009 Baidu.com, Inc. All Rights Reserved
* $Id: pool.h,v 1.2 2009/03/09 04:56:41 xiaowei Exp $
*
**************************************************************************/
/**
* @file bslpool.h
* @author xiaowei(com@baidu.com)
* @date 2009/01/13 11:40:37
* @version $Revision: 1.2 $
* @brief
*
**/
#ifndef __BSLPOOL_H_
#define __BSLPOOL_H_
#include "pool/bsl_pool.h"
#include "pool/bsl_poolalloc.h"
#include "pool/bsl_debugpool.h"
#include "pool/bsl_xcompool.h"
#include "pool/bsl_xmempool.h"
#include "pool/bsl_cachedpool.h"
#endif //__BSLPOOL_H_
/* vim: set ts=4 sw=4 sts=4 tw=100 noet: */
mv BCLOUD.lib2-64 BCLOUD
find lib/ -name "libbsl_var*.a" -exec ar xo {} \;
ar cr lib/libbsl_var.a *.o
rm -f *.o
ar xo lib/libbsl_utils.a
ar xo lib/libbsl_archive.a
ar xo lib/libbsl_buffer.a
ar xo lib/libbsl_exception.a
ar xo lib/libbsl_check_cast.a
ar xo lib/libbsl_ResourcePool.a
ar xo lib/libbsl_pool.a
ar xo lib/libbsl_var.a
ar cr lib/libbsl.a *.o
rm -f *.o
/***************************************************************************
*
* Copyright (c) 2009 Baidu.com, Inc. All Rights Reserved
* $Id: set.h,v 1.2 2009/03/09 04:56:41 xiaowei Exp $
*
**************************************************************************/
/**
* @file bslset.h
* @author xiaowei(com@baidu.com)
* @date 2009/01/13 11:35:10
* @version $Revision: 1.2 $
* @brief
*
**/
#ifndef __BSLSET_H_
#define __BSLSET_H_
#include "containers/hash/bsl_hashset.h"
#include "containers/hash/bsl_phashset.h"
#include "containers/hash/bsl_readset.h"
#endif //__BSLSET_H_
/* vim: set ts=4 sw=4 sts=4 tw=100 noet: */
/***************************************************************************
*
* Copyright (c) 2009 Baidu.com, Inc. All Rights Reserved
* $Id: string.h,v 1.2 2009/06/26 05:23:25 xiaowei Exp $
*
**************************************************************************/
/**
* @file string.h
* @author chenxm(chenxiaoming@baidu.com)
* @date 2009/06/25 12:20:00
* @version $Revision: 1.2 $
* @brief
*
**/
#ifndef _BSL_STRING_H_
#define _BSL_STRING_H_
#include "containers/string/bsl_string.h"
#endif //__STRING_H_
/* vim: set ts=4 sw=4 sts=4 tw=100 */
K 25
svn:wc:ra_dav:version-url
V 67
/libsrc/!svn/ver/22056/tags/bsl/bsl_1-1-42-22055_PD_BL/ResourcePool
END
ShallowCopyString.h
K 25
svn:wc:ra_dav:version-url
V 87
/libsrc/!svn/ver/22056/tags/bsl/bsl_1-1-42-22055_PD_BL/ResourcePool/ShallowCopyString.h
END
ResourcePool.cpp
K 25
svn:wc:ra_dav:version-url
V 84
/libsrc/!svn/ver/22056/tags/bsl/bsl_1-1-42-22055_PD_BL/ResourcePool/ResourcePool.cpp
END
ResourcePool.h
K 25
svn:wc:ra_dav:version-url
V 82
/libsrc/!svn/ver/22056/tags/bsl/bsl_1-1-42-22055_PD_BL/ResourcePool/ResourcePool.h
END
BCLOUD
K 25
svn:wc:ra_dav:version-url
V 74
/libsrc/!svn/ver/22056/tags/bsl/bsl_1-1-42-22055_PD_BL/ResourcePool/BCLOUD
END
bsl_wrappers.h
K 25
svn:wc:ra_dav:version-url
V 82
/libsrc/!svn/ver/22056/tags/bsl/bsl_1-1-42-22055_PD_BL/ResourcePool/bsl_wrappers.h
END
ShallowCopyString.cpp
K 25
svn:wc:ra_dav:version-url
V 89
/libsrc/!svn/ver/22056/tags/bsl/bsl_1-1-42-22055_PD_BL/ResourcePool/ShallowCopyString.cpp
END
Makefile
K 25
svn:wc:ra_dav:version-url
V 76
/libsrc/!svn/ver/22056/tags/bsl/bsl_1-1-42-22055_PD_BL/ResourcePool/Makefile
END
bsl_wrappers_config.h
K 25
svn:wc:ra_dav:version-url
V 89
/libsrc/!svn/ver/22056/tags/bsl/bsl_1-1-42-22055_PD_BL/ResourcePool/bsl_wrappers_config.h
END
10
dir
22176
https://svn.baidu.com/libsrc/tags/bsl/bsl_1-1-42-22055_PD_BL/ResourcePool
https://svn.baidu.com/libsrc
2016-06-23T03:48:38.716278Z
21755
xingyongxu
2ffda72e-4745-41d5-91b2-c6caaab82b42
ShallowCopyString.h
file
2019-02-11T09:22:28.591635Z
b886975c05691af722337a6b368bb567
2011-01-20T12:15:06.825612Z
3791
scmpf
12251
ResourcePool.cpp
file
2019-02-11T09:22:28.591635Z
570ea42f795ec54abdf21bfb98f4c632
2010-11-02T11:29:21.708254Z
3139
zhujianwei
6218
ResourcePool.h
file
2019-02-11T09:22:28.591635Z
24467439362a574e1bae4d90860aaad5
2010-11-02T11:29:21.708254Z
3139
zhujianwei
36990
BCLOUD
file
2019-02-11T09:22:28.592635Z
d7ce121466e8a66402c3788994ac865f
2016-06-23T03:48:38.716278Z
21755
xingyongxu
1530
bsl_wrappers.h
file
2019-02-11T09:22:28.592635Z
357c4caa225074cce0df9dbafff5b339
2010-05-21T14:38:11.412168Z
114
svn
10932
ShallowCopyString.cpp
file
2019-02-11T09:22:28.591635Z
cfd0913a6381fef8fe128c2f95d4553e
2011-01-20T12:15:06.825612Z
3791
scmpf
597
Makefile
file
2019-02-11T09:22:28.591635Z
05d7b524270dae8df98dacfeb53ea8b3
2010-05-21T14:39:16.051777Z
132
svn
1149
bsl_wrappers_config.h
file
2019-02-11T09:22:28.591635Z
7a67d205c65cca7556cacb148c966d11
2010-05-21T14:38:11.412168Z
114
svn
2346
#edit-mode: -*- python -*-
#coding:gbk
WORKROOT('../../../')
#platform, if not write PLATFORM('xxx') in BCLOUD file, default is 'redhat4u3'
#PLATFORM('centos4u3')
#gcc version, default 'gcc'
#COMPILER('gcc482')
#Preprocessor flags.
CPPFLAGS(r'-DVAR_DEBUG_FLAG -DBSL_VERSION=\"bsl1.1.0.0\" -DBSL_CVSTAG=\"bsl_1-1-0-0_PD_BL\" -DBSL_PROJECT_NAME=\"bsl\"')
#CPPFLAGS(r'-DVERSION=\"%s\"' % SVN_LAST_CHANGED_REV())
#C flags.
#CFLAGS('-g -pipe -W -Wall -fPIC')
#C++ flags.
CXXFLAGS(' -g -rdynamic -pipe -fPIC -finline-functions -fsigned-char -Wall -W -Wshadow -Wpointer-arith -Wcast-qual -Wwrite-strings -Wconversion -Winline -Woverloaded-virtual -Wsign-promo')
#IDL flags.
#IDLFLAGS('--compack')
#UBRPC flags.
#UBRPCFLAGS('--compack')
#-I path
INCPATHS('. ./include $OUT/include')
#INCPATHS('../../../')
#libs which need to link with
#LIBS('$OUT/lib/libexception.a')
#LIBS('$OUT/so/libexception.so')
#link flags
#LDFLAGS('-lpthread -lcrypto -lrt')
#CONFIGS("lib2-64/ullib@base")
user_sources=GLOB("*.cpp")
#release headers
HEADERS('bsl_wrappers.h bsl_wrappers_config.h', '$INC/bsl/ResourcePool')
HEADERS('*.h', '$INC/bsl/')
#HEADERS('*.hpp', '$INC')
#HEADERS('include/*.h', '$INC')
#HEADERS('include/*.hpp', '$INC')
#release files except headers
#OUTPUT('conf', '$OUT')
#bin
#Application('ResourcePool', Sources(user_sources))
#UT
#UTApplication('ResourcePool', Sources(user_sources), UTArgs(''), UTOnServer(False))
#.a
StaticLibrary('bsl_ResourcePool', Sources(user_sources))
#sub directory
#Directory('demo')
######################################################
# MAKEFILE TEMPLATE #
# AUTHOR: chenxm (chenxiaoming@baidu.com) #
# LAST UPDATE: Fri Jan 9 12:33:18 CST 2009 #
######################################################
####################################### CONFIGURATION #######################################
##### basic configuration #####
VAR_ROOT = ../var
include $(VAR_ROOT)/Makefile.env
##### build & test configuration #####
PROVIDE_ENTRANCES = ResourcePool.h ShallowCopyString.h
PROVIDE_HEADS = $(wildcard *.h)
PROVIDE_OBJECTS = ResourcePool.o ShallowCopyString.o
PROVIDE_LIB = bsl_ResourcePool
DEPEND_HEADS = $(PROVIDE_HEADS)
DEPEND_OBJECTS =
DEPEND_LIBS =
##### other #####
TAG_ROOT = $(VAR_ROOT)
##### OVERWRITE #####
OUTPUT_HEAD_PATH= $(BSL_ROOT)/output/include/bsl/ResourcePool
####################################### RULES #######################################
include $(VAR_ROOT)/Makefile.rules
####################################### SPECIAL RULES #######################################
check_cast_generated.h: check_cast.py
./$^ > $@
/***************************************************************************
*
* Copyright (c) 2008 Baidu.com, Inc. All Rights Reserved
* $Id: ResourcePool.cpp,v 1.5 2010/04/28 12:45:33 scmpf Exp $
*
**************************************************************************/
/**
* @file ResourcePool.cpp
* @author chenxm(chenxiaoming@baidu.com)
* @date 2008/08/06 11:14:09
* @version $Revision: 1.5 $
* @brief
*
**/
#include <cstdarg>
#include "bsl/ResourcePool.h"
namespace bsl{
/**
* @brief 清理所有受托管的资源
*
* @return void
* @retval
* @see
* @author chenxm
* @date 2009/02/04 15:34:03
**/
void ResourcePool::reset(){
for (block_list_node_t<alloc_object_info_t> *p_node = _p_alloc_object_list;
NULL != p_node;
p_node = p_node->p_next ){
for( alloc_object_info_t* p_item = p_node->data + p_node->current;
p_item >= p_node->data;
--p_item ){
p_item->destructor(p_item->p_object, _mempool);
}
}
_clear_info_list(_p_alloc_object_list);
for (block_list_node_t<alloc_array_info_t> *p_node = _p_alloc_array_list;
NULL != p_node;
p_node = p_node->p_next ){
for( alloc_array_info_t* p_item = p_node->data + p_node->current;
p_item >= p_node->data;
--p_item ){
p_item->destructor(p_item->begin, p_item->end, _mempool);
}
}
_clear_info_list(_p_alloc_array_list);
for (block_list_node_t<attach_object_info_t> *p_node = _p_attach_object_list;
NULL != p_node;
p_node = p_node->p_next ){
for( attach_object_info_t* p_item = p_node->data + p_node->current;
p_item >= p_node->data;
--p_item ){
p_item->destructor(p_item->p_object);
}
}
_clear_info_list(_p_attach_object_list);
for (block_list_node_t<attach_array_info_t> *p_node = _p_attach_array_list;
NULL != p_node;
p_node = p_node->p_next ){
for( attach_array_info_t* p_item = p_node->data + p_node->current;
p_item >= p_node->data;
--p_item ){
p_item->destructor(p_item->begin, p_item->end);
}
}
_clear_info_list(_p_attach_array_list);
}
const char * ResourcePool::_vprintf(
alloc_array_info_t& info,
size_t hint_capacity,
const char *format,
va_list ap
){
//参数检查
size_t size = hint_capacity + 1;
char* str = static_cast<char*>(_mempool.malloc(size));
if ( !str ){
throw bsl::BadAllocException()<<BSL_EARG<<"_mempool["<<&_mempool<<"] size["<<size<<"]";
}
//第一次尝试
va_list aq;
va_copy(aq, ap);
int len = vsnprintf( str, size, format, aq );
va_end(aq);
try{
if ( len < 0 ){
throw bsl::BadFormatStringException()<<BSL_EARG<<"format:"<<format;
}else if ( size_t(len) < size ){
//成功了
info.begin = str;
info.end = str + size;
info.destructor = _s_deallocate;
return str;
}else{
//第一次尝试失败,回滚str的分配
_mempool.free(str, size);
}
}catch(...){
//回滚str的分配
_mempool.free(str, size);
throw;
}
//第二次尝试
//len保存了真正需要的长度
//这次一定成功
return _vprintf( info, len, format, ap );
}
const char * ResourcePool::crcprintf(const char * format, ... ){
//以60为默认值去尝试
const size_t DEFAULT_STRING_SIZE = 60;
alloc_array_info_t &info = _push_info( _p_alloc_array_list );
va_list ap;
va_start(ap, format);
try{
const char * res = _vprintf( info, DEFAULT_STRING_SIZE, format, ap ); //throw
va_end(ap);
return res;
}catch(...){
va_end(ap);
//回滚info的分配
_pop_info( _p_alloc_array_list );
throw;
}
}
const char * ResourcePool::crcprintf_hint(size_t hint_capacity, const char * format, ... ){
alloc_array_info_t &info = _push_info( _p_alloc_array_list );
va_list ap;
va_start(ap, format);
try{
const char * res = _vprintf( info, hint_capacity, format, ap ); //throw
va_end(ap);
return res;
}catch(...){
va_end(ap);
//回滚info的分配
_pop_info( _p_alloc_array_list );
throw;
}
}
const char * ResourcePool::vcrcprintf(const char * format, va_list ap) {
//以60为默认值去尝试
const size_t DEFAULT_STRING_SIZE = 60;
alloc_array_info_t &info = _push_info( _p_alloc_array_list );
va_list aq;
va_copy( aq, ap );
try {
const char * res = _vprintf( info, DEFAULT_STRING_SIZE, format, aq ); // throw
va_end(aq);
return res;
} catch (...) {
va_end( aq );
//回滚info的分配
_pop_info( _p_alloc_array_list );
throw;
}
}
const char * ResourcePool::vcrcprintf_hint(
size_t hint_capacity,
const char * format,
va_list ap
) {
alloc_array_info_t &info = _push_info( _p_alloc_array_list );
va_list aq;
va_copy( aq, ap );
try {
const char * res = _vprintf( info, hint_capacity, format, aq ); // throw
va_end( aq );
return res;
} catch (...) {
va_end( aq );
//回滚info的分配
_pop_info( _p_alloc_array_list );
throw;
}
}
} //namespace bsl
/* vim: set ts=4 sw=4 sts=4 tw=100 */
/***************************************************************************
*
* Copyright (c) 2009 Baidu.com, Inc. All Rights Reserved
* $Id: ShallowCopyString.cpp,v 1.2 2009/06/15 06:29:04 chenxm Exp $
*
**************************************************************************/
/**
* @file ShallowCopyString.cpp
* @author chenxm(chenxiaoming@baidu.com)
* @date 2009/05/10 22:52:45
* @version $Revision: 1.2 $
* @brief
*
**/
#include "ShallowCopyString.h"
namespace bsl{
// const char ShallowCopyString::_S_EMPTY_CS[] = "";
}
/* vim: set ts=4 sw=4 sts=4 tw=100 */
/***************************************************************************
*
* Copyright (c) 2008 Baidu.com, Inc. All Rights Reserved
* $Id: ShallowCopyString.h,v 1.3 2009/06/15 06:29:04 chenxm Exp $
*
**************************************************************************/
/**
* @file ShallowCopyString.h
* @author chenxm(chenxiaoming@baidu.com)
* @date 2008/08/08 09:08:18
* @version $Revision: 1.3 $
* @brief
*
**/
#ifndef __SHALLOWCOPYSTRING_H_
#define __SHALLOWCOPYSTRING_H_
#include <cstring>
#include <iostream>
#include "bsl/exception/bsl_exception.h"
#include "bsl/containers/string/bsl_string.h"
namespace bsl{
class ShallowCopyString{
public:
typedef char value_type;
typedef size_t size_type;
typedef long difference_type;
typedef value_type & reference;
typedef const reference const_reference;
typedef value_type * pointer;
typedef const pointer const_pointer;
typedef pointer iterator;
typedef const_pointer const_iterator;
#if __GNUC__ <= 2
typedef string_char_traits<value_type> traits_type;
#else
typedef std::char_traits<value_type> traits_type;
#endif
//ctors and dtors
/**
* @brief 默认构造函数
*
* 默认构造的ShallowCopyString表示空串。
* @param [in] str : const char*
* @see
* @author chenxm
* @date 2008/08/08 11:02:09
**/
ShallowCopyString()
: _str(_S_EMPTY_CS()), _length(0){}
/**
* @brief 隐式构造函数
*
* 该函数把C风格字符串转化为ShallowCopyString。
*
* 该方法时间复杂度为O(1),长度被懒惰求值。(直到size()方法第一次被调用)
*
* @param [in] str : const char*
* @see
* @author chenxm
* @date 2009/04/10 17:57:28
**/
ShallowCopyString( const char * str )
: _str(str), _length(npos) {
if ( NULL == str ){
throw NullPointerException()<<BSL_EARG<<"str is NULL";
}
}
/**
* @brief 用C风格字符串与指定的长度构造ShallowCopyString
*
* 注意:len必须与strlen(str)相等,否则行为未定义。
*
* @param [in] str : const char*
* @param [in] len : size_t
* @see
* @author chenxm
* @date 2009/04/14 21:28:49
**/
ShallowCopyString( const char * str, size_t len )
: _str(str), _length(len){
if ( NULL == str ){
throw NullPointerException()<<BSL_EARG;
}
if ( str[len] != '\0' ){
//给出的长度值有误?
throw bsl::BadArgumentException()<<BSL_EARG<<"wrong len:"<<len;
}
}
/**
* @brief 用使用任意allocator生成的bsl::basic_string构造ShallowCopyString
*
* @param [in] bsl::basic_string<char : const
* @param [in] bsl_str : allocator_t>&
* @return template<class allocator_t>
* @retval
* @see
* @author chenxm
* @date 2009/04/14 21:44:58
**/
template<class allocator_t>
ShallowCopyString( const bsl::basic_string<char, allocator_t>& bsl_str )
: _str(bsl_str.c_str()), _length(bsl_str.length()) {};
/**
* @brief 使用AutoBuffer构造ShallowCopyString
*
* @param [in] buf : const bsl::AutoBuffer&
* @see
* @author chenxm
* @date 2009/04/14 21:46:07
**/
ShallowCopyString( const bsl::AutoBuffer& buf )
: _str(buf.c_str()), _length(buf.size()){}
/**
* @brief 复制构造函数
*
* @param [in] sstr : const ShallowCopyString&
* @see
* @author chenxm
* @date 2009/04/14 21:46:22
**/
ShallowCopyString( const ShallowCopyString& sstr )
: _str(sstr._str), _length(sstr._length) {}
/**
* @brief 析构函数
*
* @see
* @author chenxm
* @date 2009/04/14 21:46:51
**/
~ShallowCopyString() {
//do nothing
}
void clear(){
_str = _S_EMPTY_CS();
_length = 0;
}
// getters
/**
* @brief 返回C风格字符串
*
* @return const char*
* @retval
* @see
* @author chenxm
* @date 2009/04/14 21:47:17
**/
const char * c_str() const {
return _str;
}
/**
* @brief 返回字符串长度
*
* 若字符串使用ShallowCopyString(const char *)构造并且本函数从未调用过,时间复杂为度O(strlen(this->c_str())),否则为O(1)
*
* @return size_t
* @retval
* @see
* @author chenxm
* @date 2009/04/14 21:55:58
**/
size_t size() const {
if ( _length == npos ){
const_cast<size_t&>(_length) = strlen(_str);
}
return _length;
}
/**
* @brief 返回size()
*
* @return size_t
* @retval
* @see
* @author chenxm
* @date 2009/04/14 21:59:39
**/
size_t length() const {
return size();
}
/**
* @brief 返回size()
*
* @return size_t
* @retval
* @see
* @author chenxm
* @date 2009/04/14 21:59:48
**/
size_t capacity() const {
return size();
}
/**
* @brief 返回第idx个字符
*
* 注:本函数不检查idx的合法性
* @param [in] idx : size_t
* @return char[]
* @retval
* @see
* @author chenxm
* @date 2009/04/14 22:00:06
**/
char operator []( size_t idx ) const {
return _str[idx];
}
/**
* @brief 返回第idx个字符
*
* 本函数检查idx合法性,若idx>=this->size(),抛出bsl::OutOfBoundException
* @param [in] idx : size_t
* @return char
* @retval
* @see
* @author chenxm
* @date 2009/04/14 22:00:50
**/
char at( size_t idx ) const {
if ( idx < this->size() ){
return _str[idx];
}
throw bsl::OutOfBoundException()<<BSL_EARG<<"idx:"<<idx<<" size():"<<size();
}
/**
* @brief 复制赋值
*
* 浅复制,时间复杂度为O(1)
* @param [in] sstr : const ShallowCopyString&
* @return ShallowCopyString& operator
* @retval
* @see
* @author chenxm
* @date 2009/04/14 22:02:05
**/
ShallowCopyString& operator = ( const ShallowCopyString& sstr ){
_str = sstr._str;
_length = sstr._length;
return *this;
}
ShallowCopyString& operator = ( const AutoBuffer& buf ){
_str = buf.c_str();
_length = buf.size();
return *this;
}
ShallowCopyString& operator = ( const bsl::string& str ){
_str = str.c_str();
_length = str.size();
return *this;
}
ShallowCopyString& operator = ( const char *cstr ){
if ( cstr == NULL ){
throw bsl::NullPointerException()<<BSL_EARG<<"cstr is NULL";
}
if ( cstr != _str ){
_str = cstr;
_length = npos;
}
return *this;
}
/**
* @brief 字典序比较
*
* 若本字符串字典序小于、等于、大于other,则返回值<0、=0、>0
* 若两字符串首字母不相同,或字符串地址相同,该函数时间复杂度为O(1)
*
*
* @param [in] other : const ShallowCopyString&
* @return int
* @retval
* @see
* @author chenxm
* @date 2009/04/14 22:02:31
**/
int compare( const ShallowCopyString& other ) const {
if ( _str[0] != other._str[0] ){
return traits_type::lt(_str[0], other._str[0]) ? -1 : 1;
}
if ( _str == other._str ){
return 0; //对于ShallowCopyString来说这是有可能的。
}
size_t min_size = std::min( size() , other.size() );
int ret = memcmp( _str, other._str, min_size );
if ( ret == 0 ){
if (_length > other._length) {
return 1;
} else if (_length == other._length) {
return 0;
} else {
return -1;
}
}else{
return ret;
}
}
//comparers
//因为const char *转换为ShallowCopyString是O(1)的,ShallowCopyString与一个随机的C字符串比较也是平均O(1)的(预判断第一字节),所以不专门对C字符串做比较函数了。
friend inline bool operator == (const ShallowCopyString& sstr1, const ShallowCopyString& sstr2){
return sstr1.compare( sstr2 ) == 0;
}
friend inline bool operator != (const ShallowCopyString& sstr1, const ShallowCopyString& sstr2){
return sstr1.compare( sstr2 ) != 0;
}
friend inline bool operator < (const ShallowCopyString& sstr1, const ShallowCopyString& sstr2){
return sstr1.compare( sstr2 ) < 0;
}
friend inline bool operator > (const ShallowCopyString& sstr1, const ShallowCopyString& sstr2){
return sstr1.compare( sstr2 ) > 0;
}
friend inline bool operator <= (const ShallowCopyString& sstr1, const ShallowCopyString& sstr2){
return sstr1.compare( sstr2 ) <= 0;
}
friend inline bool operator >= (const ShallowCopyString& sstr1, const ShallowCopyString& sstr2){
return sstr1.compare( sstr2 ) >= 0;
}
/**
* @brief 输出到输出流
*
* @param [in] os : std::ostream&
* @param [in] sstr : const ShallowCopyString&
* @return friend inline std::ostream& operator
* @retval
* @see
* @author chenxm
* @date 2009/04/14 22:14:58
**/
friend inline std::ostream& operator << ( std::ostream& os, const ShallowCopyString& sstr ){
return os << sstr._str ;
}
static const size_t npos = static_cast<size_t>(-1);
private:
const char * _str;
size_t _length;
static const char *_S_EMPTY_CS(){
static const char ret[] = "";
return ret;
};
};
} // namespace bsl
/**
* @brief 定义bsl::ShallowCopyString追加到bsl::AutoBuffer的运算符
*
* @param [in] buf : bsl::AutoBuffer&
* @param [in] str : bsl::ShallowCopyString&
* @return bsl::AutoBuffer& operator
* @retval
* @see
* @author chenxm
* @date 2009/05/09 01:59:57
**/
inline bsl::AutoBuffer& operator <<( bsl::AutoBuffer& buf, bsl::ShallowCopyString& str ){
return buf.push(str.c_str(), str.length());
}
#if __GNUC__ >=3
namespace __gnu_cxx{
#else
namespace std{
#endif
/**
* @brief 针对__gnu_cxx::hash编写的hasher
*
* 使用与const char*相同的hash算法。
*/
template<>
struct hash<bsl::ShallowCopyString>{
size_t operator()(const bsl::ShallowCopyString& str ) const {
return __stl_hash_string(str.c_str());
}
};
} // namespace __gnu_cxx/std
namespace bsl{
/**
* @brief 针对bsl::xhash编写的hasher
*
* 使用与const char*相同的hash算法。
*/
template<>
struct xhash<bsl::ShallowCopyString>{
size_t operator()(const bsl::ShallowCopyString& str ) const {
return __bsl_hash_string(str.c_str());
}
};
} // namespace bsl
#endif //__SHALLOWCOPYSTRING_H_
/* vim: set ts=4 sw=4 sts=4 tw=100 */
/***************************************************************************
*
* Copyright (c) 2008 Baidu.com, Inc. All Rights Reserved
* $Id: bsl_wrappers_config.h,v 1.2 2009/03/09 04:56:41 xiaowei Exp $
*
**************************************************************************/
/**
* @file bsl_wrappers_config.h
* @author chenxm(chenxiaoming@baidu.com)
* @date 2008/08/11 11:32:53
* @version $Revision: 1.2 $
* @brief
*
**/
#ifndef __BSL_WRAPPERS_CONFIG_H_
#define __BSL_WRAPPERS_CONFIG_H_
#if __GNUC__ == 2 && __GNUC_MINOR__ == 96
#define __BSL_TRUE_TYPE__ __true_type
#define __BSL_FALSE_TYPE__ __false_type
#define __BSL_HAS_TRIVIAL_DEFAULT_CONSTRUCTOR(_TYPE_) typename __type_traits<_TYPE_>::has_trivial_default_constructor
#define __BSL_DESTROY std::destroy
#elif __GNUC__ == 3 && __GNUC_MINOR__ == 4
#define __BSL_TRUE_TYPE__ __true_type
#define __BSL_FALSE_TYPE__ __false_type
#define __BSL_HAS_TRIVIAL_DEFAULT_CONSTRUCTOR(_TYPE_) typename __type_traits<_TYPE_>::has_trivial_default_constructor
#define __BSL_DESTROY std::_Destroy
#elif __GNUC__ >= 4
//enjoy std::tr1!
#include <tr1/type_traits>
#define __BSL_TRUE_TYPE__ std::tr1::true_type
#define __BSL_FALSE_TYPE__ std::tr1::false_type
#define __BSL_HAS_TRIVIAL_DEFAULT_CONSTRUCTOR(_TYPE_) typename std::tr1::has_trivial_constructor<_TYPE_>
#define __BSL_DESTROY std::_Destroy
#else //ʹص
#ifndef BSL_CONFIG_NO_TYPE_TRAITS_WARNIBSL
#warning type-traits support not implemented for the current g++ version. Default implementation is used. Add related configuration to bsl_wrappers_config.h to add type-traits support. Disable this wanring by defining marco BSL_CONFIG_NO_TYPE_TRAITS_WARNIBSL.
#endif //BSL_CONFIG_NO_TYPE_TRAITS_WARNIBSL
namespace bsl{
typedef struct __bsl_true_type__{} __bsl_true_type__;
typedef struct __bsl_false_type__{} __bsl_false_type__;
}
#define __BSL_TRUE_TYPE__ __bsl_true_type__
#define __BSL_FALSE_TYPE__ __bsl_false_type__
#define __BSL_HAS_TRIVIAL_DEFAULT_CONSTRUCTOR(_TYPE_) __BSL_FALSE_TYPE__
#define __BSL_DESTROY default_destroy_array
#endif // #if __GNUC__
#endif //__BSL_WRAPPERS_CONFIG_H_
/* vim: set ts=4 sw=4 sts=4 tw=100 */
K 25
svn:wc:ra_dav:version-url
V 60
/libsrc/!svn/ver/22056/tags/bsl/bsl_1-1-42-22055_PD_BL/alloc
END
bsl_alloc.h
K 25
svn:wc:ra_dav:version-url
V 72
/libsrc/!svn/ver/22056/tags/bsl/bsl_1-1-42-22055_PD_BL/alloc/bsl_alloc.h
END
bsl_sample_alloc.h
K 25
svn:wc:ra_dav:version-url
V 79
/libsrc/!svn/ver/22056/tags/bsl/bsl_1-1-42-22055_PD_BL/alloc/bsl_sample_alloc.h
END
allocator.h
K 25
svn:wc:ra_dav:version-url
V 72
/libsrc/!svn/ver/22056/tags/bsl/bsl_1-1-42-22055_PD_BL/alloc/allocator.h
END
bsl_cpsalloc.h
K 25
svn:wc:ra_dav:version-url
V 75
/libsrc/!svn/ver/22056/tags/bsl/bsl_1-1-42-22055_PD_BL/alloc/bsl_cpsalloc.h
END
BCLOUD
K 25
svn:wc:ra_dav:version-url
V 67
/libsrc/!svn/ver/22056/tags/bsl/bsl_1-1-42-22055_PD_BL/alloc/BCLOUD
END
Makefile
K 25
svn:wc:ra_dav:version-url
V 69
/libsrc/!svn/ver/22056/tags/bsl/bsl_1-1-42-22055_PD_BL/alloc/Makefile
END
此差异已折叠。
此差异已折叠。
BSL=../
OUTINC=$(BSL)/output/include/bsl/alloc
all :
rm -rf $(OUTINC)
mkdir -p $(OUTINC)
cp *.h $(OUTINC)
clean :
rm -rf $(OUTINC)
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册