void CollectionsExtension::initSet() {
  HHVM_ME(SetIterator, current);
  HHVM_ME(SetIterator, key);
  HHVM_ME(SetIterator, valid);
  HHVM_ME(SetIterator, next);
  HHVM_ME(SetIterator, rewind);

  Native::registerNativeDataInfo<SetIterator>(
    s_SetIterator.get(),
    Native::NDIFlags::NO_SWEEP
  );

#define BASE_ME(mn, impl) \
  HHVM_NAMED_ME(HH\\Set,    mn, impl); \
  HHVM_NAMED_ME(HH\\ImmSet, mn, impl);
  BASE_ME(__construct,   &BaseSet::init);
  BASE_ME(count,         &BaseSet::size);
  BASE_ME(contains,      &BaseSet::php_contains);
  BASE_ME(toArray,       &BaseSet::toArray);
  BASE_ME(toKeysArray,   &BaseSet::toKeysArray);
  BASE_ME(toValuesArray, &BaseSet::toValuesArray);
  BASE_ME(getIterator,   &BaseSet::getIterator);
  BASE_ME(firstValue,    &BaseSet::firstValue);
  BASE_ME(lastValue,     &BaseSet::lastValue);
#undef BASE_ME

#define TMPL_STATIC_ME(mn) \
  HHVM_NAMED_STATIC_ME(HH\\Set,    mn, BaseSet::mn<c_Set>); \
  HHVM_NAMED_STATIC_ME(HH\\ImmSet, mn, BaseSet::mn<c_ImmSet>);
  TMPL_STATIC_ME(fromItems);
  TMPL_STATIC_ME(fromKeysOf);
  TMPL_STATIC_ME(fromArray);
#undef TMPL_STATIC_ME

#define TMPL_ME(mn, impl, ret) \
  HHVM_NAMED_ME(HH\\Set,    mn, impl<c_##ret>); \
  HHVM_NAMED_ME(HH\\ImmSet, mn, impl<c_Imm##ret>);
  TMPL_ME(zip,       &BaseSet::php_zip,       Set);
  TMPL_ME(take,      &BaseSet::php_take,      Set);
  TMPL_ME(takeWhile, &BaseSet::php_takeWhile, Set);
  TMPL_ME(skip,      &BaseSet::php_skip,      Set);
  TMPL_ME(skipWhile, &BaseSet::php_skipWhile, Set);
  TMPL_ME(slice,     &BaseSet::php_slice,     Set);
  TMPL_ME(values,    &BaseSet::php_values,    Vector);
  TMPL_ME(concat,    &BaseSet::php_concat,    Vector);
#undef TMPL_ME

  auto const m     = &BaseSet::php_map<c_Set, false>;
  auto const mk    = &BaseSet::php_map<c_Set, true>;
  auto const immm  = &BaseSet::php_map<c_ImmSet, false>;
  auto const immmk = &BaseSet::php_map<c_ImmSet, true>;
  HHVM_NAMED_ME(HH\\Set,    map,        m);
  HHVM_NAMED_ME(HH\\Set,    mapWithKey, mk);
  HHVM_NAMED_ME(HH\\ImmSet, map,        immm);
  HHVM_NAMED_ME(HH\\ImmSet, mapWithKey, immmk);

  auto const f     = &BaseSet::php_filter<c_Set, false>;
  auto const fk    = &BaseSet::php_filter<c_Set, true>;
  auto const immf  = &BaseSet::php_filter<c_ImmSet, false>;
  auto const immfk = &BaseSet::php_filter<c_ImmSet, true>;
  HHVM_NAMED_ME(HH\\Set,    filter,        f);
  HHVM_NAMED_ME(HH\\Set,    filterWithKey, fk);
  HHVM_NAMED_ME(HH\\ImmSet, filter,        immf);
  HHVM_NAMED_ME(HH\\ImmSet, filterWithKey, immfk);

  HHVM_NAMED_ME(HH\\Set,    toVector,    materialize<c_Vector>);
  HHVM_NAMED_ME(HH\\Set,    toImmVector, materialize<c_ImmVector>);
  HHVM_NAMED_ME(HH\\Set,    toMap,       materialize<c_Map>);
  HHVM_NAMED_ME(HH\\Set,    toImmMap,    materialize<c_ImmMap>);
  HHVM_NAMED_ME(HH\\ImmSet, toVector,    materialize<c_Vector>);
  HHVM_NAMED_ME(HH\\ImmSet, toImmVector, materialize<c_ImmVector>);
  HHVM_NAMED_ME(HH\\ImmSet, toMap,       materialize<c_Map>);
  HHVM_NAMED_ME(HH\\ImmSet, toImmMap,    materialize<c_ImmMap>);
  HHVM_NAMED_ME(HH\\ImmSet, toSet,       materialize<c_Set>);

  HHVM_NAMED_ME(HH\\Set, add,            &c_Set::php_add);
  HHVM_NAMED_ME(HH\\Set, addAll,         &c_Set::php_addAll);
  HHVM_NAMED_ME(HH\\Set, addAllKeysOf,   &c_Set::php_addAllKeysOf);
  HHVM_NAMED_ME(HH\\Set, clear,          &c_Set::php_clear);
  HHVM_NAMED_ME(HH\\Set, remove,         &c_Set::php_remove);
  HHVM_NAMED_ME(HH\\Set, removeAll,      &c_Set::php_removeAll);
  HHVM_NAMED_ME(HH\\Set, reserve,        &c_Set::php_reserve);
  HHVM_NAMED_ME(HH\\Set, retain,         &c_Set::php_retain<false>);
  HHVM_NAMED_ME(HH\\Set, retainWithKey,  &c_Set::php_retain<true>);
  HHVM_NAMED_ME(HH\\Set, toImmSet,       &c_Set::getImmutableCopy);

  loadSystemlib("collections-set");

  c_Set::s_cls = Unit::lookupClass(s_HH_Set.get());
  assertx(c_Set::s_cls);
  finishClass<c_Set>();

  c_ImmSet::s_cls = Unit::lookupClass(s_HH_ImmSet.get());
  assertx(c_ImmSet::s_cls);
  finishClass<c_ImmSet>();
}
Beispiel #2
0
  void moduleInit() override {
    HHVM_ME(MCRouter, __construct);

    HHVM_NAMED_ME(MCRouter, get,  mcr_str<mc_op_get>);
    HHVM_NAMED_ME(MCRouter, gets, mcr_str<mc_op_gets>);

    HHVM_NAMED_ME(MCRouter, add, mcr_set<mc_op_add>);
    HHVM_NAMED_ME(MCRouter, set, mcr_set<mc_op_set>);
    HHVM_NAMED_ME(MCRouter, replace, mcr_set<mc_op_replace>);
    HHVM_NAMED_ME(MCRouter, prepend, mcr_aprepend<mc_op_prepend>);
    HHVM_NAMED_ME(MCRouter, append, mcr_aprepend<mc_op_append>);

    HHVM_NAMED_ME(MCRouter, incr, mcr_str_delta<mc_op_incr>);
    HHVM_NAMED_ME(MCRouter, decr, mcr_str_delta<mc_op_decr>);

    HHVM_NAMED_ME(MCRouter, del, mcr_str<mc_op_delete>);
    HHVM_NAMED_ME(MCRouter, flushAll, mcr_int<mc_op_flushall>);

    HHVM_NAMED_ME(MCRouter, version, mcr_void<mc_op_version>);

    HHVM_ME(MCRouter, cas);

    Native::registerNativeDataInfo<MCRouter>(s_MCRouter.get());

    HHVM_STATIC_ME(MCRouter, getOpName);
    HHVM_STATIC_ME(MCRouter, getResultName);

    std::string opname("mc_op_");
    for (int i = 0; i < mc_nops; ++i) {
      std::string name;
      name = opname + mc_op_to_string((mc_op_t)i);
      // mcrouter defines op names as foo-bar,
      // but PHP wants constants like foo_bar
      for (int j = opname.size(); j < name.size(); ++j) {
        if (name[j] == '-') {
          name[j] = '_';
        }
      }
      Native::registerClassConstant<KindOfInt64>(
        s_MCRouter.get(),
        makeStaticString(name),
        i);
    }
    for (int i = 0; i < mc_nres; ++i) {
      Native::registerClassConstant<KindOfInt64>(
        s_MCRouter.get(),
        makeStaticString(mc_res_to_string((mc_res_t)i)),
        i);
    }

    loadSystemlib();
  }
Beispiel #3
0
void CollectionsExtension::initMap() {
  HHVM_ME(MapIterator, current);
  HHVM_ME(MapIterator, key);
  HHVM_ME(MapIterator, valid);
  HHVM_ME(MapIterator, next);
  HHVM_ME(MapIterator, rewind);

  Native::registerNativeDataInfo<MapIterator>(
    s_MapIterator.get(),
    Native::NDIFlags::NO_SWEEP
  );

  // BaseMap common

#define BASE_ME(mn, impl) \
  HHVM_NAMED_ME(HH\\Map,    mn, impl); \
  HHVM_NAMED_ME(HH\\ImmMap, mn, impl);
  BASE_ME(__construct,   &BaseMap::init);
  BASE_ME(count,         &BaseMap::size);
  BASE_ME(toArray,       &BaseMap::toArray);
  BASE_ME(toKeysArray,   &BaseMap::toKeysArray);
  BASE_ME(toValuesArray, &BaseMap::toValuesArray);
  BASE_ME(firstKey,      &BaseMap::firstKey);
  BASE_ME(firstValue,    &BaseMap::firstValue);
  BASE_ME(lastKey,       &BaseMap::lastKey);
  BASE_ME(lastValue,     &BaseMap::lastValue);
  BASE_ME(at,            &BaseMap::php_at);
  BASE_ME(get,           &BaseMap::php_get);

  BASE_ME(containsKey,   &BaseMap::php_containsKey);
  BASE_ME(contains,      &BaseMap::php_containsKey);
  BASE_ME(getIterator,   &BaseMap::getIterator);

#undef BASE_ME

  auto const m     = &BaseMap::php_map<c_Map,    false>;
  auto const mk    = &BaseMap::php_map<c_Map,    true>;
  auto const immm  = &BaseMap::php_map<c_ImmMap, false>;
  auto const immmk = &BaseMap::php_map<c_ImmMap, true>;
  HHVM_NAMED_ME(HH\\Map,    map,        m);
  HHVM_NAMED_ME(HH\\Map,    mapWithKey, mk);
  HHVM_NAMED_ME(HH\\ImmMap, map,        immm);
  HHVM_NAMED_ME(HH\\ImmMap, mapWithKey, immmk);

  auto const f     = &BaseMap::php_filter<c_Map,    false>;
  auto const fk    = &BaseMap::php_filter<c_Map,    true>;
  auto const immf  = &BaseMap::php_filter<c_ImmMap, false>;
  auto const immfk = &BaseMap::php_filter<c_ImmMap, true>;
  HHVM_NAMED_ME(HH\\Map,    filter,        f);
  HHVM_NAMED_ME(HH\\Map,    filterWithKey, fk);
  HHVM_NAMED_ME(HH\\ImmMap, filter,        immf);
  HHVM_NAMED_ME(HH\\ImmMap, filterWithKey, immfk);

#define TMPL_ME(mn, col) \
  HHVM_NAMED_ME(HH\\Map,    mn, &BaseMap::php_##mn<c_##col>); \
  HHVM_NAMED_ME(HH\\ImmMap, mn, &BaseMap::php_##mn<c_Imm##col>);
  TMPL_ME(differenceByKey, Map);
  TMPL_ME(slice,           Map);
  TMPL_ME(skip,            Map);
  TMPL_ME(skipWhile,       Map);
  TMPL_ME(take,            Map);
  TMPL_ME(takeWhile,       Map);
  TMPL_ME(zip,             Map);
  TMPL_ME(keys,            Vector);
  TMPL_ME(values,          Vector);
  TMPL_ME(concat,          Vector);
#undef TMPL_ME

  HHVM_NAMED_ME(HH\\Map,    toVector,    materialize<c_Vector>);
  HHVM_NAMED_ME(HH\\Map,    toImmVector, materialize<c_ImmVector>);
  HHVM_NAMED_ME(HH\\Map,    toSet,       materialize<c_Set>);
  HHVM_NAMED_ME(HH\\Map,    toImmSet,    materialize<c_ImmSet>);
  HHVM_NAMED_ME(HH\\ImmMap, toVector,    materialize<c_Vector>);
  HHVM_NAMED_ME(HH\\ImmMap, toImmVector, materialize<c_ImmVector>);
  HHVM_NAMED_ME(HH\\ImmMap, toSet,       materialize<c_Set>);
  HHVM_NAMED_ME(HH\\ImmMap, toImmSet,    materialize<c_ImmSet>);
  HHVM_NAMED_ME(HH\\ImmMap, toMap,       materialize<c_Map>);

  HHVM_NAMED_STATIC_ME(HH\\Map,    fromItems, BaseMap::FromItems<c_Map>);
  HHVM_NAMED_STATIC_ME(HH\\Map,    fromArray, BaseMap::FromArray<c_Map>);
  HHVM_NAMED_STATIC_ME(HH\\ImmMap, fromItems, BaseMap::FromItems<c_ImmMap>);
  HHVM_NAMED_STATIC_ME(HH\\ImmMap, fromArray, BaseMap::FromArray<c_ImmMap>);

  // c_Map specific
  HHVM_NAMED_ME(HH\\Map, add,           &c_Map::php_add);
  HHVM_NAMED_ME(HH\\Map, addAll,        &c_Map::php_addAll);
  HHVM_NAMED_ME(HH\\Map, set,           &c_Map::php_set);
  HHVM_NAMED_ME(HH\\Map, setAll,        &c_Map::php_setAll);
  HHVM_NAMED_ME(HH\\Map, removeKey,     &c_Map::php_removeKey);
  HHVM_NAMED_ME(HH\\Map, clear,         &c_Map::php_clear);
  HHVM_NAMED_ME(HH\\Map, reserve,       &c_Map::php_reserve);

  HHVM_NAMED_ME(HH\\Map, toImmMap,      &c_Map::getImmutableCopy);
  HHVM_NAMED_ME(HH\\Map, retain,        &c_Map::php_retain<false>);
  HHVM_NAMED_ME(HH\\Map, retainWithKey, &c_Map::php_retain<true>);

  loadSystemlib("collections-map");

  c_Map::s_cls = Unit::lookupClass(s_HH_Map.get());
  assertx(c_Map::s_cls);
  finishClass<c_Map>();

  c_ImmMap::s_cls = Unit::lookupClass(s_HH_ImmMap.get());
  assertx(c_ImmMap::s_cls);
  finishClass<c_ImmMap>();
}