aboutsummaryrefslogtreecommitdiff
path: root/R/pkg/src-native/string_hash_code.c
diff options
context:
space:
mode:
authorShivaram Venkataraman <shivaram@cs.berkeley.edu>2015-05-23 00:04:01 -0700
committerShivaram Venkataraman <shivaram@cs.berkeley.edu>2015-05-23 00:04:01 -0700
commita40bca0111de45763c3ef4270afb2185c16b8f95 (patch)
treefd7d6b8d70c25cf2b82b7b8731ff43ac3e67fe7d /R/pkg/src-native/string_hash_code.c
parent7af3818c6b2bf35bfa531ab7cc3a4a714385015e (diff)
downloadspark-a40bca0111de45763c3ef4270afb2185c16b8f95.tar.gz
spark-a40bca0111de45763c3ef4270afb2185c16b8f95.tar.bz2
spark-a40bca0111de45763c3ef4270afb2185c16b8f95.zip
[SPARK-6811] Copy SparkR lib in make-distribution.sh
This change also remove native libraries from SparkR to make sure our distribution works across platforms Tested by building on Mac, running on Amazon Linux (CentOS), Windows VM and vice-versa (built on Linux run on Mac) I will also test this with YARN soon and update this PR. Author: Shivaram Venkataraman <shivaram@cs.berkeley.edu> Closes #6373 from shivaram/sparkr-binary and squashes the following commits: ae41b5c [Shivaram Venkataraman] Remove native libraries from SparkR Also include the built SparkR package in make-distribution.sh
Diffstat (limited to 'R/pkg/src-native/string_hash_code.c')
-rw-r--r--R/pkg/src-native/string_hash_code.c49
1 files changed, 49 insertions, 0 deletions
diff --git a/R/pkg/src-native/string_hash_code.c b/R/pkg/src-native/string_hash_code.c
new file mode 100644
index 0000000000..e3274b9a0c
--- /dev/null
+++ b/R/pkg/src-native/string_hash_code.c
@@ -0,0 +1,49 @@
+/*
+ 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.
+*/
+
+/*
+ * A C function for R extension which implements the Java String hash algorithm.
+ * Refer to http://en.wikipedia.org/wiki/Java_hashCode%28%29#The_java.lang.String_hash_function
+ *
+ */
+
+#include <R.h>
+#include <Rinternals.h>
+
+/* for compatibility with R before 3.1 */
+#ifndef IS_SCALAR
+#define IS_SCALAR(x, type) (TYPEOF(x) == (type) && XLENGTH(x) == 1)
+#endif
+
+SEXP stringHashCode(SEXP string) {
+ const char* str;
+ R_xlen_t len, i;
+ int hashCode = 0;
+
+ if (!IS_SCALAR(string, STRSXP)) {
+ error("invalid input");
+ }
+
+ str = CHAR(asChar(string));
+ len = XLENGTH(asChar(string));
+
+ for (i = 0; i < len; i++) {
+ hashCode = (hashCode << 5) - hashCode + *str++;
+ }
+
+ return ScalarInteger(hashCode);
+}