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>(); }
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(); }
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>(); }