Added repeated field handling to PbRead* natives. Deprecate PbReadRepeated* (bug 5633, r=asherkin).
This commit is contained in:
		
							parent
							
								
									ca469a218a
								
							
						
					
					
						commit
						7e26691b99
					
				| @ -69,9 +69,21 @@ static cell_t smn_PbReadInt(IPluginContext *pCtx, const cell_t *params) | ||||
| 	GET_FIELD_NAME_OR_ERR(); | ||||
| 
 | ||||
| 	int ret; | ||||
| 	if (!msg->GetInt32OrUnsigned(strField, &ret)) | ||||
| 
 | ||||
| 	int index = params[0] >= 3 ? params[3] : -1; | ||||
| 	if (index < 0) | ||||
| 	{ | ||||
| 		return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str()); | ||||
| 		if (!msg->GetInt32OrUnsigned(strField, &ret)) | ||||
| 		{ | ||||
| 			return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str()); | ||||
| 		} | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		if (!msg->GetRepeatedInt32OrUnsigned(strField, index, &ret)) | ||||
| 		{ | ||||
| 			return pCtx->ThrowNativeError("Invalid field \"%s\"[%d] for message \"%s\"", strField, index, msg->GetProtobufMessage()->GetTypeName().c_str()); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	return ret; | ||||
| @ -83,9 +95,21 @@ static cell_t smn_PbReadFloat(IPluginContext *pCtx, const cell_t *params) | ||||
| 	GET_FIELD_NAME_OR_ERR(); | ||||
| 
 | ||||
| 	float ret; | ||||
| 	if (!msg->GetFloatOrDouble(strField, &ret)) | ||||
| 
 | ||||
| 	int index = params[0] >= 3 ? params[3] : -1; | ||||
| 	if (index < 0) | ||||
| 	{ | ||||
| 		return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str()); | ||||
| 		if (!msg->GetFloatOrDouble(strField, &ret)) | ||||
| 		{ | ||||
| 			return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str()); | ||||
| 		} | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		if (!msg->GetRepeatedFloatOrDouble(strField, index, &ret)) | ||||
| 		{ | ||||
| 			return pCtx->ThrowNativeError("Invalid field \"%s\"[%d] for message \"%s\"", strField, index, msg->GetProtobufMessage()->GetTypeName().c_str()); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	return sp_ftoc(ret); | ||||
| @ -97,9 +121,21 @@ static cell_t smn_PbReadBool(IPluginContext *pCtx, const cell_t *params) | ||||
| 	GET_FIELD_NAME_OR_ERR(); | ||||
| 
 | ||||
| 	bool ret; | ||||
| 	if (!msg->GetBool(strField, &ret)) | ||||
| 
 | ||||
| 	int index = params[0] >= 3 ? params[3] : -1; | ||||
| 	if (index < 0) | ||||
| 	{ | ||||
| 		return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str()); | ||||
| 		if (!msg->GetBool(strField, &ret)) | ||||
| 		{ | ||||
| 			return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str()); | ||||
| 		} | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		if (!msg->GetRepeatedBool(strField, index, &ret)) | ||||
| 		{ | ||||
| 			return pCtx->ThrowNativeError("Invalid field \"%s\"[%d] for message \"%s\"", strField, index, msg->GetProtobufMessage()->GetTypeName().c_str()); | ||||
| 		}  | ||||
| 	} | ||||
| 
 | ||||
| 	return ret ? 1 : 0; | ||||
| @ -113,9 +149,21 @@ static cell_t smn_PbReadString(IPluginContext *pCtx, const cell_t *params) | ||||
| 	char *buf; | ||||
| 	pCtx->LocalToPhysAddr(params[3], (cell_t **)&buf); | ||||
| 
 | ||||
| 	if (!msg->GetString(strField, buf, params[4])) | ||||
| 	int index = params[0] >= 5 ? params[5] : -1; | ||||
| 
 | ||||
