aboutsummaryrefslogtreecommitdiffhomepage
path: root/third_party/protobuf/3.2.0/ruby/src/main/java/com/google/protobuf/jruby/Utils.java
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/protobuf/3.2.0/ruby/src/main/java/com/google/protobuf/jruby/Utils.java')
-rw-r--r--third_party/protobuf/3.2.0/ruby/src/main/java/com/google/protobuf/jruby/Utils.java303
1 files changed, 0 insertions, 303 deletions
diff --git a/third_party/protobuf/3.2.0/ruby/src/main/java/com/google/protobuf/jruby/Utils.java b/third_party/protobuf/3.2.0/ruby/src/main/java/com/google/protobuf/jruby/Utils.java
deleted file mode 100644
index f199feb962..0000000000
--- a/third_party/protobuf/3.2.0/ruby/src/main/java/com/google/protobuf/jruby/Utils.java
+++ /dev/null
@@ -1,303 +0,0 @@
-/*
- * Protocol Buffers - Google's data interchange format
- * Copyright 2014 Google Inc. All rights reserved.
- * https://developers.google.com/protocol-buffers/
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-package com.google.protobuf.jruby;
-
-import com.google.protobuf.ByteString;
-import com.google.protobuf.DescriptorProtos;
-import com.google.protobuf.Descriptors;
-import org.jcodings.Encoding;
-import org.jcodings.specific.ASCIIEncoding;
-import org.jcodings.specific.USASCIIEncoding;
-import org.jcodings.specific.UTF8Encoding;
-import org.jruby.*;
-import org.jruby.runtime.Block;
-import org.jruby.runtime.ThreadContext;
-import org.jruby.runtime.builtin.IRubyObject;
-
-import java.math.BigInteger;
-
-public class Utils {
- public static Descriptors.FieldDescriptor.Type rubyToFieldType(IRubyObject typeClass) {
- return Descriptors.FieldDescriptor.Type.valueOf(typeClass.asJavaString().toUpperCase());
- }
-
- public static IRubyObject fieldTypeToRuby(ThreadContext context, Descriptors.FieldDescriptor.Type type) {
- return fieldTypeToRuby(context, type.name());
- }
-
- public static IRubyObject fieldTypeToRuby(ThreadContext context, DescriptorProtos.FieldDescriptorProto.Type type) {
- return fieldTypeToRuby(context, type.name());
- }
-
- private static IRubyObject fieldTypeToRuby(ThreadContext context, String typeName) {
-
- return context.runtime.newSymbol(typeName.replace("TYPE_", "").toLowerCase());
- }
-
- public static IRubyObject checkType(ThreadContext context, Descriptors.FieldDescriptor.Type fieldType,
- IRubyObject value, RubyModule typeClass) {
- Ruby runtime = context.runtime;
- Object val;
- switch(fieldType) {
- case INT32:
- case INT64:
- case UINT32:
- case UINT64:
- if (!isRubyNum(value)) {
- throw runtime.newTypeError("Expected number type for integral field.");
- }
- switch(fieldType) {
- case INT32:
- RubyNumeric.num2int(value);
- break;
- case INT64:
- RubyNumeric.num2long(value);
- break;
- case UINT32:
- num2uint(value);
- break;
- default:
- num2ulong(context.runtime, value);
- break;
- }
- checkIntTypePrecision(context, fieldType, value);
- break;
- case FLOAT:
- if (!isRubyNum(value))
- throw runtime.newTypeError("Expected number type for float field.");
- break;
- case DOUBLE:
- if (!isRubyNum(value))
- throw runtime.newTypeError("Expected number type for double field.");
- break;
- case BOOL:
- if (!(value instanceof RubyBoolean))
- throw runtime.newTypeError("Invalid argument for boolean field.");
- break;
- case BYTES:
- case STRING:
- value = validateStringEncoding(context, fieldType, value);
- break;
- case MESSAGE:
- if (value.getMetaClass() != typeClass) {
- throw runtime.newTypeError(value, typeClass);
- }
- break;
- case ENUM:
- if (value instanceof RubySymbol) {
- Descriptors.EnumDescriptor enumDescriptor =
- ((RubyEnumDescriptor) typeClass.getInstanceVariable(DESCRIPTOR_INSTANCE_VAR)).getDescriptor();
- val = enumDescriptor.findValueByName(value.asJavaString());
- if (val == null)
- throw runtime.newRangeError("Enum value " + value + " is not found.");
- } else if(!isRubyNum(value)) {
- throw runtime.newTypeError("Expected number or symbol type for enum field.");
- }
- break;
- default:
- break;
- }
- return value;
- }
-
- public static IRubyObject wrapPrimaryValue(ThreadContext context, Descriptors.FieldDescriptor.Type fieldType, Object value) {
- Ruby runtime = context.runtime;
- switch (fieldType) {
- case INT32:
- return runtime.newFixnum((Integer) value);
- case INT64:
- return runtime.newFixnum((Long) value);
- case UINT32:
- return runtime.newFixnum(((Integer) value) & (-1l >>> 32));
- case UINT64:
- long ret = (Long) value;
- return ret >= 0 ? runtime.newFixnum(ret) :
- RubyBignum.newBignum(runtime, UINT64_COMPLEMENTARY.add(new BigInteger(ret + "")));
- case FLOAT:
- return runtime.newFloat((Float) value);
- case DOUBLE:
- return runtime.newFloat((Double) value);
- case BOOL:
- return (Boolean) value ? runtime.getTrue() : runtime.getFalse();
- case BYTES: {
- IRubyObject wrapped = runtime.newString(((ByteString) value).toStringUtf8());
- wrapped.setFrozen(true);
- return wrapped;
- }
- case STRING: {
- IRubyObject wrapped = runtime.newString(value.toString());
- wrapped.setFrozen(true);
- return wrapped;
- }
- default:
- return runtime.getNil();
- }
- }
-
- public static int num2uint(IRubyObject value) {
- long longVal = RubyNumeric.num2long(value);
- if (longVal > UINT_MAX)
- throw value.getRuntime().newRangeError("Integer " + longVal + " too big to convert to 'unsigned int'");
- long num = longVal;
- if (num > Integer.MAX_VALUE || num < Integer.MIN_VALUE)
- // encode to UINT32
- num = (-longVal ^ (-1l >>> 32) ) + 1;
- RubyNumeric.checkInt(value, num);
- return (int) num;
- }
-
- public static long num2ulong(Ruby runtime, IRubyObject value) {
- if (value instanceof RubyFloat) {
- RubyBignum bignum = RubyBignum.newBignum(runtime, ((RubyFloat) value).getDoubleValue());
- return RubyBignum.big2ulong(bignum);
- } else if (value instanceof RubyBignum) {
- return RubyBignum.big2ulong((RubyBignum) value);
- } else {
- return RubyNumeric.num2long(value);
- }
- }
-
- public static IRubyObject validateStringEncoding(ThreadContext context, Descriptors.FieldDescriptor.Type type, IRubyObject value) {
- if (!(value instanceof RubyString))
- throw context.runtime.newTypeError("Invalid argument for string field.");
- switch(type) {
- case BYTES:
- value = ((RubyString)value).encode(context, context.runtime.evalScriptlet("Encoding::ASCII_8BIT"));
- break;
- case STRING:
- value = ((RubyString)value).encode(context, context.runtime.evalScriptlet("Encoding::UTF_8"));
- break;
- default:
- break;
- }
- value.setFrozen(true);
- return value;
- }
-
- public static void checkNameAvailability(ThreadContext context, String name) {
- if (context.runtime.getObject().getConstantAt(name) != null)
- throw context.runtime.newNameError(name + " is already defined", name);
- }
-
- /**
- * Replace invalid "." in descriptor with __DOT__
- * @param name
- * @return
- */
- public static String escapeIdentifier(String name) {
- return name.replace(".", BADNAME_REPLACEMENT);
- }
-
- /**
- * Replace __DOT__ in descriptor name with "."
- * @param name
- * @return
- */
- public static String unescapeIdentifier(String name) {
- return name.replace(BADNAME_REPLACEMENT, ".");
- }
-
- public static boolean isMapEntry(Descriptors.FieldDescriptor fieldDescriptor) {
- return fieldDescriptor.getType() == Descriptors.FieldDescriptor.Type.MESSAGE &&
- fieldDescriptor.isRepeated() &&
- fieldDescriptor.getMessageType().getOptions().getMapEntry();
- }
-
- public static RubyFieldDescriptor msgdefCreateField(ThreadContext context, String label, IRubyObject name,
- IRubyObject type, IRubyObject number, IRubyObject typeClass, RubyClass cFieldDescriptor) {
- Ruby runtime = context.runtime;
- RubyFieldDescriptor fieldDef = (RubyFieldDescriptor) cFieldDescriptor.newInstance(context, Block.NULL_BLOCK);
- fieldDef.setLabel(context, runtime.newString(label));
- fieldDef.setName(context, name);
- fieldDef.setType(context, type);
- fieldDef.setNumber(context, number);
-
- if (!typeClass.isNil()) {
- if (!(typeClass instanceof RubyString)) {
- throw runtime.newArgumentError("expected string for type class");
- }
- fieldDef.setSubmsgName(context, typeClass);
- }
- return fieldDef;
- }
-
- protected static void checkIntTypePrecision(ThreadContext context, Descriptors.FieldDescriptor.Type type, IRubyObject value) {
- if (value instanceof RubyFloat) {
- double doubleVal = RubyNumeric.num2dbl(value);
- if (Math.floor(doubleVal) != doubleVal) {
- throw context.runtime.newRangeError("Non-integral floating point value assigned to integer field.");
- }
- }
- if (type == Descriptors.FieldDescriptor.Type.UINT32 || type == Descriptors.FieldDescriptor.Type.UINT64) {
- if (RubyNumeric.num2dbl(value) < 0) {
- throw context.runtime.newRangeError("Assigning negative value to unsigned integer field.");
- }
- }
- }
-
- protected static boolean isRubyNum(Object value) {
- return value instanceof RubyFixnum || value instanceof RubyFloat || value instanceof RubyBignum;
- }
-
- protected static void validateTypeClass(ThreadContext context, Descriptors.FieldDescriptor.Type type, IRubyObject value) {
- Ruby runtime = context.runtime;
- if (!(value instanceof RubyModule)) {
- throw runtime.newArgumentError("TypeClass has incorrect type");
- }
- RubyModule klass = (RubyModule) value;
- IRubyObject descriptor = klass.getInstanceVariable(DESCRIPTOR_INSTANCE_VAR);
- if (descriptor.isNil()) {
- throw runtime.newArgumentError("Type class has no descriptor. Please pass a " +
- "class or enum as returned by the DescriptorPool.");
- }
- if (type == Descriptors.FieldDescriptor.Type.MESSAGE) {
- if (! (descriptor instanceof RubyDescriptor)) {
- throw runtime.newArgumentError("Descriptor has an incorrect type");
- }
- } else if (type == Descriptors.FieldDescriptor.Type.ENUM) {
- if (! (descriptor instanceof RubyEnumDescriptor)) {
- throw runtime.newArgumentError("Descriptor has an incorrect type");
- }
- }
- }
-
- public static String BADNAME_REPLACEMENT = "__DOT__";
-
- public static String DESCRIPTOR_INSTANCE_VAR = "@descriptor";
-
- public static String EQUAL_SIGN = "=";
-
- private static BigInteger UINT64_COMPLEMENTARY = new BigInteger("18446744073709551616"); //Math.pow(2, 64)
-
- private static long UINT_MAX = 0xffffffffl;
-}