blob: 61e88f2be91aeaae7c71c06956a3bcbbab0aba2c [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
#ifndef _HAWQ_RESOURCEENFORCER_SIMPSTRING_H
#define _HAWQ_RESOURCEENFORCER_SIMPSTRING_H
/*
* GSimpArray (Generic SimpArray) definitions and declarations
*/
struct GSimpArray
{
int32_t Len;
char *Array;
};
typedef struct GSimpArray GSimpArray;
typedef struct GSimpArray *GSimpArrayPtr;
/* create simple array */
GSimpArrayPtr createGSimpArray(void);
/* initialize simple array */
void initGSimpArray(GSimpArrayPtr sap);
/* set value for simple array */
int setGSimpArrayWithContent(GSimpArrayPtr sap, char *content, int length);
void setGSimpArrayWithRef(GSimpArrayPtr sap, char *content, int length);
/* free simple array with allocated content */
void freeGSimpArrayContent(GSimpArrayPtr sap);
/* simple array comparison function */
int GSimpArrayComp(GSimpArrayPtr sap1, GSimpArrayPtr sap2);
/*
* GSimpString (Generic SimpString) definitions and declarations
*/
struct GSimpString
{
int32_t Len;
char *Str;
};
typedef struct GSimpString GSimpString;
typedef struct GSimpString *GSimpStringPtr;
#define UTIL_SIMPSTR_NO_MATCH 1
GSimpStringPtr createGSimpString(void);
/* initialize string. */
void initGSimpString(GSimpStringPtr ssp);
void initGSimpStringWithContent(GSimpStringPtr ssp, char *content, int length);
void initGSimpStringFilled(GSimpStringPtr ssp, uint8_t val, int length);
/* set string value. */
int setGSimpStringWithContent(GSimpStringPtr ssp, char *content, int length);
int setGSimpStringFilled( GSimpStringPtr ssp, uint8_t val, int length);
/* free simple string with allocated content. */
void freeGSimpStringContent(GSimpStringPtr ssp);
/* Reference one existing buffer without memory allocation. */
void setGSimpStringWithRef(GSimpStringPtr str, char *content, int length);
void clearGSimpStringRef(GSimpStringPtr str);
/* string operations. */
int GSimpStringFind(GSimpStringPtr ssp, char *target);
int GSimpStringComp(GSimpStringPtr ssp, char *target);
int GSimpStringCaseComp(GSimpStringPtr ssp, char *target);
void GSimpStringCopy(GSimpStringPtr ssp, GSimpString *source);
void GSimpStringFill(GSimpStringPtr ssp, int start, int length, uint8_t val);
bool GSimpStringEmpty(GSimpStringPtr ssp);
int GSimpStringLocateChar(GSimpStringPtr ssp, char target, int *location);
void GSimpStringReplaceChar(GSimpStringPtr ssp, char oldchar, char newchar);
int GSimpStringReplaceFirst(GSimpStringPtr ssp, char *oldstr, char *newstr);
/* string to the other number values. */
int GSimpStringToInt8(GSimpStringPtr ssp, int8_t *value);
int GSimpStringToInt32(GSimpStringPtr ssp, int32_t *value);
int GSimpStringToUInt32(GSimpStringPtr ssp, uint32_t *value);
int GSimpStringToInt64(GSimpStringPtr ssp, int64_t *value);
int GSimpStringToDouble(GSimpStringPtr ssp, double *value);
int GSimpStringToBool(GSimpStringPtr ssp, bool *value);
/* convert different types of value into string. */
int GSimpStringSetOid(GSimpStringPtr ssp, Oid value);
int GSimpStringSetName(GSimpStringPtr ssp, Name value);
int GSimpStringSetBool(GSimpStringPtr ssp, bool value);
int GSimpStringSetInt8(GSimpStringPtr ssp, int8_t value);
int GSimpStringSetInt32(GSimpStringPtr ssp, int32_t value);
/* int GSimpStringSetText(GSimpStringPtr ssp, text *value); */
int GSimpStringSetFloat(GSimpStringPtr ssp, float value);
int GSimpStringToOid(GSimpStringPtr ssp, Oid *value);
bool GSimpStringIsPercentage(GSimpStringPtr ssp);
int GSimpStringToPercentage(GSimpStringPtr ssp, int8_t *value);
/* <integer>mb, <integer>gb, <integer>tb */
int GSimpStringToStorageSizeMB(GSimpStringPtr ssp, int32_t *value);
int GSimpStringToMapIndexInt8(GSimpStringPtr ssp,
char *strlist,
int listsize,
int valuewidth,
int8_t *result);
int GSimpStringStartWith(GSimpStringPtr ssp, char *prefix);
/* Copy substring [start,end) to target simple string and return the length. */
int GSimpStringSubstring(GSimpStringPtr ssp,
int start,
int end,
GSimpStringPtr target);
int GSimpStringTokens(GSimpStringPtr ssp,
char split,
GSimpStringPtr *tokens,
int *tokensize);
#define setGSimpStringNoLen(ssp, content) \
setGSimpStringWithContent((ssp), (content), strlen((content)))
#define setGSimpStringRefNoLen(ssp, content) \
setGSimpStringWithRef((ssp),(content),strlen((content)))
/* Serialization and de-serialization */
/*-----------------------------------------------------------------------------
*
* Format: ( 8-byte aligned memory block. )
* ---------------------------------------------
* | Length(int32) | string |
* +---------------------- +
* | |
* ---------------------------------------------
*
*---------------------------------------------------------------------------*/
int deserializeToGSimpString(GSimpStringPtr ssp, char *content, int *value);
int serializeFromGSimpString(GSimpStringPtr ssp, char *content, int *value);
int serializeSizeGSimpString(GSimpStringPtr ssp, int *value);
#endif /* _HAWQ_RESOURCEENFORCER_SIMPSTRING_H */