📄 rvstring.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 + -