/** * Copyright 2010 Google Inc. * * Licensed 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. * */ package org.waveprotocol.wave.communication.json; /** * Helper methods used to convert to and from a Long represented as a pair of * (high, low) Integers, since JSON doesn't handle Longs very well. * */ public class JsonLongHelper { private JsonLongHelper() {} /** * The index in the array for the lower 4 bytes of the long */ public static int LOW_WORD_INDEX = 0; /** * The index in the array for the higher 4 bytes of the long */ public static int HIGH_WORD_INDEX = 1; /** * @param value * @return the lower word of a long value. */ public static int getLowWord(long value) { return (int)(value & 0xFFFFFFFFL); } /** * @param value * @return the lower word of a long value. */ public static int getHighWord(long value) { return (int)(value >> 32); } /** * Combine the lower word and the higher word into a long * @param highWord * @param lowWord * @return the long of the 2 word combined. */ public static long toLong(int highWord, int lowWord) { long value = lowWord; // We are avoiding the long shift and the bitwise in favor of the branch because // in GWT compiled code, shift and or is really expensive (see // @com.google.gwt.lang.LongLib) if (!((highWord == 0 && lowWord > 0) || (highWord == -1 && lowWord < 0))) { value &= 0xFFFFFFFFL; value |= ((long) highWord) << 32; } return value; } }