| 	if (index < 0) | ||||
| 	{ | ||||
| 		return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str()); | ||||
| 		if (!msg->GetString(strField, buf, params[4])) | ||||
| 		{ | ||||
| 			return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str()); | ||||
| 		} | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		if (!msg->GetRepeatedString(strField, index, buf, params[4])) | ||||
| 		{ | ||||
| 			return pCtx->ThrowNativeError("Invalid field \"%s\"[%d] for message \"%s\"", strField, index, msg->GetProtobufMessage()->GetTypeName().c_str()); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	return 1; | ||||
| @ -130,9 +178,20 @@ static cell_t smn_PbReadColor(IPluginContext *pCtx, const cell_t *params) | ||||
| 	pCtx->LocalToPhysAddr(params[3], &out); | ||||
| 
 | ||||
| 	Color clr; | ||||
| 	if (!msg->GetColor(strField, &clr)) | ||||
| 	int index = params[0] >= 4 ? params[4] : -1; | ||||
| 	if (index < 0) | ||||
| 	{ | ||||
| 		return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str()); | ||||
| 		if (!msg->GetColor(strField, &clr)) | ||||
| 		{ | ||||
| 			return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str()); | ||||
| 		} | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		if (!msg->GetRepeatedColor(strField, index, &clr)) | ||||
| 		{ | ||||
| 			return pCtx->ThrowNativeError("Invalid field \"%s\"[%d] for message \"%s\"", strField, index, msg->GetProtobufMessage()->GetTypeName().c_str()); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	out[0] = clr.r(); | ||||
| @ -152,9 +211,20 @@ static cell_t smn_PbReadAngle(IPluginContext *pCtx, const cell_t *params) | ||||
| 	pCtx->LocalToPhysAddr(params[3], &out); | ||||
| 
 | ||||
| 	QAngle ang; | ||||
| 	if (!msg->GetQAngle(strField, &ang)) | ||||
| 	int index = params[0] >= 4 ? params[4] : -1; | ||||
| 	if (index < 0) | ||||
| 	{ | ||||
| 		return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str()); | ||||
| 		if (!msg->GetQAngle(strField, &ang)) | ||||
| 		{ | ||||
| 			return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str()); | ||||
| 		} | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		if (!msg->GetRepeatedQAngle(strField, index, &ang)) | ||||
| 		{ | ||||
| 		return pCtx->ThrowNativeError("Invalid field \"%s\"[%d] for message \"%s\"", strField, index, msg->GetProtobufMessage()->GetTypeName().c_str()); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	out[0] = sp_ftoc(ang.x); | ||||
| @ -173,9 +243,20 @@ static cell_t smn_PbReadVector(IPluginContext *pCtx, const cell_t *params) | ||||
| 	pCtx->LocalToPhysAddr(params[3], &out); | ||||
| 
 | ||||
| 	Vector vec; | ||||
| 	if (!msg->GetVector(strField, &vec)) | ||||
| 	int index = params[0] >= 4 ? params[4] : -1; | ||||
| 	if (index < 0) | ||||
| 	{ | ||||
| 		return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str()); | ||||
| 		if (!msg->GetVector(strField, &vec)) | ||||
| 		{ | ||||
| 			return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str()); | ||||
| 		} | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		if (!msg->GetRepeatedVector(strField, index, &vec)) | ||||
| 		{ | ||||
| 			return pCtx->ThrowNativeError("Invalid field \"%s\"[%d] for message \"%s\"", strField, index, msg->GetProtobufMessage()->GetTypeName().c_str()); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	out[0] = sp_ftoc(vec.x); | ||||
| @ -194,9 +275,20 @@ static cell_t smn_PbReadVector2D(IPluginContext *pCtx, const cell_t *params) | ||||
| 	pCtx->LocalToPhysAddr(params[3], &out); | ||||
| 
 | ||||
| 	Vector2D vec; | ||||
| 	if (!msg->GetVector2D(strField, &vec)) | ||||
| 	int index = params[0] >= 4 ? params[4] : -1; | ||||
| 	if (index < 0) | ||||
| 	{ | ||||
| 		return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str()); | ||||
| 		if (!msg->GetVector2D(strField, &vec)) | ||||
| 		{ | ||||
| 			return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str()); | ||||
| 		} | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		if (!msg->GetRepeatedVector2D(strField, index, &vec)) | ||||
| 		{ | ||||
| 			return pCtx->ThrowNativeError("Invalid field \"%s\"[%d] for message \"%s\"", strField, index, msg->GetProtobufMessage()->GetTypeName().c_str()); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	out[0] = sp_ftoc(vec.x); | ||||
|  | ||||
| @ -35,35 +35,40 @@ | ||||
| #endif
 | ||||
| #define _protobuf_included
 | ||||
| 
 | ||||
| #define PB_FIELD_NOT_REPEATED -1
 | ||||
| 
 | ||||
| /** | ||||
|  * Reads an int32, uint32, sint32, fixed32, or sfixed32 from a protobuf message. | ||||
|  * | ||||
|  * @param pb			protobuf handle. | ||||
|  * @param field			Field name. | ||||
|  * @param index			Index into repeated field. | ||||
|  * @return				Integer value read. | ||||
|  * @error				Invalid or incorrect Handle, non-existant field, or incorrect field type. | ||||
|  */ | ||||
| native PbReadInt(Handle:pb, const String:field[]); | ||||
| native PbReadInt(Handle:pb, const String:field[], index=PB_FIELD_NOT_REPEATED); | ||||
| 
 | ||||
| /** | ||||
|  * Reads a float or downcasted double from a protobuf message. | ||||
|  * | ||||
|  * @param pb			protobuf handle. | ||||
|  * @param field			Field name. | ||||
|  * @param index			Index into repeated field. | ||||
|  * @return				Float value read. | ||||
|  * @error				Invalid or incorrect Handle, non-existant field, or incorrect field type. | ||||
|  */ | ||||
| native Float:PbReadFloat(Handle:pb, const String:field[]); | ||||
| native Float:PbReadFloat(Handle:pb, const String:field[], index=PB_FIELD_NOT_REPEATED); | ||||
| 
 | ||||
| /** | ||||
|  * Reads a bool from a protobuf message. | ||||
|  * | ||||
|  * @param pb			protobuf handle. | ||||
|  * @param field			Field name. | ||||
|  * @param index			Index into repeated field. | ||||
|  * @return				Boolean value read. | ||||
|  * @error				Invalid or incorrect Handle, non-existant field, or incorrect field type. | ||||
|  */ | ||||
| native bool:PbReadBool(Handle:pb, const String:field[]); | ||||
| native bool:PbReadBool(Handle:pb, const String:field[], index=PB_FIELD_NOT_REPEATED); | ||||
| 
 | ||||
| /** | ||||
|  * Reads a string from a protobuf message. | ||||
| @ -72,10 +77,11 @@ native bool:PbReadBool(Handle:pb, const String:field[]); | ||||
|  * @param field			Field name. | ||||
|  * @param buffer		Destination string buffer. | ||||
|  * @param maxlength		Maximum length of output string buffer. | ||||
|  * @param index			Index into repeated field. | ||||
|  * @noreturn | ||||
|  * @error				Invalid or incorrect Handle, non-existant field, or incorrect field type. | ||||
|  */ | ||||
| native PbReadString(Handle:pb, const String:field[], String:buffer[], maxlength); | ||||
| native PbReadString(Handle:pb, const String:field[], String:buffer[], maxlength, index=PB_FIELD_NOT_REPEATED); | ||||
| 
 | ||||
| /** | ||||
|  * Reads an RGBA color value from a protobuf message. | ||||
| @ -83,10 +89,11 @@ native PbReadString(Handle:pb, const String:field[], String:buffer[], maxlength) | ||||
|  * @param pb			protobuf handle. | ||||
|  * @param field			Field name. | ||||
|  * @param buffer		Destination color buffer. | ||||
|  * @param index			Index into repeated field. | ||||
|  * @noreturn | ||||
|  * @error				Invalid or incorrect Handle, non-existant field, or incorrect field type. | ||||
|  */ | ||||
| native PbReadColor(Handle:pb, const String:field[], buffer[4]); | ||||
| native PbReadColor(Handle:pb, const String:field[], buffer[4], index=PB_FIELD_NOT_REPEATED); | ||||
| 
 | ||||
| /** | ||||
|  * Reads an XYZ angle value from a protobuf message. | ||||
| @ -94,10 +101,11 @@ native PbReadColor(Handle:pb, const String:field[], buffer[4]); | ||||
|  * @param pb			protobuf handle. | ||||
|  * @param field			Field name. | ||||
|  * @param buffer		Destination angle buffer. | ||||
|  * @param index			Index into repeated field. | ||||
|  * @noreturn | ||||
|  * @error				Invalid or incorrect Handle, non-existant field, or incorrect field type. | ||||
|  */ | ||||
| native PbReadAngle(Handle:pb, const String:field[], Float:buffer[3]); | ||||
| native PbReadAngle(Handle:pb, const String:field[], Float:buffer[3], index=PB_FIELD_NOT_REPEATED); | ||||
| 
 | ||||
| /** | ||||
|  * Reads an XYZ vector value from a protobuf message. | ||||
| @ -105,10 +113,11 @@ native PbReadAngle(Handle:pb, const String:field[], Float:buffer[3]); | ||||
|  * @param pb			protobuf handle. | ||||
|  * @param field			Field name. | ||||
|  * @param buffer		Destination vector buffer. | ||||
|  * @param index			Index into repeated field. | ||||
|  * @noreturn | ||||
|  * @error				Invalid or incorrect Handle, non-existant field, or incorrect field type. | ||||
|  */ | ||||
| native PbReadVector(Handle:pb, const String:field[], Float:buffer[3]); | ||||
| native PbReadVector(Handle:pb, const String:field[], Float:buffer[3], index=PB_FIELD_NOT_REPEATED); | ||||
| 
 | ||||
| /** | ||||
|  * Reads an XY vector value from a protobuf message. | ||||
| @ -116,10 +125,11 @@ native PbReadVector(Handle:pb, const String:field[], Float:buffer[3]); | ||||
|  * @param pb			protobuf handle. | ||||
|  * @param field			Field name. | ||||
|  * @param buffer		Destination vector buffer. | ||||
|  * @param index			Index into repeated field. | ||||
|  * @noreturn | ||||
|  * @error				Invalid or incorrect Handle, non-existant field, or incorrect field type. | ||||
|  */ | ||||
| native PbReadVector2D(Handle:pb, const String:field[], Float:buffer[2]); | ||||
| native PbReadVector2D(Handle:pb, const String:field[], Float:buffer[2], index=PB_FIELD_NOT_REPEATED); | ||||
| 
 | ||||
| /** | ||||
|  * Gets the number of elements in a repeated field of a protobuf message. | ||||
| @ -140,6 +150,7 @@ native PbGetRepeatedFieldCount(Handle:pb, const String:field[]); | ||||
|  * @return				Integer value read. | ||||
|  * @error				Invalid or incorrect Handle, non-existant field, or incorrect field type. | ||||
|  */ | ||||
| #pragma deprecated use PbReadInt with index param
 | ||||
| native PbReadRepeatedInt(Handle:pb, const String:field[], index); | ||||
| 
 | ||||
| /** | ||||
| @ -151,6 +162,7 @@ native PbReadRepeatedInt(Handle:pb, const String:field[], index); | ||||
|  * @return				Float value read. | ||||
|  * @error				Invalid or incorrect Handle, non-existant field, or incorrect field type. | ||||
|  */ | ||||
| #pragma deprecated use PbReadFloat with index param
 | ||||
| native Float:PbReadRepeatedFloat(Handle:pb, const String:field[], index); | ||||
| 
 | ||||
| /** | ||||
| @ -162,6 +174,7 @@ native Float:PbReadRepeatedFloat(Handle:pb, const String:field[], index); | ||||
|  * @return				Boolean value read. | ||||
|  * @error				Invalid or incorrect Handle, non-existant field, or incorrect field type. | ||||
|  */ | ||||
| #pragma deprecated use PbReadBool with index param
 | ||||
| native bool:PbReadRepeatedBool(Handle:pb, const String:field[], index); | ||||
| 
 | ||||
| /** | ||||
| @ -175,6 +188,7 @@ native bool:PbReadRepeatedBool(Handle:pb, const String:field[], index); | ||||
|  * @noreturn | ||||
|  * @error				Invalid or incorrect Handle, non-existant field, or incorrect field type. | ||||
|  */ | ||||
| #pragma deprecated use PbReadString with index param
 | ||||
| native PbReadRepeatedString(Handle:pb, const String:field[], index, String:buffer[], size); | ||||
| 
 | ||||
| /** | ||||
| @ -187,6 +201,7 @@ native PbReadRepeatedString(Handle:pb, const String:field[], index, String:buffe | ||||
|  * @noreturn | ||||
|  * @error				Invalid or incorrect Handle, non-existant field, or incorrect field type. | ||||
|  */ | ||||
| #pragma deprecated use PbReadColor with index param
 | ||||
| native PbReadRepeatedColor(Handle:pb, const String:field[], index, buffer[4]); | ||||
| 
 | ||||
| /** | ||||
| @ -199,6 +214,7 @@ native PbReadRepeatedColor(Handle:pb, const String:field[], index, buffer[4]); | ||||
|  * @noreturn | ||||
|  * @error				Invalid or incorrect Handle, non-existant field, or incorrect field type. | ||||
|  */ | ||||
| #pragma deprecated use PbReadAngle with index param
 | ||||
| native PbReadRepeatedAngle(Handle:pb, const String:field[], index, Float:buffer[3]); | ||||
| 
 | ||||
| /** | ||||
| @ -211,6 +227,7 @@ native PbReadRepeatedAngle(Handle:pb, const String:field[], index, Float:buffer[ | ||||
|  * @noreturn | ||||
|  * @error				Invalid or incorrect Handle, non-existant field, or incorrect field type. | ||||
|  */ | ||||
| #pragma deprecated use PbReadVector with index param
 | ||||
| native PbReadRepeatedVector(Handle:pb, const String:field[], index, Float:buffer[3]); | ||||
| 
 | ||||
| /** | ||||
| @ -223,6 +240,7 @@ native PbReadRepeatedVector(Handle:pb, const String:field[], index, Float:buffer | ||||
|  * @noreturn | ||||
|  * @error				Invalid or incorrect Handle, non-existant field, or incorrect field type. | ||||
|  */ | ||||
| #pragma deprecated use PbReadVector2D with index param
 | ||||
| native PbReadRepeatedVector2D(Handle:pb, const String:field[], index, Float:buffer[2]); | ||||
| 
 | ||||
| /** | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user