⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rvstring.h

📁 h.248协议源码
💻 H
字号:
/******************************************************************************
Filename:    rvstring.h
Description: copy-on-write string class declarations
*******************************************************************************
                Copyright (c) 2000 RADVision Inc.
*******************************************************************************
NOTICE:
This document contains information that is proprietary to RADVision LTD.
No part of this publication may be reproduced in any form whatsoever 
without written prior approval by RADVision LTD..

RADVision LTD. reserves the right to revise this publication and make 
changes without obligation to notify any person of such revisions or 
changes.
******************************************************************************/

#ifndef RV_STRING_H
#define RV_STRING_H

#include <stddef.h>
#include "rvtypes.h"
#include "rvalloc.h"
#include "rvvector.h"

#if defined(__cplusplus)
extern "C" {
#endif

typedef struct
{
	size_t length, maxlen, refs;
	RvAlloc *alloc;
} RvStringHeader;

typedef char *RvString;

/* Private */
#define rvStringGetHeader(x) ( (RvStringHeader *)(*(x) - sizeof(RvStringHeader)) )

/*RvString* rvStringConstruct(RvString *x, const char *str, RvAlloc *a);*/
#define rvStringConstruct(x,s,a) rvStringConstructN(x,s,strlen(s),a)

#define rvStringConstructA rvStringConstruct
RvString* rvStringConstructN(RvString *x, const char *str, size_t n, RvAlloc *a);
RvString* rvStringConstructAndReserve(RvString *x, size_t n, RvAlloc *allocator);
RvString* rvStringConstructCopy(RvString *d, const RvString *s, RvAlloc *a);
void rvStringDestruct(RvString *x);
RvString* rvStringCopy(RvString *d, const RvString *s);

/*size_t rvStringGetSize(const RvString *x);*/
#define rvStringGetSize(x) ( rvStringGetHeader(x)->length )

/*size_t rvStringGetCapacity(const RvString *x);*/
#define rvStringGetCapacity(x) ( rvStringGetHeader(x)->maxlen )

RvString* rvStringResize(RvString *x, size_t n);
RvString* rvStringReserve(RvString *x, size_t n);
RvString* rvStringAssign(RvString *x, const char* str);
RvString* rvStringAssignN(RvString *x, const char* str, size_t n);
RvString* rvStringMakeUppercase(RvString *x);
RvString* rvStringMakeLowercase(RvString *x);
RvString* rvStringConcatenateN(RvString *x, const char* str, size_t n);
/*RvString* rvStringConcatenate(RvString *x, const char *str);*/
#define rvStringConcatenate(x,s) rvStringConcatenateN(x,s,strlen(s))
/*RvString* rvStringConcatenateString(RvString *x, const RvString *s);*/
#define rvStringConcatenateString(x,s)  rvStringConcatenateN(x, rvStringGetData(s), rvStringGetSize(s)) 
RvString* rvStringPushBack(RvString *x, char c);
/*const char* rvStringGetData(const RvString *x);*/
#define rvStringGetData(x) ( (const char*)*(x) )
RvBool rvStringEqual(const RvString *a, const RvString *b);
RvBool rvStringEqualIgnoreCase(const RvString *a, const RvString *b);
RvBool rvStringLess(const RvString *a, const RvString *b);
RvBool rvStringLessIgnoreCase(const RvString *a, const RvString *b);
RvAlloc *rvStringGetAllocator(const RvString *x);
#define rvStringIsValid(x) (*(x) != NULL)

#define RvStringConstructCopy rvStringConstructCopy 
#define RvStringDestruct rvStringDestruct
#define RvStringCopy rvStringCopy
#define RvStringEqual rvStringEqual
#define RvStringLess rvStringLess
#define RvStringGetAllocator rvStringGetAllocator

rvDeclareVector(RvString)
typedef RvVector(RvString) RvStringList;
#define rvStringListConstructA rvVectorConstruct(RvString)
#define rvStringListConstructCopy rvVectorConstructCopy(RvString)
#define rvStringListDestruct rvVectorDestruct(RvString)
#define rvStringListCopy rvVectorCopy(RvString)
#define rvStringListEqual rvVectorEqual(RvString)
void rvStringListAdd(RvStringList *x, const char *str);
void rvStringListAddN(RvStringList *x, const char *str, size_t n);
#define rvStringListAddString rvVectorPushBack(RvString)
#define rvStringListAddRvString rvStringListAddString
#define rvStringListClear rvVectorClear(RvString)
#define rvStringListGetSize rvVectorSize
const char* rvStringListGetElem(const RvStringList *x, size_t idx);

/* Use to build a vector,map,list,etc when case insensitive comparison is desired*/
typedef RvString RvIString;
#define RvIStringConstructCopy	rvStringConstructCopy
#define RvIStringDestruct		rvStringDestruct
#define RvIStringLess			rvStringLessIgnoreCase
#define RvIStringEqual			rvStringEqualIgnoreCase

#if defined(__cplusplus)
}
#endif

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -